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

package com.akdeniz.googleplaycrawler;

public final class GooglePlay {
  private GooglePlay() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
  }
  public interface AndroidAppDeliveryDataOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 downloadSize = 1;
    /**
     * <code>optional int64 downloadSize = 1;</code>
     */
    boolean hasDownloadSize();
    /**
     * <code>optional int64 downloadSize = 1;</code>
     */
    long getDownloadSize();

    // optional string signature = 2;
    /**
     * <code>optional string signature = 2;</code>
     */
    boolean hasSignature();
    /**
     * <code>optional string signature = 2;</code>
     */
    java.lang.String getSignature();
    /**
     * <code>optional string signature = 2;</code>
     */
    com.google.protobuf.ByteString
        getSignatureBytes();

    // optional string downloadUrl = 3;
    /**
     * <code>optional string downloadUrl = 3;</code>
     */
    boolean hasDownloadUrl();
    /**
     * <code>optional string downloadUrl = 3;</code>
     */
    java.lang.String getDownloadUrl();
    /**
     * <code>optional string downloadUrl = 3;</code>
     */
    com.google.protobuf.ByteString
        getDownloadUrlBytes();

    // repeated .AppFileMetadata additionalFile = 4;
    /**
     * <code>repeated .AppFileMetadata additionalFile = 4;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata> 
        getAdditionalFileList();
    /**
     * <code>repeated .AppFileMetadata additionalFile = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata getAdditionalFile(int index);
    /**
     * <code>repeated .AppFileMetadata additionalFile = 4;</code>
     */
    int getAdditionalFileCount();
    /**
     * <code>repeated .AppFileMetadata additionalFile = 4;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadataOrBuilder> 
        getAdditionalFileOrBuilderList();
    /**
     * <code>repeated .AppFileMetadata additionalFile = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadataOrBuilder getAdditionalFileOrBuilder(
        int index);

    // repeated .HttpCookie downloadAuthCookie = 5;
    /**
     * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie> 
        getDownloadAuthCookieList();
    /**
     * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie getDownloadAuthCookie(int index);
    /**
     * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
     */
    int getDownloadAuthCookieCount();
    /**
     * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.HttpCookieOrBuilder> 
        getDownloadAuthCookieOrBuilderList();
    /**
     * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.HttpCookieOrBuilder getDownloadAuthCookieOrBuilder(
        int index);

    // optional bool forwardLocked = 6;
    /**
     * <code>optional bool forwardLocked = 6;</code>
     */
    boolean hasForwardLocked();
    /**
     * <code>optional bool forwardLocked = 6;</code>
     */
    boolean getForwardLocked();

    // optional int64 refundTimeout = 7;
    /**
     * <code>optional int64 refundTimeout = 7;</code>
     */
    boolean hasRefundTimeout();
    /**
     * <code>optional int64 refundTimeout = 7;</code>
     */
    long getRefundTimeout();

    // optional bool serverInitiated = 8;
    /**
     * <code>optional bool serverInitiated = 8;</code>
     */
    boolean hasServerInitiated();
    /**
     * <code>optional bool serverInitiated = 8;</code>
     */
    boolean getServerInitiated();

    // optional int64 postInstallRefundWindowMillis = 9;
    /**
     * <code>optional int64 postInstallRefundWindowMillis = 9;</code>
     */
    boolean hasPostInstallRefundWindowMillis();
    /**
     * <code>optional int64 postInstallRefundWindowMillis = 9;</code>
     */
    long getPostInstallRefundWindowMillis();

    // optional bool immediateStartNeeded = 10;
    /**
     * <code>optional bool immediateStartNeeded = 10;</code>
     */
    boolean hasImmediateStartNeeded();
    /**
     * <code>optional bool immediateStartNeeded = 10;</code>
     */
    boolean getImmediateStartNeeded();

    // optional .AndroidAppPatchData patchData = 11;
    /**
     * <code>optional .AndroidAppPatchData patchData = 11;</code>
     */
    boolean hasPatchData();
    /**
     * <code>optional .AndroidAppPatchData patchData = 11;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData getPatchData();
    /**
     * <code>optional .AndroidAppPatchData patchData = 11;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchDataOrBuilder getPatchDataOrBuilder();

    // optional .EncryptionParams encryptionParams = 12;
    /**
     * <code>optional .EncryptionParams encryptionParams = 12;</code>
     */
    boolean hasEncryptionParams();
    /**
     * <code>optional .EncryptionParams encryptionParams = 12;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams getEncryptionParams();
    /**
     * <code>optional .EncryptionParams encryptionParams = 12;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParamsOrBuilder getEncryptionParamsOrBuilder();
  }
  /**
   * Protobuf type {@code AndroidAppDeliveryData}
   */
  public static final class AndroidAppDeliveryData extends
      com.google.protobuf.GeneratedMessage
      implements AndroidAppDeliveryDataOrBuilder {
    // Use AndroidAppDeliveryData.newBuilder() to construct.
    private AndroidAppDeliveryData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AndroidAppDeliveryData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public AndroidAppDeliveryData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AndroidAppDeliveryData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              downloadSize_ = input.readInt64();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              signature_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              downloadUrl_ = input.readBytes();
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                additionalFile_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata>();
                mutable_bitField0_ |= 0x00000008;
              }
              additionalFile_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.PARSER, extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                downloadAuthCookie_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie>();
                mutable_bitField0_ |= 0x00000010;
              }
              downloadAuthCookie_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.PARSER, extensionRegistry));
              break;
            }
            case 48: {
              bitField0_ |= 0x00000008;
              forwardLocked_ = input.readBool();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000010;
              refundTimeout_ = input.readInt64();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000020;
              serverInitiated_ = input.readBool();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000040;
              postInstallRefundWindowMillis_ = input.readInt64();
              break;
            }
            case 80: {
              bitField0_ |= 0x00000080;
              immediateStartNeeded_ = input.readBool();
              break;
            }
            case 90: {
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = patchData_.toBuilder();
              }
              patchData_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(patchData_);
                patchData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 98: {
              com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.Builder subBuilder = null;
              if (((bitField0_ & 0x00000200) == 0x00000200)) {
                subBuilder = encryptionParams_.toBuilder();
              }
              encryptionParams_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(encryptionParams_);
                encryptionParams_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000200;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          additionalFile_ = java.util.Collections.unmodifiableList(additionalFile_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          downloadAuthCookie_ = java.util.Collections.unmodifiableList(downloadAuthCookie_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppDeliveryData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppDeliveryData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int64 downloadSize = 1;
    public static final int DOWNLOADSIZE_FIELD_NUMBER = 1;
    private long downloadSize_;
    /**
     * <code>optional int64 downloadSize = 1;</code>
     */
    public boolean hasDownloadSize() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 downloadSize = 1;</code>
     */
    public long getDownloadSize() {
      return downloadSize_;
    }

    // optional string signature = 2;
    public static final int SIGNATURE_FIELD_NUMBER = 2;
    private java.lang.Object signature_;
    /**
     * <code>optional string signature = 2;</code>
     */
    public boolean hasSignature() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string signature = 2;</code>
     */
    public java.lang.String getSignature() {
      java.lang.Object ref = signature_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          signature_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string signature = 2;</code>
     */
    public com.google.protobuf.ByteString
        getSignatureBytes() {
      java.lang.Object ref = signature_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        signature_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string downloadUrl = 3;
    public static final int DOWNLOADURL_FIELD_NUMBER = 3;
    private java.lang.Object downloadUrl_;
    /**
     * <code>optional string downloadUrl = 3;</code>
     */
    public boolean hasDownloadUrl() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string downloadUrl = 3;</code>
     */
    public java.lang.String getDownloadUrl() {
      java.lang.Object ref = downloadUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          downloadUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string downloadUrl = 3;</code>
     */
    public com.google.protobuf.ByteString
        getDownloadUrlBytes() {
      java.lang.Object ref = downloadUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        downloadUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated .AppFileMetadata additionalFile = 4;
    public static final int ADDITIONALFILE_FIELD_NUMBER = 4;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata> additionalFile_;
    /**
     * <code>repeated .AppFileMetadata additionalFile = 4;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata> getAdditionalFileList() {
      return additionalFile_;
    }
    /**
     * <code>repeated .AppFileMetadata additionalFile = 4;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadataOrBuilder> 
        getAdditionalFileOrBuilderList() {
      return additionalFile_;
    }
    /**
     * <code>repeated .AppFileMetadata additionalFile = 4;</code>
     */
    public int getAdditionalFileCount() {
      return additionalFile_.size();
    }
    /**
     * <code>repeated .AppFileMetadata additionalFile = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata getAdditionalFile(int index) {
      return additionalFile_.get(index);
    }
    /**
     * <code>repeated .AppFileMetadata additionalFile = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadataOrBuilder getAdditionalFileOrBuilder(
        int index) {
      return additionalFile_.get(index);
    }

    // repeated .HttpCookie downloadAuthCookie = 5;
    public static final int DOWNLOADAUTHCOOKIE_FIELD_NUMBER = 5;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie> downloadAuthCookie_;
    /**
     * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie> getDownloadAuthCookieList() {
      return downloadAuthCookie_;
    }
    /**
     * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.HttpCookieOrBuilder> 
        getDownloadAuthCookieOrBuilderList() {
      return downloadAuthCookie_;
    }
    /**
     * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
     */
    public int getDownloadAuthCookieCount() {
      return downloadAuthCookie_.size();
    }
    /**
     * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie getDownloadAuthCookie(int index) {
      return downloadAuthCookie_.get(index);
    }
    /**
     * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.HttpCookieOrBuilder getDownloadAuthCookieOrBuilder(
        int index) {
      return downloadAuthCookie_.get(index);
    }

    // optional bool forwardLocked = 6;
    public static final int FORWARDLOCKED_FIELD_NUMBER = 6;
    private boolean forwardLocked_;
    /**
     * <code>optional bool forwardLocked = 6;</code>
     */
    public boolean hasForwardLocked() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool forwardLocked = 6;</code>
     */
    public boolean getForwardLocked() {
      return forwardLocked_;
    }

    // optional int64 refundTimeout = 7;
    public static final int REFUNDTIMEOUT_FIELD_NUMBER = 7;
    private long refundTimeout_;
    /**
     * <code>optional int64 refundTimeout = 7;</code>
     */
    public boolean hasRefundTimeout() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int64 refundTimeout = 7;</code>
     */
    public long getRefundTimeout() {
      return refundTimeout_;
    }

    // optional bool serverInitiated = 8;
    public static final int SERVERINITIATED_FIELD_NUMBER = 8;
    private boolean serverInitiated_;
    /**
     * <code>optional bool serverInitiated = 8;</code>
     */
    public boolean hasServerInitiated() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional bool serverInitiated = 8;</code>
     */
    public boolean getServerInitiated() {
      return serverInitiated_;
    }

    // optional int64 postInstallRefundWindowMillis = 9;
    public static final int POSTINSTALLREFUNDWINDOWMILLIS_FIELD_NUMBER = 9;
    private long postInstallRefundWindowMillis_;
    /**
     * <code>optional int64 postInstallRefundWindowMillis = 9;</code>
     */
    public boolean hasPostInstallRefundWindowMillis() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional int64 postInstallRefundWindowMillis = 9;</code>
     */
    public long getPostInstallRefundWindowMillis() {
      return postInstallRefundWindowMillis_;
    }

    // optional bool immediateStartNeeded = 10;
    public static final int IMMEDIATESTARTNEEDED_FIELD_NUMBER = 10;
    private boolean immediateStartNeeded_;
    /**
     * <code>optional bool immediateStartNeeded = 10;</code>
     */
    public boolean hasImmediateStartNeeded() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional bool immediateStartNeeded = 10;</code>
     */
    public boolean getImmediateStartNeeded() {
      return immediateStartNeeded_;
    }

    // optional .AndroidAppPatchData patchData = 11;
    public static final int PATCHDATA_FIELD_NUMBER = 11;
    private com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData patchData_;
    /**
     * <code>optional .AndroidAppPatchData patchData = 11;</code>
     */
    public boolean hasPatchData() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional .AndroidAppPatchData patchData = 11;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData getPatchData() {
      return patchData_;
    }
    /**
     * <code>optional .AndroidAppPatchData patchData = 11;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchDataOrBuilder getPatchDataOrBuilder() {
      return patchData_;
    }

    // optional .EncryptionParams encryptionParams = 12;
    public static final int ENCRYPTIONPARAMS_FIELD_NUMBER = 12;
    private com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams encryptionParams_;
    /**
     * <code>optional .EncryptionParams encryptionParams = 12;</code>
     */
    public boolean hasEncryptionParams() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional .EncryptionParams encryptionParams = 12;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams getEncryptionParams() {
      return encryptionParams_;
    }
    /**
     * <code>optional .EncryptionParams encryptionParams = 12;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParamsOrBuilder getEncryptionParamsOrBuilder() {
      return encryptionParams_;
    }

    private void initFields() {
      downloadSize_ = 0L;
      signature_ = "";
      downloadUrl_ = "";
      additionalFile_ = java.util.Collections.emptyList();
      downloadAuthCookie_ = java.util.Collections.emptyList();
      forwardLocked_ = false;
      refundTimeout_ = 0L;
      serverInitiated_ = false;
      postInstallRefundWindowMillis_ = 0L;
      immediateStartNeeded_ = false;
      patchData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.getDefaultInstance();
      encryptionParams_ = com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, downloadSize_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getSignatureBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getDownloadUrlBytes());
      }
      for (int i = 0; i < additionalFile_.size(); i++) {
        output.writeMessage(4, additionalFile_.get(i));
      }
      for (int i = 0; i < downloadAuthCookie_.size(); i++) {
        output.writeMessage(5, downloadAuthCookie_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(6, forwardLocked_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(7, refundTimeout_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(8, serverInitiated_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt64(9, postInstallRefundWindowMillis_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBool(10, immediateStartNeeded_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(11, patchData_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeMessage(12, encryptionParams_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, downloadSize_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getSignatureBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getDownloadUrlBytes());
      }
      for (int i = 0; i < additionalFile_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, additionalFile_.get(i));
      }
      for (int i = 0; i < downloadAuthCookie_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, downloadAuthCookie_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, forwardLocked_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(7, refundTimeout_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(8, serverInitiated_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(9, postInstallRefundWindowMillis_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(10, immediateStartNeeded_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, patchData_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, encryptionParams_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AndroidAppDeliveryData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppDeliveryData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppDeliveryData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        downloadSize_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        signature_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        downloadUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        if (additionalFileBuilder_ == null) {
          additionalFile_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          additionalFileBuilder_.clear();
        }
        if (downloadAuthCookieBuilder_ == null) {
          downloadAuthCookie_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          downloadAuthCookieBuilder_.clear();
        }
        forwardLocked_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        refundTimeout_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        serverInitiated_ = false;
        bitField0_ = (bitField0_ & ~0x00000080);
        postInstallRefundWindowMillis_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000100);
        immediateStartNeeded_ = false;
        bitField0_ = (bitField0_ & ~0x00000200);
        if (patchDataBuilder_ == null) {
          patchData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.getDefaultInstance();
        } else {
          patchDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        if (encryptionParamsBuilder_ == null) {
          encryptionParams_ = com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.getDefaultInstance();
        } else {
          encryptionParamsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppDeliveryData_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData result = new com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.downloadSize_ = downloadSize_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.signature_ = signature_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.downloadUrl_ = downloadUrl_;
        if (additionalFileBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            additionalFile_ = java.util.Collections.unmodifiableList(additionalFile_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.additionalFile_ = additionalFile_;
        } else {
          result.additionalFile_ = additionalFileBuilder_.build();
        }
        if (downloadAuthCookieBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            downloadAuthCookie_ = java.util.Collections.unmodifiableList(downloadAuthCookie_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.downloadAuthCookie_ = downloadAuthCookie_;
        } else {
          result.downloadAuthCookie_ = downloadAuthCookieBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000008;
        }
        result.forwardLocked_ = forwardLocked_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000010;
        }
        result.refundTimeout_ = refundTimeout_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000020;
        }
        result.serverInitiated_ = serverInitiated_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000040;
        }
        result.postInstallRefundWindowMillis_ = postInstallRefundWindowMillis_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000080;
        }
        result.immediateStartNeeded_ = immediateStartNeeded_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000100;
        }
        if (patchDataBuilder_ == null) {
          result.patchData_ = patchData_;
        } else {
          result.patchData_ = patchDataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000200;
        }
        if (encryptionParamsBuilder_ == null) {
          result.encryptionParams_ = encryptionParams_;
        } else {
          result.encryptionParams_ = encryptionParamsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance()) return this;
        if (other.hasDownloadSize()) {
          setDownloadSize(other.getDownloadSize());
        }
        if (other.hasSignature()) {
          bitField0_ |= 0x00000002;
          signature_ = other.signature_;
          onChanged();
        }
        if (other.hasDownloadUrl()) {
          bitField0_ |= 0x00000004;
          downloadUrl_ = other.downloadUrl_;
          onChanged();
        }
        if (additionalFileBuilder_ == null) {
          if (!other.additionalFile_.isEmpty()) {
            if (additionalFile_.isEmpty()) {
              additionalFile_ = other.additionalFile_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureAdditionalFileIsMutable();
              additionalFile_.addAll(other.additionalFile_);
            }
            onChanged();
          }
        } else {
          if (!other.additionalFile_.isEmpty()) {
            if (additionalFileBuilder_.isEmpty()) {
              additionalFileBuilder_.dispose();
              additionalFileBuilder_ = null;
              additionalFile_ = other.additionalFile_;
              bitField0_ = (bitField0_ & ~0x00000008);
              additionalFileBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getAdditionalFileFieldBuilder() : null;
            } else {
              additionalFileBuilder_.addAllMessages(other.additionalFile_);
            }
          }
        }
        if (downloadAuthCookieBuilder_ == null) {
          if (!other.downloadAuthCookie_.isEmpty()) {
            if (downloadAuthCookie_.isEmpty()) {
              downloadAuthCookie_ = other.downloadAuthCookie_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureDownloadAuthCookieIsMutable();
              downloadAuthCookie_.addAll(other.downloadAuthCookie_);
            }
            onChanged();
          }
        } else {
          if (!other.downloadAuthCookie_.isEmpty()) {
            if (downloadAuthCookieBuilder_.isEmpty()) {
              downloadAuthCookieBuilder_.dispose();
              downloadAuthCookieBuilder_ = null;
              downloadAuthCookie_ = other.downloadAuthCookie_;
              bitField0_ = (bitField0_ & ~0x00000010);
              downloadAuthCookieBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getDownloadAuthCookieFieldBuilder() : null;
            } else {
              downloadAuthCookieBuilder_.addAllMessages(other.downloadAuthCookie_);
            }
          }
        }
        if (other.hasForwardLocked()) {
          setForwardLocked(other.getForwardLocked());
        }
        if (other.hasRefundTimeout()) {
          setRefundTimeout(other.getRefundTimeout());
        }
        if (other.hasServerInitiated()) {
          setServerInitiated(other.getServerInitiated());
        }
        if (other.hasPostInstallRefundWindowMillis()) {
          setPostInstallRefundWindowMillis(other.getPostInstallRefundWindowMillis());
        }
        if (other.hasImmediateStartNeeded()) {
          setImmediateStartNeeded(other.getImmediateStartNeeded());
        }
        if (other.hasPatchData()) {
          mergePatchData(other.getPatchData());
        }
        if (other.hasEncryptionParams()) {
          mergeEncryptionParams(other.getEncryptionParams());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int64 downloadSize = 1;
      private long downloadSize_ ;
      /**
       * <code>optional int64 downloadSize = 1;</code>
       */
      public boolean hasDownloadSize() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 downloadSize = 1;</code>
       */
      public long getDownloadSize() {
        return downloadSize_;
      }
      /**
       * <code>optional int64 downloadSize = 1;</code>
       */
      public Builder setDownloadSize(long value) {
        bitField0_ |= 0x00000001;
        downloadSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 downloadSize = 1;</code>
       */
      public Builder clearDownloadSize() {
        bitField0_ = (bitField0_ & ~0x00000001);
        downloadSize_ = 0L;
        onChanged();
        return this;
      }

      // optional string signature = 2;
      private java.lang.Object signature_ = "";
      /**
       * <code>optional string signature = 2;</code>
       */
      public boolean hasSignature() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string signature = 2;</code>
       */
      public java.lang.String getSignature() {
        java.lang.Object ref = signature_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          signature_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string signature = 2;</code>
       */
      public com.google.protobuf.ByteString
          getSignatureBytes() {
        java.lang.Object ref = signature_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          signature_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string signature = 2;</code>
       */
      public Builder setSignature(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        signature_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string signature = 2;</code>
       */
      public Builder clearSignature() {
        bitField0_ = (bitField0_ & ~0x00000002);
        signature_ = getDefaultInstance().getSignature();
        onChanged();
        return this;
      }
      /**
       * <code>optional string signature = 2;</code>
       */
      public Builder setSignatureBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        signature_ = value;
        onChanged();
        return this;
      }

      // optional string downloadUrl = 3;
      private java.lang.Object downloadUrl_ = "";
      /**
       * <code>optional string downloadUrl = 3;</code>
       */
      public boolean hasDownloadUrl() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string downloadUrl = 3;</code>
       */
      public java.lang.String getDownloadUrl() {
        java.lang.Object ref = downloadUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          downloadUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string downloadUrl = 3;</code>
       */
      public com.google.protobuf.ByteString
          getDownloadUrlBytes() {
        java.lang.Object ref = downloadUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          downloadUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string downloadUrl = 3;</code>
       */
      public Builder setDownloadUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        downloadUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string downloadUrl = 3;</code>
       */
      public Builder clearDownloadUrl() {
        bitField0_ = (bitField0_ & ~0x00000004);
        downloadUrl_ = getDefaultInstance().getDownloadUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string downloadUrl = 3;</code>
       */
      public Builder setDownloadUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        downloadUrl_ = value;
        onChanged();
        return this;
      }

      // repeated .AppFileMetadata additionalFile = 4;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata> additionalFile_ =
        java.util.Collections.emptyList();
      private void ensureAdditionalFileIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          additionalFile_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata>(additionalFile_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata, com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadataOrBuilder> additionalFileBuilder_;

      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata> getAdditionalFileList() {
        if (additionalFileBuilder_ == null) {
          return java.util.Collections.unmodifiableList(additionalFile_);
        } else {
          return additionalFileBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public int getAdditionalFileCount() {
        if (additionalFileBuilder_ == null) {
          return additionalFile_.size();
        } else {
          return additionalFileBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata getAdditionalFile(int index) {
        if (additionalFileBuilder_ == null) {
          return additionalFile_.get(index);
        } else {
          return additionalFileBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public Builder setAdditionalFile(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata value) {
        if (additionalFileBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalFileIsMutable();
          additionalFile_.set(index, value);
          onChanged();
        } else {
          additionalFileBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public Builder setAdditionalFile(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.Builder builderForValue) {
        if (additionalFileBuilder_ == null) {
          ensureAdditionalFileIsMutable();
          additionalFile_.set(index, builderForValue.build());
          onChanged();
        } else {
          additionalFileBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public Builder addAdditionalFile(com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata value) {
        if (additionalFileBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalFileIsMutable();
          additionalFile_.add(value);
          onChanged();
        } else {
          additionalFileBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public Builder addAdditionalFile(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata value) {
        if (additionalFileBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAdditionalFileIsMutable();
          additionalFile_.add(index, value);
          onChanged();
        } else {
          additionalFileBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public Builder addAdditionalFile(
          com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.Builder builderForValue) {
        if (additionalFileBuilder_ == null) {
          ensureAdditionalFileIsMutable();
          additionalFile_.add(builderForValue.build());
          onChanged();
        } else {
          additionalFileBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public Builder addAdditionalFile(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.Builder builderForValue) {
        if (additionalFileBuilder_ == null) {
          ensureAdditionalFileIsMutable();
          additionalFile_.add(index, builderForValue.build());
          onChanged();
        } else {
          additionalFileBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public Builder addAllAdditionalFile(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata> values) {
        if (additionalFileBuilder_ == null) {
          ensureAdditionalFileIsMutable();
          super.addAll(values, additionalFile_);
          onChanged();
        } else {
          additionalFileBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public Builder clearAdditionalFile() {
        if (additionalFileBuilder_ == null) {
          additionalFile_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          additionalFileBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public Builder removeAdditionalFile(int index) {
        if (additionalFileBuilder_ == null) {
          ensureAdditionalFileIsMutable();
          additionalFile_.remove(index);
          onChanged();
        } else {
          additionalFileBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.Builder getAdditionalFileBuilder(
          int index) {
        return getAdditionalFileFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadataOrBuilder getAdditionalFileOrBuilder(
          int index) {
        if (additionalFileBuilder_ == null) {
          return additionalFile_.get(index);  } else {
          return additionalFileBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadataOrBuilder> 
           getAdditionalFileOrBuilderList() {
        if (additionalFileBuilder_ != null) {
          return additionalFileBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(additionalFile_);
        }
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.Builder addAdditionalFileBuilder() {
        return getAdditionalFileFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.getDefaultInstance());
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.Builder addAdditionalFileBuilder(
          int index) {
        return getAdditionalFileFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.getDefaultInstance());
      }
      /**
       * <code>repeated .AppFileMetadata additionalFile = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.Builder> 
           getAdditionalFileBuilderList() {
        return getAdditionalFileFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata, com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadataOrBuilder> 
          getAdditionalFileFieldBuilder() {
        if (additionalFileBuilder_ == null) {
          additionalFileBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata, com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadataOrBuilder>(
                  additionalFile_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          additionalFile_ = null;
        }
        return additionalFileBuilder_;
      }

      // repeated .HttpCookie downloadAuthCookie = 5;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie> downloadAuthCookie_ =
        java.util.Collections.emptyList();
      private void ensureDownloadAuthCookieIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          downloadAuthCookie_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie>(downloadAuthCookie_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie, com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.Builder, com.akdeniz.googleplaycrawler.GooglePlay.HttpCookieOrBuilder> downloadAuthCookieBuilder_;

      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie> getDownloadAuthCookieList() {
        if (downloadAuthCookieBuilder_ == null) {
          return java.util.Collections.unmodifiableList(downloadAuthCookie_);
        } else {
          return downloadAuthCookieBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public int getDownloadAuthCookieCount() {
        if (downloadAuthCookieBuilder_ == null) {
          return downloadAuthCookie_.size();
        } else {
          return downloadAuthCookieBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie getDownloadAuthCookie(int index) {
        if (downloadAuthCookieBuilder_ == null) {
          return downloadAuthCookie_.get(index);
        } else {
          return downloadAuthCookieBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public Builder setDownloadAuthCookie(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie value) {
        if (downloadAuthCookieBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDownloadAuthCookieIsMutable();
          downloadAuthCookie_.set(index, value);
          onChanged();
        } else {
          downloadAuthCookieBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public Builder setDownloadAuthCookie(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.Builder builderForValue) {
        if (downloadAuthCookieBuilder_ == null) {
          ensureDownloadAuthCookieIsMutable();
          downloadAuthCookie_.set(index, builderForValue.build());
          onChanged();
        } else {
          downloadAuthCookieBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public Builder addDownloadAuthCookie(com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie value) {
        if (downloadAuthCookieBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDownloadAuthCookieIsMutable();
          downloadAuthCookie_.add(value);
          onChanged();
        } else {
          downloadAuthCookieBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public Builder addDownloadAuthCookie(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie value) {
        if (downloadAuthCookieBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDownloadAuthCookieIsMutable();
          downloadAuthCookie_.add(index, value);
          onChanged();
        } else {
          downloadAuthCookieBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public Builder addDownloadAuthCookie(
          com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.Builder builderForValue) {
        if (downloadAuthCookieBuilder_ == null) {
          ensureDownloadAuthCookieIsMutable();
          downloadAuthCookie_.add(builderForValue.build());
          onChanged();
        } else {
          downloadAuthCookieBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public Builder addDownloadAuthCookie(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.Builder builderForValue) {
        if (downloadAuthCookieBuilder_ == null) {
          ensureDownloadAuthCookieIsMutable();
          downloadAuthCookie_.add(index, builderForValue.build());
          onChanged();
        } else {
          downloadAuthCookieBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public Builder addAllDownloadAuthCookie(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie> values) {
        if (downloadAuthCookieBuilder_ == null) {
          ensureDownloadAuthCookieIsMutable();
          super.addAll(values, downloadAuthCookie_);
          onChanged();
        } else {
          downloadAuthCookieBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public Builder clearDownloadAuthCookie() {
        if (downloadAuthCookieBuilder_ == null) {
          downloadAuthCookie_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          downloadAuthCookieBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public Builder removeDownloadAuthCookie(int index) {
        if (downloadAuthCookieBuilder_ == null) {
          ensureDownloadAuthCookieIsMutable();
          downloadAuthCookie_.remove(index);
          onChanged();
        } else {
          downloadAuthCookieBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.Builder getDownloadAuthCookieBuilder(
          int index) {
        return getDownloadAuthCookieFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.HttpCookieOrBuilder getDownloadAuthCookieOrBuilder(
          int index) {
        if (downloadAuthCookieBuilder_ == null) {
          return downloadAuthCookie_.get(index);  } else {
          return downloadAuthCookieBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.HttpCookieOrBuilder> 
           getDownloadAuthCookieOrBuilderList() {
        if (downloadAuthCookieBuilder_ != null) {
          return downloadAuthCookieBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(downloadAuthCookie_);
        }
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.Builder addDownloadAuthCookieBuilder() {
        return getDownloadAuthCookieFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.getDefaultInstance());
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.Builder addDownloadAuthCookieBuilder(
          int index) {
        return getDownloadAuthCookieFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.getDefaultInstance());
      }
      /**
       * <code>repeated .HttpCookie downloadAuthCookie = 5;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.Builder> 
           getDownloadAuthCookieBuilderList() {
        return getDownloadAuthCookieFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie, com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.Builder, com.akdeniz.googleplaycrawler.GooglePlay.HttpCookieOrBuilder> 
          getDownloadAuthCookieFieldBuilder() {
        if (downloadAuthCookieBuilder_ == null) {
          downloadAuthCookieBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie, com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.Builder, com.akdeniz.googleplaycrawler.GooglePlay.HttpCookieOrBuilder>(
                  downloadAuthCookie_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          downloadAuthCookie_ = null;
        }
        return downloadAuthCookieBuilder_;
      }

      // optional bool forwardLocked = 6;
      private boolean forwardLocked_ ;
      /**
       * <code>optional bool forwardLocked = 6;</code>
       */
      public boolean hasForwardLocked() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bool forwardLocked = 6;</code>
       */
      public boolean getForwardLocked() {
        return forwardLocked_;
      }
      /**
       * <code>optional bool forwardLocked = 6;</code>
       */
      public Builder setForwardLocked(boolean value) {
        bitField0_ |= 0x00000020;
        forwardLocked_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool forwardLocked = 6;</code>
       */
      public Builder clearForwardLocked() {
        bitField0_ = (bitField0_ & ~0x00000020);
        forwardLocked_ = false;
        onChanged();
        return this;
      }

      // optional int64 refundTimeout = 7;
      private long refundTimeout_ ;
      /**
       * <code>optional int64 refundTimeout = 7;</code>
       */
      public boolean hasRefundTimeout() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional int64 refundTimeout = 7;</code>
       */
      public long getRefundTimeout() {
        return refundTimeout_;
      }
      /**
       * <code>optional int64 refundTimeout = 7;</code>
       */
      public Builder setRefundTimeout(long value) {
        bitField0_ |= 0x00000040;
        refundTimeout_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 refundTimeout = 7;</code>
       */
      public Builder clearRefundTimeout() {
        bitField0_ = (bitField0_ & ~0x00000040);
        refundTimeout_ = 0L;
        onChanged();
        return this;
      }

      // optional bool serverInitiated = 8;
      private boolean serverInitiated_ ;
      /**
       * <code>optional bool serverInitiated = 8;</code>
       */
      public boolean hasServerInitiated() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional bool serverInitiated = 8;</code>
       */
      public boolean getServerInitiated() {
        return serverInitiated_;
      }
      /**
       * <code>optional bool serverInitiated = 8;</code>
       */
      public Builder setServerInitiated(boolean value) {
        bitField0_ |= 0x00000080;
        serverInitiated_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool serverInitiated = 8;</code>
       */
      public Builder clearServerInitiated() {
        bitField0_ = (bitField0_ & ~0x00000080);
        serverInitiated_ = false;
        onChanged();
        return this;
      }

      // optional int64 postInstallRefundWindowMillis = 9;
      private long postInstallRefundWindowMillis_ ;
      /**
       * <code>optional int64 postInstallRefundWindowMillis = 9;</code>
       */
      public boolean hasPostInstallRefundWindowMillis() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional int64 postInstallRefundWindowMillis = 9;</code>
       */
      public long getPostInstallRefundWindowMillis() {
        return postInstallRefundWindowMillis_;
      }
      /**
       * <code>optional int64 postInstallRefundWindowMillis = 9;</code>
       */
      public Builder setPostInstallRefundWindowMillis(long value) {
        bitField0_ |= 0x00000100;
        postInstallRefundWindowMillis_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 postInstallRefundWindowMillis = 9;</code>
       */
      public Builder clearPostInstallRefundWindowMillis() {
        bitField0_ = (bitField0_ & ~0x00000100);
        postInstallRefundWindowMillis_ = 0L;
        onChanged();
        return this;
      }

      // optional bool immediateStartNeeded = 10;
      private boolean immediateStartNeeded_ ;
      /**
       * <code>optional bool immediateStartNeeded = 10;</code>
       */
      public boolean hasImmediateStartNeeded() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional bool immediateStartNeeded = 10;</code>
       */
      public boolean getImmediateStartNeeded() {
        return immediateStartNeeded_;
      }
      /**
       * <code>optional bool immediateStartNeeded = 10;</code>
       */
      public Builder setImmediateStartNeeded(boolean value) {
        bitField0_ |= 0x00000200;
        immediateStartNeeded_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool immediateStartNeeded = 10;</code>
       */
      public Builder clearImmediateStartNeeded() {
        bitField0_ = (bitField0_ & ~0x00000200);
        immediateStartNeeded_ = false;
        onChanged();
        return this;
      }

      // optional .AndroidAppPatchData patchData = 11;
      private com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData patchData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchDataOrBuilder> patchDataBuilder_;
      /**
       * <code>optional .AndroidAppPatchData patchData = 11;</code>
       */
      public boolean hasPatchData() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional .AndroidAppPatchData patchData = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData getPatchData() {
        if (patchDataBuilder_ == null) {
          return patchData_;
        } else {
          return patchDataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AndroidAppPatchData patchData = 11;</code>
       */
      public Builder setPatchData(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData value) {
        if (patchDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          patchData_ = value;
          onChanged();
        } else {
          patchDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .AndroidAppPatchData patchData = 11;</code>
       */
      public Builder setPatchData(
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.Builder builderForValue) {
        if (patchDataBuilder_ == null) {
          patchData_ = builderForValue.build();
          onChanged();
        } else {
          patchDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .AndroidAppPatchData patchData = 11;</code>
       */
      public Builder mergePatchData(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData value) {
        if (patchDataBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400) &&
              patchData_ != com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.getDefaultInstance()) {
            patchData_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.newBuilder(patchData_).mergeFrom(value).buildPartial();
          } else {
            patchData_ = value;
          }
          onChanged();
        } else {
          patchDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .AndroidAppPatchData patchData = 11;</code>
       */
      public Builder clearPatchData() {
        if (patchDataBuilder_ == null) {
          patchData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.getDefaultInstance();
          onChanged();
        } else {
          patchDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }
      /**
       * <code>optional .AndroidAppPatchData patchData = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.Builder getPatchDataBuilder() {
        bitField0_ |= 0x00000400;
        onChanged();
        return getPatchDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AndroidAppPatchData patchData = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchDataOrBuilder getPatchDataOrBuilder() {
        if (patchDataBuilder_ != null) {
          return patchDataBuilder_.getMessageOrBuilder();
        } else {
          return patchData_;
        }
      }
      /**
       * <code>optional .AndroidAppPatchData patchData = 11;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchDataOrBuilder> 
          getPatchDataFieldBuilder() {
        if (patchDataBuilder_ == null) {
          patchDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchDataOrBuilder>(
                  patchData_,
                  getParentForChildren(),
                  isClean());
          patchData_ = null;
        }
        return patchDataBuilder_;
      }

      // optional .EncryptionParams encryptionParams = 12;
      private com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams encryptionParams_ = com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams, com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.Builder, com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParamsOrBuilder> encryptionParamsBuilder_;
      /**
       * <code>optional .EncryptionParams encryptionParams = 12;</code>
       */
      public boolean hasEncryptionParams() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional .EncryptionParams encryptionParams = 12;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams getEncryptionParams() {
        if (encryptionParamsBuilder_ == null) {
          return encryptionParams_;
        } else {
          return encryptionParamsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .EncryptionParams encryptionParams = 12;</code>
       */
      public Builder setEncryptionParams(com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams value) {
        if (encryptionParamsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          encryptionParams_ = value;
          onChanged();
        } else {
          encryptionParamsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .EncryptionParams encryptionParams = 12;</code>
       */
      public Builder setEncryptionParams(
          com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.Builder builderForValue) {
        if (encryptionParamsBuilder_ == null) {
          encryptionParams_ = builderForValue.build();
          onChanged();
        } else {
          encryptionParamsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .EncryptionParams encryptionParams = 12;</code>
       */
      public Builder mergeEncryptionParams(com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams value) {
        if (encryptionParamsBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800) &&
              encryptionParams_ != com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.getDefaultInstance()) {
            encryptionParams_ =
              com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.newBuilder(encryptionParams_).mergeFrom(value).buildPartial();
          } else {
            encryptionParams_ = value;
          }
          onChanged();
        } else {
          encryptionParamsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .EncryptionParams encryptionParams = 12;</code>
       */
      public Builder clearEncryptionParams() {
        if (encryptionParamsBuilder_ == null) {
          encryptionParams_ = com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.getDefaultInstance();
          onChanged();
        } else {
          encryptionParamsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }
      /**
       * <code>optional .EncryptionParams encryptionParams = 12;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.Builder getEncryptionParamsBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getEncryptionParamsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .EncryptionParams encryptionParams = 12;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParamsOrBuilder getEncryptionParamsOrBuilder() {
        if (encryptionParamsBuilder_ != null) {
          return encryptionParamsBuilder_.getMessageOrBuilder();
        } else {
          return encryptionParams_;
        }
      }
      /**
       * <code>optional .EncryptionParams encryptionParams = 12;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams, com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.Builder, com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParamsOrBuilder> 
          getEncryptionParamsFieldBuilder() {
        if (encryptionParamsBuilder_ == null) {
          encryptionParamsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams, com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.Builder, com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParamsOrBuilder>(
                  encryptionParams_,
                  getParentForChildren(),
                  isClean());
          encryptionParams_ = null;
        }
        return encryptionParamsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:AndroidAppDeliveryData)
    }

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

    // @@protoc_insertion_point(class_scope:AndroidAppDeliveryData)
  }

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

    // optional int32 baseVersionCode = 1;
    /**
     * <code>optional int32 baseVersionCode = 1;</code>
     */
    boolean hasBaseVersionCode();
    /**
     * <code>optional int32 baseVersionCode = 1;</code>
     */
    int getBaseVersionCode();

    // optional string baseSignature = 2;
    /**
     * <code>optional string baseSignature = 2;</code>
     */
    boolean hasBaseSignature();
    /**
     * <code>optional string baseSignature = 2;</code>
     */
    java.lang.String getBaseSignature();
    /**
     * <code>optional string baseSignature = 2;</code>
     */
    com.google.protobuf.ByteString
        getBaseSignatureBytes();

    // optional string downloadUrl = 3;
    /**
     * <code>optional string downloadUrl = 3;</code>
     */
    boolean hasDownloadUrl();
    /**
     * <code>optional string downloadUrl = 3;</code>
     */
    java.lang.String getDownloadUrl();
    /**
     * <code>optional string downloadUrl = 3;</code>
     */
    com.google.protobuf.ByteString
        getDownloadUrlBytes();

    // optional int32 patchFormat = 4;
    /**
     * <code>optional int32 patchFormat = 4;</code>
     */
    boolean hasPatchFormat();
    /**
     * <code>optional int32 patchFormat = 4;</code>
     */
    int getPatchFormat();

    // optional int64 maxPatchSize = 5;
    /**
     * <code>optional int64 maxPatchSize = 5;</code>
     */
    boolean hasMaxPatchSize();
    /**
     * <code>optional int64 maxPatchSize = 5;</code>
     */
    long getMaxPatchSize();
  }
  /**
   * Protobuf type {@code AndroidAppPatchData}
   */
  public static final class AndroidAppPatchData extends
      com.google.protobuf.GeneratedMessage
      implements AndroidAppPatchDataOrBuilder {
    // Use AndroidAppPatchData.newBuilder() to construct.
    private AndroidAppPatchData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AndroidAppPatchData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public AndroidAppPatchData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AndroidAppPatchData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              baseVersionCode_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              baseSignature_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              downloadUrl_ = input.readBytes();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              patchFormat_ = input.readInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              maxPatchSize_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppPatchData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppPatchData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 baseVersionCode = 1;
    public static final int BASEVERSIONCODE_FIELD_NUMBER = 1;
    private int baseVersionCode_;
    /**
     * <code>optional int32 baseVersionCode = 1;</code>
     */
    public boolean hasBaseVersionCode() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 baseVersionCode = 1;</code>
     */
    public int getBaseVersionCode() {
      return baseVersionCode_;
    }

    // optional string baseSignature = 2;
    public static final int BASESIGNATURE_FIELD_NUMBER = 2;
    private java.lang.Object baseSignature_;
    /**
     * <code>optional string baseSignature = 2;</code>
     */
    public boolean hasBaseSignature() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string baseSignature = 2;</code>
     */
    public java.lang.String getBaseSignature() {
      java.lang.Object ref = baseSignature_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          baseSignature_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string baseSignature = 2;</code>
     */
    public com.google.protobuf.ByteString
        getBaseSignatureBytes() {
      java.lang.Object ref = baseSignature_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        baseSignature_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string downloadUrl = 3;
    public static final int DOWNLOADURL_FIELD_NUMBER = 3;
    private java.lang.Object downloadUrl_;
    /**
     * <code>optional string downloadUrl = 3;</code>
     */
    public boolean hasDownloadUrl() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string downloadUrl = 3;</code>
     */
    public java.lang.String getDownloadUrl() {
      java.lang.Object ref = downloadUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          downloadUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string downloadUrl = 3;</code>
     */
    public com.google.protobuf.ByteString
        getDownloadUrlBytes() {
      java.lang.Object ref = downloadUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        downloadUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 patchFormat = 4;
    public static final int PATCHFORMAT_FIELD_NUMBER = 4;
    private int patchFormat_;
    /**
     * <code>optional int32 patchFormat = 4;</code>
     */
    public boolean hasPatchFormat() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int32 patchFormat = 4;</code>
     */
    public int getPatchFormat() {
      return patchFormat_;
    }

    // optional int64 maxPatchSize = 5;
    public static final int MAXPATCHSIZE_FIELD_NUMBER = 5;
    private long maxPatchSize_;
    /**
     * <code>optional int64 maxPatchSize = 5;</code>
     */
    public boolean hasMaxPatchSize() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int64 maxPatchSize = 5;</code>
     */
    public long getMaxPatchSize() {
      return maxPatchSize_;
    }

    private void initFields() {
      baseVersionCode_ = 0;
      baseSignature_ = "";
      downloadUrl_ = "";
      patchFormat_ = 0;
      maxPatchSize_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, baseVersionCode_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getBaseSignatureBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getDownloadUrlBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, patchFormat_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(5, maxPatchSize_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, baseVersionCode_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getBaseSignatureBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getDownloadUrlBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, patchFormat_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, maxPatchSize_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AndroidAppPatchData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppPatchData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppPatchData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        baseVersionCode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        baseSignature_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        downloadUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        patchFormat_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        maxPatchSize_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppPatchData_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData result = new com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.baseVersionCode_ = baseVersionCode_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.baseSignature_ = baseSignature_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.downloadUrl_ = downloadUrl_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.patchFormat_ = patchFormat_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.maxPatchSize_ = maxPatchSize_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppPatchData.getDefaultInstance()) return this;
        if (other.hasBaseVersionCode()) {
          setBaseVersionCode(other.getBaseVersionCode());
        }
        if (other.hasBaseSignature()) {
          bitField0_ |= 0x00000002;
          baseSignature_ = other.baseSignature_;
          onChanged();
        }
        if (other.hasDownloadUrl()) {
          bitField0_ |= 0x00000004;
          downloadUrl_ = other.downloadUrl_;
          onChanged();
        }
        if (other.hasPatchFormat()) {
          setPatchFormat(other.getPatchFormat());
        }
        if (other.hasMaxPatchSize()) {
          setMaxPatchSize(other.getMaxPatchSize());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 baseVersionCode = 1;
      private int baseVersionCode_ ;
      /**
       * <code>optional int32 baseVersionCode = 1;</code>
       */
      public boolean hasBaseVersionCode() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 baseVersionCode = 1;</code>
       */
      public int getBaseVersionCode() {
        return baseVersionCode_;
      }
      /**
       * <code>optional int32 baseVersionCode = 1;</code>
       */
      public Builder setBaseVersionCode(int value) {
        bitField0_ |= 0x00000001;
        baseVersionCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 baseVersionCode = 1;</code>
       */
      public Builder clearBaseVersionCode() {
        bitField0_ = (bitField0_ & ~0x00000001);
        baseVersionCode_ = 0;
        onChanged();
        return this;
      }

      // optional string baseSignature = 2;
      private java.lang.Object baseSignature_ = "";
      /**
       * <code>optional string baseSignature = 2;</code>
       */
      public boolean hasBaseSignature() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string baseSignature = 2;</code>
       */
      public java.lang.String getBaseSignature() {
        java.lang.Object ref = baseSignature_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          baseSignature_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string baseSignature = 2;</code>
       */
      public com.google.protobuf.ByteString
          getBaseSignatureBytes() {
        java.lang.Object ref = baseSignature_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          baseSignature_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string baseSignature = 2;</code>
       */
      public Builder setBaseSignature(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        baseSignature_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string baseSignature = 2;</code>
       */
      public Builder clearBaseSignature() {
        bitField0_ = (bitField0_ & ~0x00000002);
        baseSignature_ = getDefaultInstance().getBaseSignature();
        onChanged();
        return this;
      }
      /**
       * <code>optional string baseSignature = 2;</code>
       */
      public Builder setBaseSignatureBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        baseSignature_ = value;
        onChanged();
        return this;
      }

      // optional string downloadUrl = 3;
      private java.lang.Object downloadUrl_ = "";
      /**
       * <code>optional string downloadUrl = 3;</code>
       */
      public boolean hasDownloadUrl() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string downloadUrl = 3;</code>
       */
      public java.lang.String getDownloadUrl() {
        java.lang.Object ref = downloadUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          downloadUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string downloadUrl = 3;</code>
       */
      public com.google.protobuf.ByteString
          getDownloadUrlBytes() {
        java.lang.Object ref = downloadUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          downloadUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string downloadUrl = 3;</code>
       */
      public Builder setDownloadUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        downloadUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string downloadUrl = 3;</code>
       */
      public Builder clearDownloadUrl() {
        bitField0_ = (bitField0_ & ~0x00000004);
        downloadUrl_ = getDefaultInstance().getDownloadUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string downloadUrl = 3;</code>
       */
      public Builder setDownloadUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        downloadUrl_ = value;
        onChanged();
        return this;
      }

      // optional int32 patchFormat = 4;
      private int patchFormat_ ;
      /**
       * <code>optional int32 patchFormat = 4;</code>
       */
      public boolean hasPatchFormat() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int32 patchFormat = 4;</code>
       */
      public int getPatchFormat() {
        return patchFormat_;
      }
      /**
       * <code>optional int32 patchFormat = 4;</code>
       */
      public Builder setPatchFormat(int value) {
        bitField0_ |= 0x00000008;
        patchFormat_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 patchFormat = 4;</code>
       */
      public Builder clearPatchFormat() {
        bitField0_ = (bitField0_ & ~0x00000008);
        patchFormat_ = 0;
        onChanged();
        return this;
      }

      // optional int64 maxPatchSize = 5;
      private long maxPatchSize_ ;
      /**
       * <code>optional int64 maxPatchSize = 5;</code>
       */
      public boolean hasMaxPatchSize() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int64 maxPatchSize = 5;</code>
       */
      public long getMaxPatchSize() {
        return maxPatchSize_;
      }
      /**
       * <code>optional int64 maxPatchSize = 5;</code>
       */
      public Builder setMaxPatchSize(long value) {
        bitField0_ |= 0x00000010;
        maxPatchSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 maxPatchSize = 5;</code>
       */
      public Builder clearMaxPatchSize() {
        bitField0_ = (bitField0_ & ~0x00000010);
        maxPatchSize_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:AndroidAppPatchData)
    }

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

    // @@protoc_insertion_point(class_scope:AndroidAppPatchData)
  }

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

    // optional int32 fileType = 1;
    /**
     * <code>optional int32 fileType = 1;</code>
     */
    boolean hasFileType();
    /**
     * <code>optional int32 fileType = 1;</code>
     */
    int getFileType();

    // optional int32 versionCode = 2;
    /**
     * <code>optional int32 versionCode = 2;</code>
     */
    boolean hasVersionCode();
    /**
     * <code>optional int32 versionCode = 2;</code>
     */
    int getVersionCode();

    // optional int64 size = 3;
    /**
     * <code>optional int64 size = 3;</code>
     */
    boolean hasSize();
    /**
     * <code>optional int64 size = 3;</code>
     */
    long getSize();

    // optional string downloadUrl = 4;
    /**
     * <code>optional string downloadUrl = 4;</code>
     */
    boolean hasDownloadUrl();
    /**
     * <code>optional string downloadUrl = 4;</code>
     */
    java.lang.String getDownloadUrl();
    /**
     * <code>optional string downloadUrl = 4;</code>
     */
    com.google.protobuf.ByteString
        getDownloadUrlBytes();
  }
  /**
   * Protobuf type {@code AppFileMetadata}
   */
  public static final class AppFileMetadata extends
      com.google.protobuf.GeneratedMessage
      implements AppFileMetadataOrBuilder {
    // Use AppFileMetadata.newBuilder() to construct.
    private AppFileMetadata(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AppFileMetadata(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public AppFileMetadata getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AppFileMetadata(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              fileType_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              versionCode_ = input.readInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              size_ = input.readInt64();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              downloadUrl_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppFileMetadata_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppFileMetadata_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.class, com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 fileType = 1;
    public static final int FILETYPE_FIELD_NUMBER = 1;
    private int fileType_;
    /**
     * <code>optional int32 fileType = 1;</code>
     */
    public boolean hasFileType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 fileType = 1;</code>
     */
    public int getFileType() {
      return fileType_;
    }

    // optional int32 versionCode = 2;
    public static final int VERSIONCODE_FIELD_NUMBER = 2;
    private int versionCode_;
    /**
     * <code>optional int32 versionCode = 2;</code>
     */
    public boolean hasVersionCode() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 versionCode = 2;</code>
     */
    public int getVersionCode() {
      return versionCode_;
    }

    // optional int64 size = 3;
    public static final int SIZE_FIELD_NUMBER = 3;
    private long size_;
    /**
     * <code>optional int64 size = 3;</code>
     */
    public boolean hasSize() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 size = 3;</code>
     */
    public long getSize() {
      return size_;
    }

    // optional string downloadUrl = 4;
    public static final int DOWNLOADURL_FIELD_NUMBER = 4;
    private java.lang.Object downloadUrl_;
    /**
     * <code>optional string downloadUrl = 4;</code>
     */
    public boolean hasDownloadUrl() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string downloadUrl = 4;</code>
     */
    public java.lang.String getDownloadUrl() {
      java.lang.Object ref = downloadUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          downloadUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string downloadUrl = 4;</code>
     */
    public com.google.protobuf.ByteString
        getDownloadUrlBytes() {
      java.lang.Object ref = downloadUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        downloadUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      fileType_ = 0;
      versionCode_ = 0;
      size_ = 0L;
      downloadUrl_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, fileType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, versionCode_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, size_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getDownloadUrlBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, fileType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, versionCode_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, size_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getDownloadUrlBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AppFileMetadata}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppFileMetadata_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppFileMetadata_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.class, com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        fileType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        versionCode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        size_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        downloadUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppFileMetadata_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata result = new com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.fileType_ = fileType_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.versionCode_ = versionCode_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.size_ = size_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.downloadUrl_ = downloadUrl_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AppFileMetadata.getDefaultInstance()) return this;
        if (other.hasFileType()) {
          setFileType(other.getFileType());
        }
        if (other.hasVersionCode()) {
          setVersionCode(other.getVersionCode());
        }
        if (other.hasSize()) {
          setSize(other.getSize());
        }
        if (other.hasDownloadUrl()) {
          bitField0_ |= 0x00000008;
          downloadUrl_ = other.downloadUrl_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 fileType = 1;
      private int fileType_ ;
      /**
       * <code>optional int32 fileType = 1;</code>
       */
      public boolean hasFileType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 fileType = 1;</code>
       */
      public int getFileType() {
        return fileType_;
      }
      /**
       * <code>optional int32 fileType = 1;</code>
       */
      public Builder setFileType(int value) {
        bitField0_ |= 0x00000001;
        fileType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 fileType = 1;</code>
       */
      public Builder clearFileType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        fileType_ = 0;
        onChanged();
        return this;
      }

      // optional int32 versionCode = 2;
      private int versionCode_ ;
      /**
       * <code>optional int32 versionCode = 2;</code>
       */
      public boolean hasVersionCode() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 versionCode = 2;</code>
       */
      public int getVersionCode() {
        return versionCode_;
      }
      /**
       * <code>optional int32 versionCode = 2;</code>
       */
      public Builder setVersionCode(int value) {
        bitField0_ |= 0x00000002;
        versionCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 versionCode = 2;</code>
       */
      public Builder clearVersionCode() {
        bitField0_ = (bitField0_ & ~0x00000002);
        versionCode_ = 0;
        onChanged();
        return this;
      }

      // optional int64 size = 3;
      private long size_ ;
      /**
       * <code>optional int64 size = 3;</code>
       */
      public boolean hasSize() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 size = 3;</code>
       */
      public long getSize() {
        return size_;
      }
      /**
       * <code>optional int64 size = 3;</code>
       */
      public Builder setSize(long value) {
        bitField0_ |= 0x00000004;
        size_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 size = 3;</code>
       */
      public Builder clearSize() {
        bitField0_ = (bitField0_ & ~0x00000004);
        size_ = 0L;
        onChanged();
        return this;
      }

      // optional string downloadUrl = 4;
      private java.lang.Object downloadUrl_ = "";
      /**
       * <code>optional string downloadUrl = 4;</code>
       */
      public boolean hasDownloadUrl() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string downloadUrl = 4;</code>
       */
      public java.lang.String getDownloadUrl() {
        java.lang.Object ref = downloadUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          downloadUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string downloadUrl = 4;</code>
       */
      public com.google.protobuf.ByteString
          getDownloadUrlBytes() {
        java.lang.Object ref = downloadUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          downloadUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string downloadUrl = 4;</code>
       */
      public Builder setDownloadUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        downloadUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string downloadUrl = 4;</code>
       */
      public Builder clearDownloadUrl() {
        bitField0_ = (bitField0_ & ~0x00000008);
        downloadUrl_ = getDefaultInstance().getDownloadUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string downloadUrl = 4;</code>
       */
      public Builder setDownloadUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        downloadUrl_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:AppFileMetadata)
    }

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

    // @@protoc_insertion_point(class_scope:AppFileMetadata)
  }

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

    // optional int32 version = 1;
    /**
     * <code>optional int32 version = 1;</code>
     */
    boolean hasVersion();
    /**
     * <code>optional int32 version = 1;</code>
     */
    int getVersion();

    // optional string encryptionKey = 2;
    /**
     * <code>optional string encryptionKey = 2;</code>
     */
    boolean hasEncryptionKey();
    /**
     * <code>optional string encryptionKey = 2;</code>
     */
    java.lang.String getEncryptionKey();
    /**
     * <code>optional string encryptionKey = 2;</code>
     */
    com.google.protobuf.ByteString
        getEncryptionKeyBytes();

    // optional string hmacKey = 3;
    /**
     * <code>optional string hmacKey = 3;</code>
     */
    boolean hasHmacKey();
    /**
     * <code>optional string hmacKey = 3;</code>
     */
    java.lang.String getHmacKey();
    /**
     * <code>optional string hmacKey = 3;</code>
     */
    com.google.protobuf.ByteString
        getHmacKeyBytes();
  }
  /**
   * Protobuf type {@code EncryptionParams}
   */
  public static final class EncryptionParams extends
      com.google.protobuf.GeneratedMessage
      implements EncryptionParamsOrBuilder {
    // Use EncryptionParams.newBuilder() to construct.
    private EncryptionParams(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EncryptionParams(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public EncryptionParams getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EncryptionParams(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              version_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              encryptionKey_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              hmacKey_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EncryptionParams_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EncryptionParams_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.class, com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 version = 1;
    public static final int VERSION_FIELD_NUMBER = 1;
    private int version_;
    /**
     * <code>optional int32 version = 1;</code>
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 version = 1;</code>
     */
    public int getVersion() {
      return version_;
    }

    // optional string encryptionKey = 2;
    public static final int ENCRYPTIONKEY_FIELD_NUMBER = 2;
    private java.lang.Object encryptionKey_;
    /**
     * <code>optional string encryptionKey = 2;</code>
     */
    public boolean hasEncryptionKey() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string encryptionKey = 2;</code>
     */
    public java.lang.String getEncryptionKey() {
      java.lang.Object ref = encryptionKey_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          encryptionKey_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string encryptionKey = 2;</code>
     */
    public com.google.protobuf.ByteString
        getEncryptionKeyBytes() {
      java.lang.Object ref = encryptionKey_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        encryptionKey_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string hmacKey = 3;
    public static final int HMACKEY_FIELD_NUMBER = 3;
    private java.lang.Object hmacKey_;
    /**
     * <code>optional string hmacKey = 3;</code>
     */
    public boolean hasHmacKey() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string hmacKey = 3;</code>
     */
    public java.lang.String getHmacKey() {
      java.lang.Object ref = hmacKey_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          hmacKey_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string hmacKey = 3;</code>
     */
    public com.google.protobuf.ByteString
        getHmacKeyBytes() {
      java.lang.Object ref = hmacKey_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        hmacKey_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, version_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getEncryptionKeyBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getHmacKeyBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, version_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getEncryptionKeyBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getHmacKeyBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code EncryptionParams}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParamsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EncryptionParams_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EncryptionParams_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.class, com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        version_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        encryptionKey_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        hmacKey_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EncryptionParams_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams build() {
        com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams result = new com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.version_ = version_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.encryptionKey_ = encryptionKey_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.hmacKey_ = hmacKey_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.EncryptionParams.getDefaultInstance()) return this;
        if (other.hasVersion()) {
          setVersion(other.getVersion());
        }
        if (other.hasEncryptionKey()) {
          bitField0_ |= 0x00000002;
          encryptionKey_ = other.encryptionKey_;
          onChanged();
        }
        if (other.hasHmacKey()) {
          bitField0_ |= 0x00000004;
          hmacKey_ = other.hmacKey_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 version = 1;
      private int version_ ;
      /**
       * <code>optional int32 version = 1;</code>
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 version = 1;</code>
       */
      public int getVersion() {
        return version_;
      }
      /**
       * <code>optional int32 version = 1;</code>
       */
      public Builder setVersion(int value) {
        bitField0_ |= 0x00000001;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 version = 1;</code>
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000001);
        version_ = 0;
        onChanged();
        return this;
      }

      // optional string encryptionKey = 2;
      private java.lang.Object encryptionKey_ = "";
      /**
       * <code>optional string encryptionKey = 2;</code>
       */
      public boolean hasEncryptionKey() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string encryptionKey = 2;</code>
       */
      public java.lang.String getEncryptionKey() {
        java.lang.Object ref = encryptionKey_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          encryptionKey_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string encryptionKey = 2;</code>
       */
      public com.google.protobuf.ByteString
          getEncryptionKeyBytes() {
        java.lang.Object ref = encryptionKey_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          encryptionKey_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string encryptionKey = 2;</code>
       */
      public Builder setEncryptionKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        encryptionKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string encryptionKey = 2;</code>
       */
      public Builder clearEncryptionKey() {
        bitField0_ = (bitField0_ & ~0x00000002);
        encryptionKey_ = getDefaultInstance().getEncryptionKey();
        onChanged();
        return this;
      }
      /**
       * <code>optional string encryptionKey = 2;</code>
       */
      public Builder setEncryptionKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        encryptionKey_ = value;
        onChanged();
        return this;
      }

      // optional string hmacKey = 3;
      private java.lang.Object hmacKey_ = "";
      /**
       * <code>optional string hmacKey = 3;</code>
       */
      public boolean hasHmacKey() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string hmacKey = 3;</code>
       */
      public java.lang.String getHmacKey() {
        java.lang.Object ref = hmacKey_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          hmacKey_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string hmacKey = 3;</code>
       */
      public com.google.protobuf.ByteString
          getHmacKeyBytes() {
        java.lang.Object ref = hmacKey_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          hmacKey_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string hmacKey = 3;</code>
       */
      public Builder setHmacKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        hmacKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string hmacKey = 3;</code>
       */
      public Builder clearHmacKey() {
        bitField0_ = (bitField0_ & ~0x00000004);
        hmacKey_ = getDefaultInstance().getHmacKey();
        onChanged();
        return this;
      }
      /**
       * <code>optional string hmacKey = 3;</code>
       */
      public Builder setHmacKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        hmacKey_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:EncryptionParams)
    }

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

    // @@protoc_insertion_point(class_scope:EncryptionParams)
  }

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

    // optional string name = 1;
    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // optional string value = 2;
    /**
     * <code>optional string value = 2;</code>
     */
    boolean hasValue();
    /**
     * <code>optional string value = 2;</code>
     */
    java.lang.String getValue();
    /**
     * <code>optional string value = 2;</code>
     */
    com.google.protobuf.ByteString
        getValueBytes();
  }
  /**
   * Protobuf type {@code HttpCookie}
   */
  public static final class HttpCookie extends
      com.google.protobuf.GeneratedMessage
      implements HttpCookieOrBuilder {
    // Use HttpCookie.newBuilder() to construct.
    private HttpCookie(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private HttpCookie(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public HttpCookie getDefaultInstanceForType() {
      return defaultInstance;
    }

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

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_HttpCookie_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.class, com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string value = 2;
    public static final int VALUE_FIELD_NUMBER = 2;
    private java.lang.Object value_;
    /**
     * <code>optional string value = 2;</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string value = 2;</code>
     */
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          value_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string value = 2;</code>
     */
    public com.google.protobuf.ByteString
        getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        value_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

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

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

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

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code HttpCookie}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.HttpCookieOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_HttpCookie_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_HttpCookie_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.class, com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

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

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_HttpCookie_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie build() {
        com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie result = new com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.HttpCookie.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasValue()) {
          bitField0_ |= 0x00000002;
          value_ = other.value_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string name = 1;
      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      // optional string value = 2;
      private java.lang.Object value_ = "";
      /**
       * <code>optional string value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          value_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder setValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:HttpCookie)
    }

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

    // @@protoc_insertion_point(class_scope:HttpCookie)
  }

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

    // optional string name = 1;
    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // optional string addressLine1 = 2;
    /**
     * <code>optional string addressLine1 = 2;</code>
     */
    boolean hasAddressLine1();
    /**
     * <code>optional string addressLine1 = 2;</code>
     */
    java.lang.String getAddressLine1();
    /**
     * <code>optional string addressLine1 = 2;</code>
     */
    com.google.protobuf.ByteString
        getAddressLine1Bytes();

    // optional string addressLine2 = 3;
    /**
     * <code>optional string addressLine2 = 3;</code>
     */
    boolean hasAddressLine2();
    /**
     * <code>optional string addressLine2 = 3;</code>
     */
    java.lang.String getAddressLine2();
    /**
     * <code>optional string addressLine2 = 3;</code>
     */
    com.google.protobuf.ByteString
        getAddressLine2Bytes();

    // optional string city = 4;
    /**
     * <code>optional string city = 4;</code>
     */
    boolean hasCity();
    /**
     * <code>optional string city = 4;</code>
     */
    java.lang.String getCity();
    /**
     * <code>optional string city = 4;</code>
     */
    com.google.protobuf.ByteString
        getCityBytes();

    // optional string state = 5;
    /**
     * <code>optional string state = 5;</code>
     */
    boolean hasState();
    /**
     * <code>optional string state = 5;</code>
     */
    java.lang.String getState();
    /**
     * <code>optional string state = 5;</code>
     */
    com.google.protobuf.ByteString
        getStateBytes();

    // optional string postalCode = 6;
    /**
     * <code>optional string postalCode = 6;</code>
     */
    boolean hasPostalCode();
    /**
     * <code>optional string postalCode = 6;</code>
     */
    java.lang.String getPostalCode();
    /**
     * <code>optional string postalCode = 6;</code>
     */
    com.google.protobuf.ByteString
        getPostalCodeBytes();

    // optional string postalCountry = 7;
    /**
     * <code>optional string postalCountry = 7;</code>
     */
    boolean hasPostalCountry();
    /**
     * <code>optional string postalCountry = 7;</code>
     */
    java.lang.String getPostalCountry();
    /**
     * <code>optional string postalCountry = 7;</code>
     */
    com.google.protobuf.ByteString
        getPostalCountryBytes();

    // optional string dependentLocality = 8;
    /**
     * <code>optional string dependentLocality = 8;</code>
     */
    boolean hasDependentLocality();
    /**
     * <code>optional string dependentLocality = 8;</code>
     */
    java.lang.String getDependentLocality();
    /**
     * <code>optional string dependentLocality = 8;</code>
     */
    com.google.protobuf.ByteString
        getDependentLocalityBytes();

    // optional string sortingCode = 9;
    /**
     * <code>optional string sortingCode = 9;</code>
     */
    boolean hasSortingCode();
    /**
     * <code>optional string sortingCode = 9;</code>
     */
    java.lang.String getSortingCode();
    /**
     * <code>optional string sortingCode = 9;</code>
     */
    com.google.protobuf.ByteString
        getSortingCodeBytes();

    // optional string languageCode = 10;
    /**
     * <code>optional string languageCode = 10;</code>
     */
    boolean hasLanguageCode();
    /**
     * <code>optional string languageCode = 10;</code>
     */
    java.lang.String getLanguageCode();
    /**
     * <code>optional string languageCode = 10;</code>
     */
    com.google.protobuf.ByteString
        getLanguageCodeBytes();

    // optional string phoneNumber = 11;
    /**
     * <code>optional string phoneNumber = 11;</code>
     */
    boolean hasPhoneNumber();
    /**
     * <code>optional string phoneNumber = 11;</code>
     */
    java.lang.String getPhoneNumber();
    /**
     * <code>optional string phoneNumber = 11;</code>
     */
    com.google.protobuf.ByteString
        getPhoneNumberBytes();

    // optional bool isReduced = 12;
    /**
     * <code>optional bool isReduced = 12;</code>
     */
    boolean hasIsReduced();
    /**
     * <code>optional bool isReduced = 12;</code>
     */
    boolean getIsReduced();

    // optional string firstName = 13;
    /**
     * <code>optional string firstName = 13;</code>
     */
    boolean hasFirstName();
    /**
     * <code>optional string firstName = 13;</code>
     */
    java.lang.String getFirstName();
    /**
     * <code>optional string firstName = 13;</code>
     */
    com.google.protobuf.ByteString
        getFirstNameBytes();

    // optional string lastName = 14;
    /**
     * <code>optional string lastName = 14;</code>
     */
    boolean hasLastName();
    /**
     * <code>optional string lastName = 14;</code>
     */
    java.lang.String getLastName();
    /**
     * <code>optional string lastName = 14;</code>
     */
    com.google.protobuf.ByteString
        getLastNameBytes();

    // optional string email = 15;
    /**
     * <code>optional string email = 15;</code>
     */
    boolean hasEmail();
    /**
     * <code>optional string email = 15;</code>
     */
    java.lang.String getEmail();
    /**
     * <code>optional string email = 15;</code>
     */
    com.google.protobuf.ByteString
        getEmailBytes();
  }
  /**
   * Protobuf type {@code Address}
   */
  public static final class Address extends
      com.google.protobuf.GeneratedMessage
      implements AddressOrBuilder {
    // Use Address.newBuilder() to construct.
    private Address(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Address(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public Address getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Address(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              name_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              addressLine1_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              addressLine2_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              city_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              state_ = input.readBytes();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000020;
              postalCode_ = input.readBytes();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000040;
              postalCountry_ = input.readBytes();
              break;
            }
            case 66: {
              bitField0_ |= 0x00000080;
              dependentLocality_ = input.readBytes();
              break;
            }
            case 74: {
              bitField0_ |= 0x00000100;
              sortingCode_ = input.readBytes();
              break;
            }
            case 82: {
              bitField0_ |= 0x00000200;
              languageCode_ = input.readBytes();
              break;
            }
            case 90: {
              bitField0_ |= 0x00000400;
              phoneNumber_ = input.readBytes();
              break;
            }
            case 96: {
              bitField0_ |= 0x00000800;
              isReduced_ = input.readBool();
              break;
            }
            case 106: {
              bitField0_ |= 0x00001000;
              firstName_ = input.readBytes();
              break;
            }
            case 114: {
              bitField0_ |= 0x00002000;
              lastName_ = input.readBytes();
              break;
            }
            case 122: {
              bitField0_ |= 0x00004000;
              email_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Address_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Address_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Address.class, com.akdeniz.googleplaycrawler.GooglePlay.Address.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string addressLine1 = 2;
    public static final int ADDRESSLINE1_FIELD_NUMBER = 2;
    private java.lang.Object addressLine1_;
    /**
     * <code>optional string addressLine1 = 2;</code>
     */
    public boolean hasAddressLine1() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string addressLine1 = 2;</code>
     */
    public java.lang.String getAddressLine1() {
      java.lang.Object ref = addressLine1_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          addressLine1_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string addressLine1 = 2;</code>
     */
    public com.google.protobuf.ByteString
        getAddressLine1Bytes() {
      java.lang.Object ref = addressLine1_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        addressLine1_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string addressLine2 = 3;
    public static final int ADDRESSLINE2_FIELD_NUMBER = 3;
    private java.lang.Object addressLine2_;
    /**
     * <code>optional string addressLine2 = 3;</code>
     */
    public boolean hasAddressLine2() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string addressLine2 = 3;</code>
     */
    public java.lang.String getAddressLine2() {
      java.lang.Object ref = addressLine2_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          addressLine2_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string addressLine2 = 3;</code>
     */
    public com.google.protobuf.ByteString
        getAddressLine2Bytes() {
      java.lang.Object ref = addressLine2_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        addressLine2_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string city = 4;
    public static final int CITY_FIELD_NUMBER = 4;
    private java.lang.Object city_;
    /**
     * <code>optional string city = 4;</code>
     */
    public boolean hasCity() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string city = 4;</code>
     */
    public java.lang.String getCity() {
      java.lang.Object ref = city_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          city_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string city = 4;</code>
     */
    public com.google.protobuf.ByteString
        getCityBytes() {
      java.lang.Object ref = city_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        city_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string state = 5;
    public static final int STATE_FIELD_NUMBER = 5;
    private java.lang.Object state_;
    /**
     * <code>optional string state = 5;</code>
     */
    public boolean hasState() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string state = 5;</code>
     */
    public java.lang.String getState() {
      java.lang.Object ref = state_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          state_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string state = 5;</code>
     */
    public com.google.protobuf.ByteString
        getStateBytes() {
      java.lang.Object ref = state_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        state_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string postalCode = 6;
    public static final int POSTALCODE_FIELD_NUMBER = 6;
    private java.lang.Object postalCode_;
    /**
     * <code>optional string postalCode = 6;</code>
     */
    public boolean hasPostalCode() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string postalCode = 6;</code>
     */
    public java.lang.String getPostalCode() {
      java.lang.Object ref = postalCode_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          postalCode_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string postalCode = 6;</code>
     */
    public com.google.protobuf.ByteString
        getPostalCodeBytes() {
      java.lang.Object ref = postalCode_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        postalCode_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string postalCountry = 7;
    public static final int POSTALCOUNTRY_FIELD_NUMBER = 7;
    private java.lang.Object postalCountry_;
    /**
     * <code>optional string postalCountry = 7;</code>
     */
    public boolean hasPostalCountry() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional string postalCountry = 7;</code>
     */
    public java.lang.String getPostalCountry() {
      java.lang.Object ref = postalCountry_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          postalCountry_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string postalCountry = 7;</code>
     */
    public com.google.protobuf.ByteString
        getPostalCountryBytes() {
      java.lang.Object ref = postalCountry_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        postalCountry_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string dependentLocality = 8;
    public static final int DEPENDENTLOCALITY_FIELD_NUMBER = 8;
    private java.lang.Object dependentLocality_;
    /**
     * <code>optional string dependentLocality = 8;</code>
     */
    public boolean hasDependentLocality() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional string dependentLocality = 8;</code>
     */
    public java.lang.String getDependentLocality() {
      java.lang.Object ref = dependentLocality_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          dependentLocality_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string dependentLocality = 8;</code>
     */
    public com.google.protobuf.ByteString
        getDependentLocalityBytes() {
      java.lang.Object ref = dependentLocality_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        dependentLocality_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string sortingCode = 9;
    public static final int SORTINGCODE_FIELD_NUMBER = 9;
    private java.lang.Object sortingCode_;
    /**
     * <code>optional string sortingCode = 9;</code>
     */
    public boolean hasSortingCode() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional string sortingCode = 9;</code>
     */
    public java.lang.String getSortingCode() {
      java.lang.Object ref = sortingCode_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          sortingCode_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string sortingCode = 9;</code>
     */
    public com.google.protobuf.ByteString
        getSortingCodeBytes() {
      java.lang.Object ref = sortingCode_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sortingCode_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string languageCode = 10;
    public static final int LANGUAGECODE_FIELD_NUMBER = 10;
    private java.lang.Object languageCode_;
    /**
     * <code>optional string languageCode = 10;</code>
     */
    public boolean hasLanguageCode() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional string languageCode = 10;</code>
     */
    public java.lang.String getLanguageCode() {
      java.lang.Object ref = languageCode_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          languageCode_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string languageCode = 10;</code>
     */
    public com.google.protobuf.ByteString
        getLanguageCodeBytes() {
      java.lang.Object ref = languageCode_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        languageCode_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string phoneNumber = 11;
    public static final int PHONENUMBER_FIELD_NUMBER = 11;
    private java.lang.Object phoneNumber_;
    /**
     * <code>optional string phoneNumber = 11;</code>
     */
    public boolean hasPhoneNumber() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional string phoneNumber = 11;</code>
     */
    public java.lang.String getPhoneNumber() {
      java.lang.Object ref = phoneNumber_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          phoneNumber_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string phoneNumber = 11;</code>
     */
    public com.google.protobuf.ByteString
        getPhoneNumberBytes() {
      java.lang.Object ref = phoneNumber_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        phoneNumber_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool isReduced = 12;
    public static final int ISREDUCED_FIELD_NUMBER = 12;
    private boolean isReduced_;
    /**
     * <code>optional bool isReduced = 12;</code>
     */
    public boolean hasIsReduced() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional bool isReduced = 12;</code>
     */
    public boolean getIsReduced() {
      return isReduced_;
    }

    // optional string firstName = 13;
    public static final int FIRSTNAME_FIELD_NUMBER = 13;
    private java.lang.Object firstName_;
    /**
     * <code>optional string firstName = 13;</code>
     */
    public boolean hasFirstName() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <code>optional string firstName = 13;</code>
     */
    public java.lang.String getFirstName() {
      java.lang.Object ref = firstName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          firstName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string firstName = 13;</code>
     */
    public com.google.protobuf.ByteString
        getFirstNameBytes() {
      java.lang.Object ref = firstName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        firstName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string lastName = 14;
    public static final int LASTNAME_FIELD_NUMBER = 14;
    private java.lang.Object lastName_;
    /**
     * <code>optional string lastName = 14;</code>
     */
    public boolean hasLastName() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     * <code>optional string lastName = 14;</code>
     */
    public java.lang.String getLastName() {
      java.lang.Object ref = lastName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          lastName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string lastName = 14;</code>
     */
    public com.google.protobuf.ByteString
        getLastNameBytes() {
      java.lang.Object ref = lastName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        lastName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string email = 15;
    public static final int EMAIL_FIELD_NUMBER = 15;
    private java.lang.Object email_;
    /**
     * <code>optional string email = 15;</code>
     */
    public boolean hasEmail() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     * <code>optional string email = 15;</code>
     */
    public java.lang.String getEmail() {
      java.lang.Object ref = email_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          email_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string email = 15;</code>
     */
    public com.google.protobuf.ByteString
        getEmailBytes() {
      java.lang.Object ref = email_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        email_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      name_ = "";
      addressLine1_ = "";
      addressLine2_ = "";
      city_ = "";
      state_ = "";
      postalCode_ = "";
      postalCountry_ = "";
      dependentLocality_ = "";
      sortingCode_ = "";
      languageCode_ = "";
      phoneNumber_ = "";
      isReduced_ = false;
      firstName_ = "";
      lastName_ = "";
      email_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getAddressLine1Bytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getAddressLine2Bytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getCityBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getStateBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(6, getPostalCodeBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(7, getPostalCountryBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBytes(8, getDependentLocalityBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBytes(9, getSortingCodeBytes());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBytes(10, getLanguageCodeBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBytes(11, getPhoneNumberBytes());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeBool(12, isReduced_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeBytes(13, getFirstNameBytes());
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeBytes(14, getLastNameBytes());
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeBytes(15, getEmailBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getAddressLine1Bytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getAddressLine2Bytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getCityBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getStateBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getPostalCodeBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getPostalCountryBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getDependentLocalityBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(9, getSortingCodeBytes());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(10, getLanguageCodeBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(11, getPhoneNumberBytes());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(12, isReduced_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(13, getFirstNameBytes());
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(14, getLastNameBytes());
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(15, getEmailBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.Address parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Address parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Address parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Address parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Address parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Address parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Address parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Address parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Address parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Address parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Address prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Address}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AddressOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Address_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Address_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Address.class, com.akdeniz.googleplaycrawler.GooglePlay.Address.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Address.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        addressLine1_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        addressLine2_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        city_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        state_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        postalCode_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        postalCountry_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        dependentLocality_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        sortingCode_ = "";
        bitField0_ = (bitField0_ & ~0x00000100);
        languageCode_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        phoneNumber_ = "";
        bitField0_ = (bitField0_ & ~0x00000400);
        isReduced_ = false;
        bitField0_ = (bitField0_ & ~0x00000800);
        firstName_ = "";
        bitField0_ = (bitField0_ & ~0x00001000);
        lastName_ = "";
        bitField0_ = (bitField0_ & ~0x00002000);
        email_ = "";
        bitField0_ = (bitField0_ & ~0x00004000);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Address_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Address getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Address.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Address build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Address result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Address buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Address result = new com.akdeniz.googleplaycrawler.GooglePlay.Address(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.addressLine1_ = addressLine1_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.addressLine2_ = addressLine2_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.city_ = city_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.state_ = state_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.postalCode_ = postalCode_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.postalCountry_ = postalCountry_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.dependentLocality_ = dependentLocality_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.sortingCode_ = sortingCode_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.languageCode_ = languageCode_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.phoneNumber_ = phoneNumber_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        result.isReduced_ = isReduced_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.firstName_ = firstName_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00002000;
        }
        result.lastName_ = lastName_;
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00004000;
        }
        result.email_ = email_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Address) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Address)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Address other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Address.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasAddressLine1()) {
          bitField0_ |= 0x00000002;
          addressLine1_ = other.addressLine1_;
          onChanged();
        }
        if (other.hasAddressLine2()) {
          bitField0_ |= 0x00000004;
          addressLine2_ = other.addressLine2_;
          onChanged();
        }
        if (other.hasCity()) {
          bitField0_ |= 0x00000008;
          city_ = other.city_;
          onChanged();
        }
        if (other.hasState()) {
          bitField0_ |= 0x00000010;
          state_ = other.state_;
          onChanged();
        }
        if (other.hasPostalCode()) {
          bitField0_ |= 0x00000020;
          postalCode_ = other.postalCode_;
          onChanged();
        }
        if (other.hasPostalCountry()) {
          bitField0_ |= 0x00000040;
          postalCountry_ = other.postalCountry_;
          onChanged();
        }
        if (other.hasDependentLocality()) {
          bitField0_ |= 0x00000080;
          dependentLocality_ = other.dependentLocality_;
          onChanged();
        }
        if (other.hasSortingCode()) {
          bitField0_ |= 0x00000100;
          sortingCode_ = other.sortingCode_;
          onChanged();
        }
        if (other.hasLanguageCode()) {
          bitField0_ |= 0x00000200;
          languageCode_ = other.languageCode_;
          onChanged();
        }
        if (other.hasPhoneNumber()) {
          bitField0_ |= 0x00000400;
          phoneNumber_ = other.phoneNumber_;
          onChanged();
        }
        if (other.hasIsReduced()) {
          setIsReduced(other.getIsReduced());
        }
        if (other.hasFirstName()) {
          bitField0_ |= 0x00001000;
          firstName_ = other.firstName_;
          onChanged();
        }
        if (other.hasLastName()) {
          bitField0_ |= 0x00002000;
          lastName_ = other.lastName_;
          onChanged();
        }
        if (other.hasEmail()) {
          bitField0_ |= 0x00004000;
          email_ = other.email_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string name = 1;
      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      // optional string addressLine1 = 2;
      private java.lang.Object addressLine1_ = "";
      /**
       * <code>optional string addressLine1 = 2;</code>
       */
      public boolean hasAddressLine1() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string addressLine1 = 2;</code>
       */
      public java.lang.String getAddressLine1() {
        java.lang.Object ref = addressLine1_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          addressLine1_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string addressLine1 = 2;</code>
       */
      public com.google.protobuf.ByteString
          getAddressLine1Bytes() {
        java.lang.Object ref = addressLine1_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          addressLine1_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string addressLine1 = 2;</code>
       */
      public Builder setAddressLine1(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        addressLine1_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string addressLine1 = 2;</code>
       */
      public Builder clearAddressLine1() {
        bitField0_ = (bitField0_ & ~0x00000002);
        addressLine1_ = getDefaultInstance().getAddressLine1();
        onChanged();
        return this;
      }
      /**
       * <code>optional string addressLine1 = 2;</code>
       */
      public Builder setAddressLine1Bytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        addressLine1_ = value;
        onChanged();
        return this;
      }

      // optional string addressLine2 = 3;
      private java.lang.Object addressLine2_ = "";
      /**
       * <code>optional string addressLine2 = 3;</code>
       */
      public boolean hasAddressLine2() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string addressLine2 = 3;</code>
       */
      public java.lang.String getAddressLine2() {
        java.lang.Object ref = addressLine2_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          addressLine2_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string addressLine2 = 3;</code>
       */
      public com.google.protobuf.ByteString
          getAddressLine2Bytes() {
        java.lang.Object ref = addressLine2_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          addressLine2_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string addressLine2 = 3;</code>
       */
      public Builder setAddressLine2(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        addressLine2_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string addressLine2 = 3;</code>
       */
      public Builder clearAddressLine2() {
        bitField0_ = (bitField0_ & ~0x00000004);
        addressLine2_ = getDefaultInstance().getAddressLine2();
        onChanged();
        return this;
      }
      /**
       * <code>optional string addressLine2 = 3;</code>
       */
      public Builder setAddressLine2Bytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        addressLine2_ = value;
        onChanged();
        return this;
      }

      // optional string city = 4;
      private java.lang.Object city_ = "";
      /**
       * <code>optional string city = 4;</code>
       */
      public boolean hasCity() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string city = 4;</code>
       */
      public java.lang.String getCity() {
        java.lang.Object ref = city_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          city_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string city = 4;</code>
       */
      public com.google.protobuf.ByteString
          getCityBytes() {
        java.lang.Object ref = city_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          city_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string city = 4;</code>
       */
      public Builder setCity(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        city_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string city = 4;</code>
       */
      public Builder clearCity() {
        bitField0_ = (bitField0_ & ~0x00000008);
        city_ = getDefaultInstance().getCity();
        onChanged();
        return this;
      }
      /**
       * <code>optional string city = 4;</code>
       */
      public Builder setCityBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        city_ = value;
        onChanged();
        return this;
      }

      // optional string state = 5;
      private java.lang.Object state_ = "";
      /**
       * <code>optional string state = 5;</code>
       */
      public boolean hasState() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string state = 5;</code>
       */
      public java.lang.String getState() {
        java.lang.Object ref = state_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          state_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string state = 5;</code>
       */
      public com.google.protobuf.ByteString
          getStateBytes() {
        java.lang.Object ref = state_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          state_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string state = 5;</code>
       */
      public Builder setState(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        state_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string state = 5;</code>
       */
      public Builder clearState() {
        bitField0_ = (bitField0_ & ~0x00000010);
        state_ = getDefaultInstance().getState();
        onChanged();
        return this;
      }
      /**
       * <code>optional string state = 5;</code>
       */
      public Builder setStateBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        state_ = value;
        onChanged();
        return this;
      }

      // optional string postalCode = 6;
      private java.lang.Object postalCode_ = "";
      /**
       * <code>optional string postalCode = 6;</code>
       */
      public boolean hasPostalCode() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional string postalCode = 6;</code>
       */
      public java.lang.String getPostalCode() {
        java.lang.Object ref = postalCode_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          postalCode_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string postalCode = 6;</code>
       */
      public com.google.protobuf.ByteString
          getPostalCodeBytes() {
        java.lang.Object ref = postalCode_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          postalCode_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string postalCode = 6;</code>
       */
      public Builder setPostalCode(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        postalCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string postalCode = 6;</code>
       */
      public Builder clearPostalCode() {
        bitField0_ = (bitField0_ & ~0x00000020);
        postalCode_ = getDefaultInstance().getPostalCode();
        onChanged();
        return this;
      }
      /**
       * <code>optional string postalCode = 6;</code>
       */
      public Builder setPostalCodeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        postalCode_ = value;
        onChanged();
        return this;
      }

      // optional string postalCountry = 7;
      private java.lang.Object postalCountry_ = "";
      /**
       * <code>optional string postalCountry = 7;</code>
       */
      public boolean hasPostalCountry() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string postalCountry = 7;</code>
       */
      public java.lang.String getPostalCountry() {
        java.lang.Object ref = postalCountry_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          postalCountry_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string postalCountry = 7;</code>
       */
      public com.google.protobuf.ByteString
          getPostalCountryBytes() {
        java.lang.Object ref = postalCountry_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          postalCountry_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string postalCountry = 7;</code>
       */
      public Builder setPostalCountry(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        postalCountry_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string postalCountry = 7;</code>
       */
      public Builder clearPostalCountry() {
        bitField0_ = (bitField0_ & ~0x00000040);
        postalCountry_ = getDefaultInstance().getPostalCountry();
        onChanged();
        return this;
      }
      /**
       * <code>optional string postalCountry = 7;</code>
       */
      public Builder setPostalCountryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        postalCountry_ = value;
        onChanged();
        return this;
      }

      // optional string dependentLocality = 8;
      private java.lang.Object dependentLocality_ = "";
      /**
       * <code>optional string dependentLocality = 8;</code>
       */
      public boolean hasDependentLocality() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string dependentLocality = 8;</code>
       */
      public java.lang.String getDependentLocality() {
        java.lang.Object ref = dependentLocality_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          dependentLocality_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string dependentLocality = 8;</code>
       */
      public com.google.protobuf.ByteString
          getDependentLocalityBytes() {
        java.lang.Object ref = dependentLocality_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          dependentLocality_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string dependentLocality = 8;</code>
       */
      public Builder setDependentLocality(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        dependentLocality_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string dependentLocality = 8;</code>
       */
      public Builder clearDependentLocality() {
        bitField0_ = (bitField0_ & ~0x00000080);
        dependentLocality_ = getDefaultInstance().getDependentLocality();
        onChanged();
        return this;
      }
      /**
       * <code>optional string dependentLocality = 8;</code>
       */
      public Builder setDependentLocalityBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        dependentLocality_ = value;
        onChanged();
        return this;
      }

      // optional string sortingCode = 9;
      private java.lang.Object sortingCode_ = "";
      /**
       * <code>optional string sortingCode = 9;</code>
       */
      public boolean hasSortingCode() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional string sortingCode = 9;</code>
       */
      public java.lang.String getSortingCode() {
        java.lang.Object ref = sortingCode_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          sortingCode_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string sortingCode = 9;</code>
       */
      public com.google.protobuf.ByteString
          getSortingCodeBytes() {
        java.lang.Object ref = sortingCode_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sortingCode_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string sortingCode = 9;</code>
       */
      public Builder setSortingCode(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        sortingCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string sortingCode = 9;</code>
       */
      public Builder clearSortingCode() {
        bitField0_ = (bitField0_ & ~0x00000100);
        sortingCode_ = getDefaultInstance().getSortingCode();
        onChanged();
        return this;
      }
      /**
       * <code>optional string sortingCode = 9;</code>
       */
      public Builder setSortingCodeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        sortingCode_ = value;
        onChanged();
        return this;
      }

      // optional string languageCode = 10;
      private java.lang.Object languageCode_ = "";
      /**
       * <code>optional string languageCode = 10;</code>
       */
      public boolean hasLanguageCode() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional string languageCode = 10;</code>
       */
      public java.lang.String getLanguageCode() {
        java.lang.Object ref = languageCode_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          languageCode_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string languageCode = 10;</code>
       */
      public com.google.protobuf.ByteString
          getLanguageCodeBytes() {
        java.lang.Object ref = languageCode_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          languageCode_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string languageCode = 10;</code>
       */
      public Builder setLanguageCode(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        languageCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string languageCode = 10;</code>
       */
      public Builder clearLanguageCode() {
        bitField0_ = (bitField0_ & ~0x00000200);
        languageCode_ = getDefaultInstance().getLanguageCode();
        onChanged();
        return this;
      }
      /**
       * <code>optional string languageCode = 10;</code>
       */
      public Builder setLanguageCodeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        languageCode_ = value;
        onChanged();
        return this;
      }

      // optional string phoneNumber = 11;
      private java.lang.Object phoneNumber_ = "";
      /**
       * <code>optional string phoneNumber = 11;</code>
       */
      public boolean hasPhoneNumber() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional string phoneNumber = 11;</code>
       */
      public java.lang.String getPhoneNumber() {
        java.lang.Object ref = phoneNumber_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          phoneNumber_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string phoneNumber = 11;</code>
       */
      public com.google.protobuf.ByteString
          getPhoneNumberBytes() {
        java.lang.Object ref = phoneNumber_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          phoneNumber_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string phoneNumber = 11;</code>
       */
      public Builder setPhoneNumber(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        phoneNumber_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string phoneNumber = 11;</code>
       */
      public Builder clearPhoneNumber() {
        bitField0_ = (bitField0_ & ~0x00000400);
        phoneNumber_ = getDefaultInstance().getPhoneNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional string phoneNumber = 11;</code>
       */
      public Builder setPhoneNumberBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        phoneNumber_ = value;
        onChanged();
        return this;
      }

      // optional bool isReduced = 12;
      private boolean isReduced_ ;
      /**
       * <code>optional bool isReduced = 12;</code>
       */
      public boolean hasIsReduced() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional bool isReduced = 12;</code>
       */
      public boolean getIsReduced() {
        return isReduced_;
      }
      /**
       * <code>optional bool isReduced = 12;</code>
       */
      public Builder setIsReduced(boolean value) {
        bitField0_ |= 0x00000800;
        isReduced_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool isReduced = 12;</code>
       */
      public Builder clearIsReduced() {
        bitField0_ = (bitField0_ & ~0x00000800);
        isReduced_ = false;
        onChanged();
        return this;
      }

      // optional string firstName = 13;
      private java.lang.Object firstName_ = "";
      /**
       * <code>optional string firstName = 13;</code>
       */
      public boolean hasFirstName() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional string firstName = 13;</code>
       */
      public java.lang.String getFirstName() {
        java.lang.Object ref = firstName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          firstName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string firstName = 13;</code>
       */
      public com.google.protobuf.ByteString
          getFirstNameBytes() {
        java.lang.Object ref = firstName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          firstName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string firstName = 13;</code>
       */
      public Builder setFirstName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        firstName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string firstName = 13;</code>
       */
      public Builder clearFirstName() {
        bitField0_ = (bitField0_ & ~0x00001000);
        firstName_ = getDefaultInstance().getFirstName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string firstName = 13;</code>
       */
      public Builder setFirstNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        firstName_ = value;
        onChanged();
        return this;
      }

      // optional string lastName = 14;
      private java.lang.Object lastName_ = "";
      /**
       * <code>optional string lastName = 14;</code>
       */
      public boolean hasLastName() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <code>optional string lastName = 14;</code>
       */
      public java.lang.String getLastName() {
        java.lang.Object ref = lastName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          lastName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string lastName = 14;</code>
       */
      public com.google.protobuf.ByteString
          getLastNameBytes() {
        java.lang.Object ref = lastName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          lastName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string lastName = 14;</code>
       */
      public Builder setLastName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00002000;
        lastName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string lastName = 14;</code>
       */
      public Builder clearLastName() {
        bitField0_ = (bitField0_ & ~0x00002000);
        lastName_ = getDefaultInstance().getLastName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string lastName = 14;</code>
       */
      public Builder setLastNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00002000;
        lastName_ = value;
        onChanged();
        return this;
      }

      // optional string email = 15;
      private java.lang.Object email_ = "";
      /**
       * <code>optional string email = 15;</code>
       */
      public boolean hasEmail() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       * <code>optional string email = 15;</code>
       */
      public java.lang.String getEmail() {
        java.lang.Object ref = email_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          email_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string email = 15;</code>
       */
      public com.google.protobuf.ByteString
          getEmailBytes() {
        java.lang.Object ref = email_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          email_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string email = 15;</code>
       */
      public Builder setEmail(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00004000;
        email_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string email = 15;</code>
       */
      public Builder clearEmail() {
        bitField0_ = (bitField0_ & ~0x00004000);
        email_ = getDefaultInstance().getEmail();
        onChanged();
        return this;
      }
      /**
       * <code>optional string email = 15;</code>
       */
      public Builder setEmailBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00004000;
        email_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Address)
    }

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

    // @@protoc_insertion_point(class_scope:Address)
  }

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

    // optional string name = 1;
    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // optional string deprecatedQuery = 2;
    /**
     * <code>optional string deprecatedQuery = 2;</code>
     */
    boolean hasDeprecatedQuery();
    /**
     * <code>optional string deprecatedQuery = 2;</code>
     */
    java.lang.String getDeprecatedQuery();
    /**
     * <code>optional string deprecatedQuery = 2;</code>
     */
    com.google.protobuf.ByteString
        getDeprecatedQueryBytes();

    // optional .Docid docid = 3;
    /**
     * <code>optional .Docid docid = 3;</code>
     */
    boolean hasDocid();
    /**
     * <code>optional .Docid docid = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Docid getDocid();
    /**
     * <code>optional .Docid docid = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getDocidOrBuilder();
  }
  /**
   * Protobuf type {@code BookAuthor}
   */
  public static final class BookAuthor extends
      com.google.protobuf.GeneratedMessage
      implements BookAuthorOrBuilder {
    // Use BookAuthor.newBuilder() to construct.
    private BookAuthor(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private BookAuthor(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public BookAuthor getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private BookAuthor(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              name_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              deprecatedQuery_ = input.readBytes();
              break;
            }
            case 26: {
              com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = docid_.toBuilder();
              }
              docid_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Docid.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(docid_);
                docid_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookAuthor_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookAuthor_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.class, com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string deprecatedQuery = 2;
    public static final int DEPRECATEDQUERY_FIELD_NUMBER = 2;
    private java.lang.Object deprecatedQuery_;
    /**
     * <code>optional string deprecatedQuery = 2;</code>
     */
    public boolean hasDeprecatedQuery() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string deprecatedQuery = 2;</code>
     */
    public java.lang.String getDeprecatedQuery() {
      java.lang.Object ref = deprecatedQuery_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          deprecatedQuery_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string deprecatedQuery = 2;</code>
     */
    public com.google.protobuf.ByteString
        getDeprecatedQueryBytes() {
      java.lang.Object ref = deprecatedQuery_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        deprecatedQuery_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .Docid docid = 3;
    public static final int DOCID_FIELD_NUMBER = 3;
    private com.akdeniz.googleplaycrawler.GooglePlay.Docid docid_;
    /**
     * <code>optional .Docid docid = 3;</code>
     */
    public boolean hasDocid() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .Docid docid = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Docid getDocid() {
      return docid_;
    }
    /**
     * <code>optional .Docid docid = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getDocidOrBuilder() {
      return docid_;
    }

    private void initFields() {
      name_ = "";
      deprecatedQuery_ = "";
      docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getDeprecatedQueryBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, docid_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getDeprecatedQueryBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, docid_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code BookAuthor}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.BookAuthorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookAuthor_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookAuthor_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.class, com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        deprecatedQuery_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (docidBuilder_ == null) {
          docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
        } else {
          docidBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookAuthor_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor build() {
        com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor result = new com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.deprecatedQuery_ = deprecatedQuery_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (docidBuilder_ == null) {
          result.docid_ = docid_;
        } else {
          result.docid_ = docidBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasDeprecatedQuery()) {
          bitField0_ |= 0x00000002;
          deprecatedQuery_ = other.deprecatedQuery_;
          onChanged();
        }
        if (other.hasDocid()) {
          mergeDocid(other.getDocid());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string name = 1;
      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      // optional string deprecatedQuery = 2;
      private java.lang.Object deprecatedQuery_ = "";
      /**
       * <code>optional string deprecatedQuery = 2;</code>
       */
      public boolean hasDeprecatedQuery() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string deprecatedQuery = 2;</code>
       */
      public java.lang.String getDeprecatedQuery() {
        java.lang.Object ref = deprecatedQuery_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          deprecatedQuery_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string deprecatedQuery = 2;</code>
       */
      public com.google.protobuf.ByteString
          getDeprecatedQueryBytes() {
        java.lang.Object ref = deprecatedQuery_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          deprecatedQuery_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string deprecatedQuery = 2;</code>
       */
      public Builder setDeprecatedQuery(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        deprecatedQuery_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string deprecatedQuery = 2;</code>
       */
      public Builder clearDeprecatedQuery() {
        bitField0_ = (bitField0_ & ~0x00000002);
        deprecatedQuery_ = getDefaultInstance().getDeprecatedQuery();
        onChanged();
        return this;
      }
      /**
       * <code>optional string deprecatedQuery = 2;</code>
       */
      public Builder setDeprecatedQueryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        deprecatedQuery_ = value;
        onChanged();
        return this;
      }

      // optional .Docid docid = 3;
      private com.akdeniz.googleplaycrawler.GooglePlay.Docid docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder> docidBuilder_;
      /**
       * <code>optional .Docid docid = 3;</code>
       */
      public boolean hasDocid() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .Docid docid = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Docid getDocid() {
        if (docidBuilder_ == null) {
          return docid_;
        } else {
          return docidBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Docid docid = 3;</code>
       */
      public Builder setDocid(com.akdeniz.googleplaycrawler.GooglePlay.Docid value) {
        if (docidBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          docid_ = value;
          onChanged();
        } else {
          docidBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Docid docid = 3;</code>
       */
      public Builder setDocid(
          com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder builderForValue) {
        if (docidBuilder_ == null) {
          docid_ = builderForValue.build();
          onChanged();
        } else {
          docidBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Docid docid = 3;</code>
       */
      public Builder mergeDocid(com.akdeniz.googleplaycrawler.GooglePlay.Docid value) {
        if (docidBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              docid_ != com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance()) {
            docid_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Docid.newBuilder(docid_).mergeFrom(value).buildPartial();
          } else {
            docid_ = value;
          }
          onChanged();
        } else {
          docidBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Docid docid = 3;</code>
       */
      public Builder clearDocid() {
        if (docidBuilder_ == null) {
          docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
          onChanged();
        } else {
          docidBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .Docid docid = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder getDocidBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getDocidFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Docid docid = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getDocidOrBuilder() {
        if (docidBuilder_ != null) {
          return docidBuilder_.getMessageOrBuilder();
        } else {
          return docid_;
        }
      }
      /**
       * <code>optional .Docid docid = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder> 
          getDocidFieldBuilder() {
        if (docidBuilder_ == null) {
          docidBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder>(
                  docid_,
                  getParentForChildren(),
                  isClean());
          docid_ = null;
        }
        return docidBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:BookAuthor)
    }

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

    // @@protoc_insertion_point(class_scope:BookAuthor)
  }

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

    // repeated .BookSubject subject = 3;
    /**
     * <code>repeated .BookSubject subject = 3;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookSubject> 
        getSubjectList();
    /**
     * <code>repeated .BookSubject subject = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BookSubject getSubject(int index);
    /**
     * <code>repeated .BookSubject subject = 3;</code>
     */
    int getSubjectCount();
    /**
     * <code>repeated .BookSubject subject = 3;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BookSubjectOrBuilder> 
        getSubjectOrBuilderList();
    /**
     * <code>repeated .BookSubject subject = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BookSubjectOrBuilder getSubjectOrBuilder(
        int index);

    // optional string publisher = 4;
    /**
     * <code>optional string publisher = 4;</code>
     */
    boolean hasPublisher();
    /**
     * <code>optional string publisher = 4;</code>
     */
    java.lang.String getPublisher();
    /**
     * <code>optional string publisher = 4;</code>
     */
    com.google.protobuf.ByteString
        getPublisherBytes();

    // optional string publicationDate = 5;
    /**
     * <code>optional string publicationDate = 5;</code>
     */
    boolean hasPublicationDate();
    /**
     * <code>optional string publicationDate = 5;</code>
     */
    java.lang.String getPublicationDate();
    /**
     * <code>optional string publicationDate = 5;</code>
     */
    com.google.protobuf.ByteString
        getPublicationDateBytes();

    // optional string isbn = 6;
    /**
     * <code>optional string isbn = 6;</code>
     */
    boolean hasIsbn();
    /**
     * <code>optional string isbn = 6;</code>
     */
    java.lang.String getIsbn();
    /**
     * <code>optional string isbn = 6;</code>
     */
    com.google.protobuf.ByteString
        getIsbnBytes();

    // optional int32 numberOfPages = 7;
    /**
     * <code>optional int32 numberOfPages = 7;</code>
     */
    boolean hasNumberOfPages();
    /**
     * <code>optional int32 numberOfPages = 7;</code>
     */
    int getNumberOfPages();

    // optional string subtitle = 8;
    /**
     * <code>optional string subtitle = 8;</code>
     */
    boolean hasSubtitle();
    /**
     * <code>optional string subtitle = 8;</code>
     */
    java.lang.String getSubtitle();
    /**
     * <code>optional string subtitle = 8;</code>
     */
    com.google.protobuf.ByteString
        getSubtitleBytes();

    // repeated .BookAuthor author = 9;
    /**
     * <code>repeated .BookAuthor author = 9;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor> 
        getAuthorList();
    /**
     * <code>repeated .BookAuthor author = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor getAuthor(int index);
    /**
     * <code>repeated .BookAuthor author = 9;</code>
     */
    int getAuthorCount();
    /**
     * <code>repeated .BookAuthor author = 9;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BookAuthorOrBuilder> 
        getAuthorOrBuilderList();
    /**
     * <code>repeated .BookAuthor author = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BookAuthorOrBuilder getAuthorOrBuilder(
        int index);

    // optional string readerUrl = 10;
    /**
     * <code>optional string readerUrl = 10;</code>
     */
    boolean hasReaderUrl();
    /**
     * <code>optional string readerUrl = 10;</code>
     */
    java.lang.String getReaderUrl();
    /**
     * <code>optional string readerUrl = 10;</code>
     */
    com.google.protobuf.ByteString
        getReaderUrlBytes();

    // optional string downloadEpubUrl = 11;
    /**
     * <code>optional string downloadEpubUrl = 11;</code>
     */
    boolean hasDownloadEpubUrl();
    /**
     * <code>optional string downloadEpubUrl = 11;</code>
     */
    java.lang.String getDownloadEpubUrl();
    /**
     * <code>optional string downloadEpubUrl = 11;</code>
     */
    com.google.protobuf.ByteString
        getDownloadEpubUrlBytes();

    // optional string downloadPdfUrl = 12;
    /**
     * <code>optional string downloadPdfUrl = 12;</code>
     */
    boolean hasDownloadPdfUrl();
    /**
     * <code>optional string downloadPdfUrl = 12;</code>
     */
    java.lang.String getDownloadPdfUrl();
    /**
     * <code>optional string downloadPdfUrl = 12;</code>
     */
    com.google.protobuf.ByteString
        getDownloadPdfUrlBytes();

    // optional string acsEpubTokenUrl = 13;
    /**
     * <code>optional string acsEpubTokenUrl = 13;</code>
     */
    boolean hasAcsEpubTokenUrl();
    /**
     * <code>optional string acsEpubTokenUrl = 13;</code>
     */
    java.lang.String getAcsEpubTokenUrl();
    /**
     * <code>optional string acsEpubTokenUrl = 13;</code>
     */
    com.google.protobuf.ByteString
        getAcsEpubTokenUrlBytes();

    // optional string acsPdfTokenUrl = 14;
    /**
     * <code>optional string acsPdfTokenUrl = 14;</code>
     */
    boolean hasAcsPdfTokenUrl();
    /**
     * <code>optional string acsPdfTokenUrl = 14;</code>
     */
    java.lang.String getAcsPdfTokenUrl();
    /**
     * <code>optional string acsPdfTokenUrl = 14;</code>
     */
    com.google.protobuf.ByteString
        getAcsPdfTokenUrlBytes();

    // optional bool epubAvailable = 15;
    /**
     * <code>optional bool epubAvailable = 15;</code>
     */
    boolean hasEpubAvailable();
    /**
     * <code>optional bool epubAvailable = 15;</code>
     */
    boolean getEpubAvailable();

    // optional bool pdfAvailable = 16;
    /**
     * <code>optional bool pdfAvailable = 16;</code>
     */
    boolean hasPdfAvailable();
    /**
     * <code>optional bool pdfAvailable = 16;</code>
     */
    boolean getPdfAvailable();

    // optional string aboutTheAuthor = 17;
    /**
     * <code>optional string aboutTheAuthor = 17;</code>
     */
    boolean hasAboutTheAuthor();
    /**
     * <code>optional string aboutTheAuthor = 17;</code>
     */
    java.lang.String getAboutTheAuthor();
    /**
     * <code>optional string aboutTheAuthor = 17;</code>
     */
    com.google.protobuf.ByteString
        getAboutTheAuthorBytes();

    // repeated group Identifier = 18 {
    /**
     * <code>repeated group Identifier = 18 { ... }</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier> 
        getIdentifierList();
    /**
     * <code>repeated group Identifier = 18 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier getIdentifier(int index);
    /**
     * <code>repeated group Identifier = 18 { ... }</code>
     */
    int getIdentifierCount();
    /**
     * <code>repeated group Identifier = 18 { ... }</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.IdentifierOrBuilder> 
        getIdentifierOrBuilderList();
    /**
     * <code>repeated group Identifier = 18 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.IdentifierOrBuilder getIdentifierOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code BookDetails}
   */
  public static final class BookDetails extends
      com.google.protobuf.GeneratedMessage
      implements BookDetailsOrBuilder {
    // Use BookDetails.newBuilder() to construct.
    private BookDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private BookDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public BookDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private BookDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                subject_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.BookSubject>();
                mutable_bitField0_ |= 0x00000001;
              }
              subject_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.PARSER, extensionRegistry));
              break;
            }
            case 34: {
              bitField0_ |= 0x00000001;
              publisher_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000002;
              publicationDate_ = input.readBytes();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000004;
              isbn_ = input.readBytes();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000008;
              numberOfPages_ = input.readInt32();
              break;
            }
            case 66: {
              bitField0_ |= 0x00000010;
              subtitle_ = input.readBytes();
              break;
            }
            case 74: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                author_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor>();
                mutable_bitField0_ |= 0x00000040;
              }
              author_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.PARSER, extensionRegistry));
              break;
            }
            case 82: {
              bitField0_ |= 0x00000020;
              readerUrl_ = input.readBytes();
              break;
            }
            case 90: {
              bitField0_ |= 0x00000040;
              downloadEpubUrl_ = input.readBytes();
              break;
            }
            case 98: {
              bitField0_ |= 0x00000080;
              downloadPdfUrl_ = input.readBytes();
              break;
            }
            case 106: {
              bitField0_ |= 0x00000100;
              acsEpubTokenUrl_ = input.readBytes();
              break;
            }
            case 114: {
              bitField0_ |= 0x00000200;
              acsPdfTokenUrl_ = input.readBytes();
              break;
            }
            case 120: {
              bitField0_ |= 0x00000400;
              epubAvailable_ = input.readBool();
              break;
            }
            case 128: {
              bitField0_ |= 0x00000800;
              pdfAvailable_ = input.readBool();
              break;
            }
            case 138: {
              bitField0_ |= 0x00001000;
              aboutTheAuthor_ = input.readBytes();
              break;
            }
            case 147: {
              if (!((mutable_bitField0_ & 0x00008000) == 0x00008000)) {
                identifier_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier>();
                mutable_bitField0_ |= 0x00008000;
              }
              identifier_.add(input.readGroup(18, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.PARSER,
                  extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          subject_ = java.util.Collections.unmodifiableList(subject_);
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          author_ = java.util.Collections.unmodifiableList(author_);
        }
        if (((mutable_bitField0_ & 0x00008000) == 0x00008000)) {
          identifier_ = java.util.Collections.unmodifiableList(identifier_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Builder.class);
    }

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

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

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

      // optional int32 type = 19;
      /**
       * <code>optional int32 type = 19;</code>
       */
      boolean hasType();
      /**
       * <code>optional int32 type = 19;</code>
       */
      int getType();

      // optional string identifier = 20;
      /**
       * <code>optional string identifier = 20;</code>
       */
      boolean hasIdentifier();
      /**
       * <code>optional string identifier = 20;</code>
       */
      java.lang.String getIdentifier();
      /**
       * <code>optional string identifier = 20;</code>
       */
      com.google.protobuf.ByteString
          getIdentifierBytes();
    }
    /**
     * Protobuf type {@code BookDetails.Identifier}
     */
    public static final class Identifier extends
        com.google.protobuf.GeneratedMessage
        implements IdentifierOrBuilder {
      // Use Identifier.newBuilder() to construct.
      private Identifier(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Identifier(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

      public Identifier getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Identifier(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 152: {
                bitField0_ |= 0x00000001;
                type_ = input.readInt32();
                break;
              }
              case 162: {
                bitField0_ |= 0x00000002;
                identifier_ = input.readBytes();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookDetails_Identifier_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookDetails_Identifier_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.class, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.Builder.class);
      }

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

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

      private int bitField0_;
      // optional int32 type = 19;
      public static final int TYPE_FIELD_NUMBER = 19;
      private int type_;
      /**
       * <code>optional int32 type = 19;</code>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 type = 19;</code>
       */
      public int getType() {
        return type_;
      }

      // optional string identifier = 20;
      public static final int IDENTIFIER_FIELD_NUMBER = 20;
      private java.lang.Object identifier_;
      /**
       * <code>optional string identifier = 20;</code>
       */
      public boolean hasIdentifier() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string identifier = 20;</code>
       */
      public java.lang.String getIdentifier() {
        java.lang.Object ref = identifier_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            identifier_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string identifier = 20;</code>
       */
      public com.google.protobuf.ByteString
          getIdentifierBytes() {
        java.lang.Object ref = identifier_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          identifier_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeInt32(19, type_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(20, getIdentifierBytes());
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(19, type_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(20, getIdentifierBytes());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

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

      public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code BookDetails.Identifier}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.IdentifierOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookDetails_Identifier_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookDetails_Identifier_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.class, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.Builder.class);
        }

        // Construct using com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

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

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

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

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookDetails_Identifier_descriptor;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier getDefaultInstanceForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.getDefaultInstance();
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier build() {
          com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier buildPartial() {
          com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier result = new com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.type_ = type_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.identifier_ = identifier_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier) {
            return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier other) {
          if (other == com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.getDefaultInstance()) return this;
          if (other.hasType()) {
            setType(other.getType());
          }
          if (other.hasIdentifier()) {
            bitField0_ |= 0x00000002;
            identifier_ = other.identifier_;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

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

        // optional int32 type = 19;
        private int type_ ;
        /**
         * <code>optional int32 type = 19;</code>
         */
        public boolean hasType() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional int32 type = 19;</code>
         */
        public int getType() {
          return type_;
        }
        /**
         * <code>optional int32 type = 19;</code>
         */
        public Builder setType(int value) {
          bitField0_ |= 0x00000001;
          type_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional int32 type = 19;</code>
         */
        public Builder clearType() {
          bitField0_ = (bitField0_ & ~0x00000001);
          type_ = 0;
          onChanged();
          return this;
        }

        // optional string identifier = 20;
        private java.lang.Object identifier_ = "";
        /**
         * <code>optional string identifier = 20;</code>
         */
        public boolean hasIdentifier() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string identifier = 20;</code>
         */
        public java.lang.String getIdentifier() {
          java.lang.Object ref = identifier_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            identifier_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string identifier = 20;</code>
         */
        public com.google.protobuf.ByteString
            getIdentifierBytes() {
          java.lang.Object ref = identifier_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            identifier_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string identifier = 20;</code>
         */
        public Builder setIdentifier(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          identifier_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string identifier = 20;</code>
         */
        public Builder clearIdentifier() {
          bitField0_ = (bitField0_ & ~0x00000002);
          identifier_ = getDefaultInstance().getIdentifier();
          onChanged();
          return this;
        }
        /**
         * <code>optional string identifier = 20;</code>
         */
        public Builder setIdentifierBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          identifier_ = value;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:BookDetails.Identifier)
      }

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

      // @@protoc_insertion_point(class_scope:BookDetails.Identifier)
    }

    private int bitField0_;
    // repeated .BookSubject subject = 3;
    public static final int SUBJECT_FIELD_NUMBER = 3;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookSubject> subject_;
    /**
     * <code>repeated .BookSubject subject = 3;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookSubject> getSubjectList() {
      return subject_;
    }
    /**
     * <code>repeated .BookSubject subject = 3;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BookSubjectOrBuilder> 
        getSubjectOrBuilderList() {
      return subject_;
    }
    /**
     * <code>repeated .BookSubject subject = 3;</code>
     */
    public int getSubjectCount() {
      return subject_.size();
    }
    /**
     * <code>repeated .BookSubject subject = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BookSubject getSubject(int index) {
      return subject_.get(index);
    }
    /**
     * <code>repeated .BookSubject subject = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BookSubjectOrBuilder getSubjectOrBuilder(
        int index) {
      return subject_.get(index);
    }

    // optional string publisher = 4;
    public static final int PUBLISHER_FIELD_NUMBER = 4;
    private java.lang.Object publisher_;
    /**
     * <code>optional string publisher = 4;</code>
     */
    public boolean hasPublisher() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string publisher = 4;</code>
     */
    public java.lang.String getPublisher() {
      java.lang.Object ref = publisher_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          publisher_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string publisher = 4;</code>
     */
    public com.google.protobuf.ByteString
        getPublisherBytes() {
      java.lang.Object ref = publisher_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        publisher_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string publicationDate = 5;
    public static final int PUBLICATIONDATE_FIELD_NUMBER = 5;
    private java.lang.Object publicationDate_;
    /**
     * <code>optional string publicationDate = 5;</code>
     */
    public boolean hasPublicationDate() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string publicationDate = 5;</code>
     */
    public java.lang.String getPublicationDate() {
      java.lang.Object ref = publicationDate_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          publicationDate_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string publicationDate = 5;</code>
     */
    public com.google.protobuf.ByteString
        getPublicationDateBytes() {
      java.lang.Object ref = publicationDate_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        publicationDate_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string isbn = 6;
    public static final int ISBN_FIELD_NUMBER = 6;
    private java.lang.Object isbn_;
    /**
     * <code>optional string isbn = 6;</code>
     */
    public boolean hasIsbn() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string isbn = 6;</code>
     */
    public java.lang.String getIsbn() {
      java.lang.Object ref = isbn_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          isbn_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string isbn = 6;</code>
     */
    public com.google.protobuf.ByteString
        getIsbnBytes() {
      java.lang.Object ref = isbn_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        isbn_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 numberOfPages = 7;
    public static final int NUMBEROFPAGES_FIELD_NUMBER = 7;
    private int numberOfPages_;
    /**
     * <code>optional int32 numberOfPages = 7;</code>
     */
    public boolean hasNumberOfPages() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int32 numberOfPages = 7;</code>
     */
    public int getNumberOfPages() {
      return numberOfPages_;
    }

    // optional string subtitle = 8;
    public static final int SUBTITLE_FIELD_NUMBER = 8;
    private java.lang.Object subtitle_;
    /**
     * <code>optional string subtitle = 8;</code>
     */
    public boolean hasSubtitle() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string subtitle = 8;</code>
     */
    public java.lang.String getSubtitle() {
      java.lang.Object ref = subtitle_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          subtitle_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string subtitle = 8;</code>
     */
    public com.google.protobuf.ByteString
        getSubtitleBytes() {
      java.lang.Object ref = subtitle_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        subtitle_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated .BookAuthor author = 9;
    public static final int AUTHOR_FIELD_NUMBER = 9;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor> author_;
    /**
     * <code>repeated .BookAuthor author = 9;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor> getAuthorList() {
      return author_;
    }
    /**
     * <code>repeated .BookAuthor author = 9;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BookAuthorOrBuilder> 
        getAuthorOrBuilderList() {
      return author_;
    }
    /**
     * <code>repeated .BookAuthor author = 9;</code>
     */
    public int getAuthorCount() {
      return author_.size();
    }
    /**
     * <code>repeated .BookAuthor author = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor getAuthor(int index) {
      return author_.get(index);
    }
    /**
     * <code>repeated .BookAuthor author = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BookAuthorOrBuilder getAuthorOrBuilder(
        int index) {
      return author_.get(index);
    }

    // optional string readerUrl = 10;
    public static final int READERURL_FIELD_NUMBER = 10;
    private java.lang.Object readerUrl_;
    /**
     * <code>optional string readerUrl = 10;</code>
     */
    public boolean hasReaderUrl() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string readerUrl = 10;</code>
     */
    public java.lang.String getReaderUrl() {
      java.lang.Object ref = readerUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          readerUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string readerUrl = 10;</code>
     */
    public com.google.protobuf.ByteString
        getReaderUrlBytes() {
      java.lang.Object ref = readerUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        readerUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string downloadEpubUrl = 11;
    public static final int DOWNLOADEPUBURL_FIELD_NUMBER = 11;
    private java.lang.Object downloadEpubUrl_;
    /**
     * <code>optional string downloadEpubUrl = 11;</code>
     */
    public boolean hasDownloadEpubUrl() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional string downloadEpubUrl = 11;</code>
     */
    public java.lang.String getDownloadEpubUrl() {
      java.lang.Object ref = downloadEpubUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          downloadEpubUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string downloadEpubUrl = 11;</code>
     */
    public com.google.protobuf.ByteString
        getDownloadEpubUrlBytes() {
      java.lang.Object ref = downloadEpubUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        downloadEpubUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string downloadPdfUrl = 12;
    public static final int DOWNLOADPDFURL_FIELD_NUMBER = 12;
    private java.lang.Object downloadPdfUrl_;
    /**
     * <code>optional string downloadPdfUrl = 12;</code>
     */
    public boolean hasDownloadPdfUrl() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional string downloadPdfUrl = 12;</code>
     */
    public java.lang.String getDownloadPdfUrl() {
      java.lang.Object ref = downloadPdfUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          downloadPdfUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string downloadPdfUrl = 12;</code>
     */
    public com.google.protobuf.ByteString
        getDownloadPdfUrlBytes() {
      java.lang.Object ref = downloadPdfUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        downloadPdfUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string acsEpubTokenUrl = 13;
    public static final int ACSEPUBTOKENURL_FIELD_NUMBER = 13;
    private java.lang.Object acsEpubTokenUrl_;
    /**
     * <code>optional string acsEpubTokenUrl = 13;</code>
     */
    public boolean hasAcsEpubTokenUrl() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional string acsEpubTokenUrl = 13;</code>
     */
    public java.lang.String getAcsEpubTokenUrl() {
      java.lang.Object ref = acsEpubTokenUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          acsEpubTokenUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string acsEpubTokenUrl = 13;</code>
     */
    public com.google.protobuf.ByteString
        getAcsEpubTokenUrlBytes() {
      java.lang.Object ref = acsEpubTokenUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        acsEpubTokenUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string acsPdfTokenUrl = 14;
    public static final int ACSPDFTOKENURL_FIELD_NUMBER = 14;
    private java.lang.Object acsPdfTokenUrl_;
    /**
     * <code>optional string acsPdfTokenUrl = 14;</code>
     */
    public boolean hasAcsPdfTokenUrl() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional string acsPdfTokenUrl = 14;</code>
     */
    public java.lang.String getAcsPdfTokenUrl() {
      java.lang.Object ref = acsPdfTokenUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          acsPdfTokenUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string acsPdfTokenUrl = 14;</code>
     */
    public com.google.protobuf.ByteString
        getAcsPdfTokenUrlBytes() {
      java.lang.Object ref = acsPdfTokenUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        acsPdfTokenUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool epubAvailable = 15;
    public static final int EPUBAVAILABLE_FIELD_NUMBER = 15;
    private boolean epubAvailable_;
    /**
     * <code>optional bool epubAvailable = 15;</code>
     */
    public boolean hasEpubAvailable() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional bool epubAvailable = 15;</code>
     */
    public boolean getEpubAvailable() {
      return epubAvailable_;
    }

    // optional bool pdfAvailable = 16;
    public static final int PDFAVAILABLE_FIELD_NUMBER = 16;
    private boolean pdfAvailable_;
    /**
     * <code>optional bool pdfAvailable = 16;</code>
     */
    public boolean hasPdfAvailable() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional bool pdfAvailable = 16;</code>
     */
    public boolean getPdfAvailable() {
      return pdfAvailable_;
    }

    // optional string aboutTheAuthor = 17;
    public static final int ABOUTTHEAUTHOR_FIELD_NUMBER = 17;
    private java.lang.Object aboutTheAuthor_;
    /**
     * <code>optional string aboutTheAuthor = 17;</code>
     */
    public boolean hasAboutTheAuthor() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <code>optional string aboutTheAuthor = 17;</code>
     */
    public java.lang.String getAboutTheAuthor() {
      java.lang.Object ref = aboutTheAuthor_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          aboutTheAuthor_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string aboutTheAuthor = 17;</code>
     */
    public com.google.protobuf.ByteString
        getAboutTheAuthorBytes() {
      java.lang.Object ref = aboutTheAuthor_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        aboutTheAuthor_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated group Identifier = 18 {
    public static final int IDENTIFIER_FIELD_NUMBER = 18;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier> identifier_;
    /**
     * <code>repeated group Identifier = 18 { ... }</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier> getIdentifierList() {
      return identifier_;
    }
    /**
     * <code>repeated group Identifier = 18 { ... }</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.IdentifierOrBuilder> 
        getIdentifierOrBuilderList() {
      return identifier_;
    }
    /**
     * <code>repeated group Identifier = 18 { ... }</code>
     */
    public int getIdentifierCount() {
      return identifier_.size();
    }
    /**
     * <code>repeated group Identifier = 18 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier getIdentifier(int index) {
      return identifier_.get(index);
    }
    /**
     * <code>repeated group Identifier = 18 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.IdentifierOrBuilder getIdentifierOrBuilder(
        int index) {
      return identifier_.get(index);
    }

    private void initFields() {
      subject_ = java.util.Collections.emptyList();
      publisher_ = "";
      publicationDate_ = "";
      isbn_ = "";
      numberOfPages_ = 0;
      subtitle_ = "";
      author_ = java.util.Collections.emptyList();
      readerUrl_ = "";
      downloadEpubUrl_ = "";
      downloadPdfUrl_ = "";
      acsEpubTokenUrl_ = "";
      acsPdfTokenUrl_ = "";
      epubAvailable_ = false;
      pdfAvailable_ = false;
      aboutTheAuthor_ = "";
      identifier_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < subject_.size(); i++) {
        output.writeMessage(3, subject_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(4, getPublisherBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(5, getPublicationDateBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(6, getIsbnBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(7, numberOfPages_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(8, getSubtitleBytes());
      }
      for (int i = 0; i < author_.size(); i++) {
        output.writeMessage(9, author_.get(i));
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(10, getReaderUrlBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(11, getDownloadEpubUrlBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBytes(12, getDownloadPdfUrlBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBytes(13, getAcsEpubTokenUrlBytes());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBytes(14, getAcsPdfTokenUrlBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBool(15, epubAvailable_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeBool(16, pdfAvailable_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeBytes(17, getAboutTheAuthorBytes());
      }
      for (int i = 0; i < identifier_.size(); i++) {
        output.writeGroup(18, identifier_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      for (int i = 0; i < subject_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, subject_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getPublisherBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getPublicationDateBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getIsbnBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, numberOfPages_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getSubtitleBytes());
      }
      for (int i = 0; i < author_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, author_.get(i));
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(10, getReaderUrlBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(11, getDownloadEpubUrlBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(12, getDownloadPdfUrlBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(13, getAcsEpubTokenUrlBytes());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(14, getAcsPdfTokenUrlBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(15, epubAvailable_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(16, pdfAvailable_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(17, getAboutTheAuthorBytes());
      }
      for (int i = 0; i < identifier_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeGroupSize(18, identifier_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.BookDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code BookDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.BookDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        if (subjectBuilder_ == null) {
          subject_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          subjectBuilder_.clear();
        }
        publisher_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        publicationDate_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        isbn_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        numberOfPages_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        subtitle_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        if (authorBuilder_ == null) {
          author_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          authorBuilder_.clear();
        }
        readerUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        downloadEpubUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000100);
        downloadPdfUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        acsEpubTokenUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000400);
        acsPdfTokenUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000800);
        epubAvailable_ = false;
        bitField0_ = (bitField0_ & ~0x00001000);
        pdfAvailable_ = false;
        bitField0_ = (bitField0_ & ~0x00002000);
        aboutTheAuthor_ = "";
        bitField0_ = (bitField0_ & ~0x00004000);
        if (identifierBuilder_ == null) {
          identifier_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
        } else {
          identifierBuilder_.clear();
        }
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.BookDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.BookDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.BookDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (subjectBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            subject_ = java.util.Collections.unmodifiableList(subject_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.subject_ = subject_;
        } else {
          result.subject_ = subjectBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000001;
        }
        result.publisher_ = publisher_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000002;
        }
        result.publicationDate_ = publicationDate_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.isbn_ = isbn_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        result.numberOfPages_ = numberOfPages_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000010;
        }
        result.subtitle_ = subtitle_;
        if (authorBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            author_ = java.util.Collections.unmodifiableList(author_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.author_ = author_;
        } else {
          result.author_ = authorBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000020;
        }
        result.readerUrl_ = readerUrl_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000040;
        }
        result.downloadEpubUrl_ = downloadEpubUrl_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000080;
        }
        result.downloadPdfUrl_ = downloadPdfUrl_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000100;
        }
        result.acsEpubTokenUrl_ = acsEpubTokenUrl_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000200;
        }
        result.acsPdfTokenUrl_ = acsPdfTokenUrl_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00000400;
        }
        result.epubAvailable_ = epubAvailable_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00000800;
        }
        result.pdfAvailable_ = pdfAvailable_;
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.aboutTheAuthor_ = aboutTheAuthor_;
        if (identifierBuilder_ == null) {
          if (((bitField0_ & 0x00008000) == 0x00008000)) {
            identifier_ = java.util.Collections.unmodifiableList(identifier_);
            bitField0_ = (bitField0_ & ~0x00008000);
          }
          result.identifier_ = identifier_;
        } else {
          result.identifier_ = identifierBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.BookDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.BookDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.BookDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.getDefaultInstance()) return this;
        if (subjectBuilder_ == null) {
          if (!other.subject_.isEmpty()) {
            if (subject_.isEmpty()) {
              subject_ = other.subject_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureSubjectIsMutable();
              subject_.addAll(other.subject_);
            }
            onChanged();
          }
        } else {
          if (!other.subject_.isEmpty()) {
            if (subjectBuilder_.isEmpty()) {
              subjectBuilder_.dispose();
              subjectBuilder_ = null;
              subject_ = other.subject_;
              bitField0_ = (bitField0_ & ~0x00000001);
              subjectBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getSubjectFieldBuilder() : null;
            } else {
              subjectBuilder_.addAllMessages(other.subject_);
            }
          }
        }
        if (other.hasPublisher()) {
          bitField0_ |= 0x00000002;
          publisher_ = other.publisher_;
          onChanged();
        }
        if (other.hasPublicationDate()) {
          bitField0_ |= 0x00000004;
          publicationDate_ = other.publicationDate_;
          onChanged();
        }
        if (other.hasIsbn()) {
          bitField0_ |= 0x00000008;
          isbn_ = other.isbn_;
          onChanged();
        }
        if (other.hasNumberOfPages()) {
          setNumberOfPages(other.getNumberOfPages());
        }
        if (other.hasSubtitle()) {
          bitField0_ |= 0x00000020;
          subtitle_ = other.subtitle_;
          onChanged();
        }
        if (authorBuilder_ == null) {
          if (!other.author_.isEmpty()) {
            if (author_.isEmpty()) {
              author_ = other.author_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureAuthorIsMutable();
              author_.addAll(other.author_);
            }
            onChanged();
          }
        } else {
          if (!other.author_.isEmpty()) {
            if (authorBuilder_.isEmpty()) {
              authorBuilder_.dispose();
              authorBuilder_ = null;
              author_ = other.author_;
              bitField0_ = (bitField0_ & ~0x00000040);
              authorBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getAuthorFieldBuilder() : null;
            } else {
              authorBuilder_.addAllMessages(other.author_);
            }
          }
        }
        if (other.hasReaderUrl()) {
          bitField0_ |= 0x00000080;
          readerUrl_ = other.readerUrl_;
          onChanged();
        }
        if (other.hasDownloadEpubUrl()) {
          bitField0_ |= 0x00000100;
          downloadEpubUrl_ = other.downloadEpubUrl_;
          onChanged();
        }
        if (other.hasDownloadPdfUrl()) {
          bitField0_ |= 0x00000200;
          downloadPdfUrl_ = other.downloadPdfUrl_;
          onChanged();
        }
        if (other.hasAcsEpubTokenUrl()) {
          bitField0_ |= 0x00000400;
          acsEpubTokenUrl_ = other.acsEpubTokenUrl_;
          onChanged();
        }
        if (other.hasAcsPdfTokenUrl()) {
          bitField0_ |= 0x00000800;
          acsPdfTokenUrl_ = other.acsPdfTokenUrl_;
          onChanged();
        }
        if (other.hasEpubAvailable()) {
          setEpubAvailable(other.getEpubAvailable());
        }
        if (other.hasPdfAvailable()) {
          setPdfAvailable(other.getPdfAvailable());
        }
        if (other.hasAboutTheAuthor()) {
          bitField0_ |= 0x00004000;
          aboutTheAuthor_ = other.aboutTheAuthor_;
          onChanged();
        }
        if (identifierBuilder_ == null) {
          if (!other.identifier_.isEmpty()) {
            if (identifier_.isEmpty()) {
              identifier_ = other.identifier_;
              bitField0_ = (bitField0_ & ~0x00008000);
            } else {
              ensureIdentifierIsMutable();
              identifier_.addAll(other.identifier_);
            }
            onChanged();
          }
        } else {
          if (!other.identifier_.isEmpty()) {
            if (identifierBuilder_.isEmpty()) {
              identifierBuilder_.dispose();
              identifierBuilder_ = null;
              identifier_ = other.identifier_;
              bitField0_ = (bitField0_ & ~0x00008000);
              identifierBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getIdentifierFieldBuilder() : null;
            } else {
              identifierBuilder_.addAllMessages(other.identifier_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // repeated .BookSubject subject = 3;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookSubject> subject_ =
        java.util.Collections.emptyList();
      private void ensureSubjectIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          subject_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.BookSubject>(subject_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BookSubject, com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BookSubjectOrBuilder> subjectBuilder_;

      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookSubject> getSubjectList() {
        if (subjectBuilder_ == null) {
          return java.util.Collections.unmodifiableList(subject_);
        } else {
          return subjectBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public int getSubjectCount() {
        if (subjectBuilder_ == null) {
          return subject_.size();
        } else {
          return subjectBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookSubject getSubject(int index) {
        if (subjectBuilder_ == null) {
          return subject_.get(index);
        } else {
          return subjectBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public Builder setSubject(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BookSubject value) {
        if (subjectBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSubjectIsMutable();
          subject_.set(index, value);
          onChanged();
        } else {
          subjectBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public Builder setSubject(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.Builder builderForValue) {
        if (subjectBuilder_ == null) {
          ensureSubjectIsMutable();
          subject_.set(index, builderForValue.build());
          onChanged();
        } else {
          subjectBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public Builder addSubject(com.akdeniz.googleplaycrawler.GooglePlay.BookSubject value) {
        if (subjectBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSubjectIsMutable();
          subject_.add(value);
          onChanged();
        } else {
          subjectBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public Builder addSubject(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BookSubject value) {
        if (subjectBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSubjectIsMutable();
          subject_.add(index, value);
          onChanged();
        } else {
          subjectBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public Builder addSubject(
          com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.Builder builderForValue) {
        if (subjectBuilder_ == null) {
          ensureSubjectIsMutable();
          subject_.add(builderForValue.build());
          onChanged();
        } else {
          subjectBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public Builder addSubject(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.Builder builderForValue) {
        if (subjectBuilder_ == null) {
          ensureSubjectIsMutable();
          subject_.add(index, builderForValue.build());
          onChanged();
        } else {
          subjectBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public Builder addAllSubject(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.BookSubject> values) {
        if (subjectBuilder_ == null) {
          ensureSubjectIsMutable();
          super.addAll(values, subject_);
          onChanged();
        } else {
          subjectBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public Builder clearSubject() {
        if (subjectBuilder_ == null) {
          subject_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          subjectBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public Builder removeSubject(int index) {
        if (subjectBuilder_ == null) {
          ensureSubjectIsMutable();
          subject_.remove(index);
          onChanged();
        } else {
          subjectBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.Builder getSubjectBuilder(
          int index) {
        return getSubjectFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookSubjectOrBuilder getSubjectOrBuilder(
          int index) {
        if (subjectBuilder_ == null) {
          return subject_.get(index);  } else {
          return subjectBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BookSubjectOrBuilder> 
           getSubjectOrBuilderList() {
        if (subjectBuilder_ != null) {
          return subjectBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(subject_);
        }
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.Builder addSubjectBuilder() {
        return getSubjectFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.getDefaultInstance());
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.Builder addSubjectBuilder(
          int index) {
        return getSubjectFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.getDefaultInstance());
      }
      /**
       * <code>repeated .BookSubject subject = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.Builder> 
           getSubjectBuilderList() {
        return getSubjectFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BookSubject, com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BookSubjectOrBuilder> 
          getSubjectFieldBuilder() {
        if (subjectBuilder_ == null) {
          subjectBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.BookSubject, com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BookSubjectOrBuilder>(
                  subject_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          subject_ = null;
        }
        return subjectBuilder_;
      }

      // optional string publisher = 4;
      private java.lang.Object publisher_ = "";
      /**
       * <code>optional string publisher = 4;</code>
       */
      public boolean hasPublisher() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string publisher = 4;</code>
       */
      public java.lang.String getPublisher() {
        java.lang.Object ref = publisher_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          publisher_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string publisher = 4;</code>
       */
      public com.google.protobuf.ByteString
          getPublisherBytes() {
        java.lang.Object ref = publisher_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          publisher_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string publisher = 4;</code>
       */
      public Builder setPublisher(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        publisher_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string publisher = 4;</code>
       */
      public Builder clearPublisher() {
        bitField0_ = (bitField0_ & ~0x00000002);
        publisher_ = getDefaultInstance().getPublisher();
        onChanged();
        return this;
      }
      /**
       * <code>optional string publisher = 4;</code>
       */
      public Builder setPublisherBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        publisher_ = value;
        onChanged();
        return this;
      }

      // optional string publicationDate = 5;
      private java.lang.Object publicationDate_ = "";
      /**
       * <code>optional string publicationDate = 5;</code>
       */
      public boolean hasPublicationDate() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string publicationDate = 5;</code>
       */
      public java.lang.String getPublicationDate() {
        java.lang.Object ref = publicationDate_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          publicationDate_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string publicationDate = 5;</code>
       */
      public com.google.protobuf.ByteString
          getPublicationDateBytes() {
        java.lang.Object ref = publicationDate_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          publicationDate_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string publicationDate = 5;</code>
       */
      public Builder setPublicationDate(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        publicationDate_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string publicationDate = 5;</code>
       */
      public Builder clearPublicationDate() {
        bitField0_ = (bitField0_ & ~0x00000004);
        publicationDate_ = getDefaultInstance().getPublicationDate();
        onChanged();
        return this;
      }
      /**
       * <code>optional string publicationDate = 5;</code>
       */
      public Builder setPublicationDateBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        publicationDate_ = value;
        onChanged();
        return this;
      }

      // optional string isbn = 6;
      private java.lang.Object isbn_ = "";
      /**
       * <code>optional string isbn = 6;</code>
       */
      public boolean hasIsbn() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string isbn = 6;</code>
       */
      public java.lang.String getIsbn() {
        java.lang.Object ref = isbn_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          isbn_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string isbn = 6;</code>
       */
      public com.google.protobuf.ByteString
          getIsbnBytes() {
        java.lang.Object ref = isbn_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          isbn_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string isbn = 6;</code>
       */
      public Builder setIsbn(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        isbn_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string isbn = 6;</code>
       */
      public Builder clearIsbn() {
        bitField0_ = (bitField0_ & ~0x00000008);
        isbn_ = getDefaultInstance().getIsbn();
        onChanged();
        return this;
      }
      /**
       * <code>optional string isbn = 6;</code>
       */
      public Builder setIsbnBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        isbn_ = value;
        onChanged();
        return this;
      }

      // optional int32 numberOfPages = 7;
      private int numberOfPages_ ;
      /**
       * <code>optional int32 numberOfPages = 7;</code>
       */
      public boolean hasNumberOfPages() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int32 numberOfPages = 7;</code>
       */
      public int getNumberOfPages() {
        return numberOfPages_;
      }
      /**
       * <code>optional int32 numberOfPages = 7;</code>
       */
      public Builder setNumberOfPages(int value) {
        bitField0_ |= 0x00000010;
        numberOfPages_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 numberOfPages = 7;</code>
       */
      public Builder clearNumberOfPages() {
        bitField0_ = (bitField0_ & ~0x00000010);
        numberOfPages_ = 0;
        onChanged();
        return this;
      }

      // optional string subtitle = 8;
      private java.lang.Object subtitle_ = "";
      /**
       * <code>optional string subtitle = 8;</code>
       */
      public boolean hasSubtitle() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional string subtitle = 8;</code>
       */
      public java.lang.String getSubtitle() {
        java.lang.Object ref = subtitle_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          subtitle_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string subtitle = 8;</code>
       */
      public com.google.protobuf.ByteString
          getSubtitleBytes() {
        java.lang.Object ref = subtitle_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          subtitle_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string subtitle = 8;</code>
       */
      public Builder setSubtitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        subtitle_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string subtitle = 8;</code>
       */
      public Builder clearSubtitle() {
        bitField0_ = (bitField0_ & ~0x00000020);
        subtitle_ = getDefaultInstance().getSubtitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string subtitle = 8;</code>
       */
      public Builder setSubtitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        subtitle_ = value;
        onChanged();
        return this;
      }

      // repeated .BookAuthor author = 9;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor> author_ =
        java.util.Collections.emptyList();
      private void ensureAuthorIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          author_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor>(author_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor, com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BookAuthorOrBuilder> authorBuilder_;

      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor> getAuthorList() {
        if (authorBuilder_ == null) {
          return java.util.Collections.unmodifiableList(author_);
        } else {
          return authorBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public int getAuthorCount() {
        if (authorBuilder_ == null) {
          return author_.size();
        } else {
          return authorBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor getAuthor(int index) {
        if (authorBuilder_ == null) {
          return author_.get(index);
        } else {
          return authorBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public Builder setAuthor(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor value) {
        if (authorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAuthorIsMutable();
          author_.set(index, value);
          onChanged();
        } else {
          authorBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public Builder setAuthor(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.Builder builderForValue) {
        if (authorBuilder_ == null) {
          ensureAuthorIsMutable();
          author_.set(index, builderForValue.build());
          onChanged();
        } else {
          authorBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public Builder addAuthor(com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor value) {
        if (authorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAuthorIsMutable();
          author_.add(value);
          onChanged();
        } else {
          authorBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public Builder addAuthor(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor value) {
        if (authorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAuthorIsMutable();
          author_.add(index, value);
          onChanged();
        } else {
          authorBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public Builder addAuthor(
          com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.Builder builderForValue) {
        if (authorBuilder_ == null) {
          ensureAuthorIsMutable();
          author_.add(builderForValue.build());
          onChanged();
        } else {
          authorBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public Builder addAuthor(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.Builder builderForValue) {
        if (authorBuilder_ == null) {
          ensureAuthorIsMutable();
          author_.add(index, builderForValue.build());
          onChanged();
        } else {
          authorBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public Builder addAllAuthor(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor> values) {
        if (authorBuilder_ == null) {
          ensureAuthorIsMutable();
          super.addAll(values, author_);
          onChanged();
        } else {
          authorBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public Builder clearAuthor() {
        if (authorBuilder_ == null) {
          author_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          authorBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public Builder removeAuthor(int index) {
        if (authorBuilder_ == null) {
          ensureAuthorIsMutable();
          author_.remove(index);
          onChanged();
        } else {
          authorBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.Builder getAuthorBuilder(
          int index) {
        return getAuthorFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookAuthorOrBuilder getAuthorOrBuilder(
          int index) {
        if (authorBuilder_ == null) {
          return author_.get(index);  } else {
          return authorBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BookAuthorOrBuilder> 
           getAuthorOrBuilderList() {
        if (authorBuilder_ != null) {
          return authorBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(author_);
        }
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.Builder addAuthorBuilder() {
        return getAuthorFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.getDefaultInstance());
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.Builder addAuthorBuilder(
          int index) {
        return getAuthorFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.getDefaultInstance());
      }
      /**
       * <code>repeated .BookAuthor author = 9;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.Builder> 
           getAuthorBuilderList() {
        return getAuthorFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor, com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BookAuthorOrBuilder> 
          getAuthorFieldBuilder() {
        if (authorBuilder_ == null) {
          authorBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor, com.akdeniz.googleplaycrawler.GooglePlay.BookAuthor.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BookAuthorOrBuilder>(
                  author_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          author_ = null;
        }
        return authorBuilder_;
      }

      // optional string readerUrl = 10;
      private java.lang.Object readerUrl_ = "";
      /**
       * <code>optional string readerUrl = 10;</code>
       */
      public boolean hasReaderUrl() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string readerUrl = 10;</code>
       */
      public java.lang.String getReaderUrl() {
        java.lang.Object ref = readerUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          readerUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string readerUrl = 10;</code>
       */
      public com.google.protobuf.ByteString
          getReaderUrlBytes() {
        java.lang.Object ref = readerUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          readerUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string readerUrl = 10;</code>
       */
      public Builder setReaderUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        readerUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string readerUrl = 10;</code>
       */
      public Builder clearReaderUrl() {
        bitField0_ = (bitField0_ & ~0x00000080);
        readerUrl_ = getDefaultInstance().getReaderUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string readerUrl = 10;</code>
       */
      public Builder setReaderUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        readerUrl_ = value;
        onChanged();
        return this;
      }

      // optional string downloadEpubUrl = 11;
      private java.lang.Object downloadEpubUrl_ = "";
      /**
       * <code>optional string downloadEpubUrl = 11;</code>
       */
      public boolean hasDownloadEpubUrl() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional string downloadEpubUrl = 11;</code>
       */
      public java.lang.String getDownloadEpubUrl() {
        java.lang.Object ref = downloadEpubUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          downloadEpubUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string downloadEpubUrl = 11;</code>
       */
      public com.google.protobuf.ByteString
          getDownloadEpubUrlBytes() {
        java.lang.Object ref = downloadEpubUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          downloadEpubUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string downloadEpubUrl = 11;</code>
       */
      public Builder setDownloadEpubUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        downloadEpubUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string downloadEpubUrl = 11;</code>
       */
      public Builder clearDownloadEpubUrl() {
        bitField0_ = (bitField0_ & ~0x00000100);
        downloadEpubUrl_ = getDefaultInstance().getDownloadEpubUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string downloadEpubUrl = 11;</code>
       */
      public Builder setDownloadEpubUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        downloadEpubUrl_ = value;
        onChanged();
        return this;
      }

      // optional string downloadPdfUrl = 12;
      private java.lang.Object downloadPdfUrl_ = "";
      /**
       * <code>optional string downloadPdfUrl = 12;</code>
       */
      public boolean hasDownloadPdfUrl() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional string downloadPdfUrl = 12;</code>
       */
      public java.lang.String getDownloadPdfUrl() {
        java.lang.Object ref = downloadPdfUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          downloadPdfUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string downloadPdfUrl = 12;</code>
       */
      public com.google.protobuf.ByteString
          getDownloadPdfUrlBytes() {
        java.lang.Object ref = downloadPdfUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          downloadPdfUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string downloadPdfUrl = 12;</code>
       */
      public Builder setDownloadPdfUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        downloadPdfUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string downloadPdfUrl = 12;</code>
       */
      public Builder clearDownloadPdfUrl() {
        bitField0_ = (bitField0_ & ~0x00000200);
        downloadPdfUrl_ = getDefaultInstance().getDownloadPdfUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string downloadPdfUrl = 12;</code>
       */
      public Builder setDownloadPdfUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        downloadPdfUrl_ = value;
        onChanged();
        return this;
      }

      // optional string acsEpubTokenUrl = 13;
      private java.lang.Object acsEpubTokenUrl_ = "";
      /**
       * <code>optional string acsEpubTokenUrl = 13;</code>
       */
      public boolean hasAcsEpubTokenUrl() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional string acsEpubTokenUrl = 13;</code>
       */
      public java.lang.String getAcsEpubTokenUrl() {
        java.lang.Object ref = acsEpubTokenUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          acsEpubTokenUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string acsEpubTokenUrl = 13;</code>
       */
      public com.google.protobuf.ByteString
          getAcsEpubTokenUrlBytes() {
        java.lang.Object ref = acsEpubTokenUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          acsEpubTokenUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string acsEpubTokenUrl = 13;</code>
       */
      public Builder setAcsEpubTokenUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        acsEpubTokenUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string acsEpubTokenUrl = 13;</code>
       */
      public Builder clearAcsEpubTokenUrl() {
        bitField0_ = (bitField0_ & ~0x00000400);
        acsEpubTokenUrl_ = getDefaultInstance().getAcsEpubTokenUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string acsEpubTokenUrl = 13;</code>
       */
      public Builder setAcsEpubTokenUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        acsEpubTokenUrl_ = value;
        onChanged();
        return this;
      }

      // optional string acsPdfTokenUrl = 14;
      private java.lang.Object acsPdfTokenUrl_ = "";
      /**
       * <code>optional string acsPdfTokenUrl = 14;</code>
       */
      public boolean hasAcsPdfTokenUrl() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional string acsPdfTokenUrl = 14;</code>
       */
      public java.lang.String getAcsPdfTokenUrl() {
        java.lang.Object ref = acsPdfTokenUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          acsPdfTokenUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string acsPdfTokenUrl = 14;</code>
       */
      public com.google.protobuf.ByteString
          getAcsPdfTokenUrlBytes() {
        java.lang.Object ref = acsPdfTokenUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          acsPdfTokenUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string acsPdfTokenUrl = 14;</code>
       */
      public Builder setAcsPdfTokenUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        acsPdfTokenUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string acsPdfTokenUrl = 14;</code>
       */
      public Builder clearAcsPdfTokenUrl() {
        bitField0_ = (bitField0_ & ~0x00000800);
        acsPdfTokenUrl_ = getDefaultInstance().getAcsPdfTokenUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string acsPdfTokenUrl = 14;</code>
       */
      public Builder setAcsPdfTokenUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        acsPdfTokenUrl_ = value;
        onChanged();
        return this;
      }

      // optional bool epubAvailable = 15;
      private boolean epubAvailable_ ;
      /**
       * <code>optional bool epubAvailable = 15;</code>
       */
      public boolean hasEpubAvailable() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional bool epubAvailable = 15;</code>
       */
      public boolean getEpubAvailable() {
        return epubAvailable_;
      }
      /**
       * <code>optional bool epubAvailable = 15;</code>
       */
      public Builder setEpubAvailable(boolean value) {
        bitField0_ |= 0x00001000;
        epubAvailable_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool epubAvailable = 15;</code>
       */
      public Builder clearEpubAvailable() {
        bitField0_ = (bitField0_ & ~0x00001000);
        epubAvailable_ = false;
        onChanged();
        return this;
      }

      // optional bool pdfAvailable = 16;
      private boolean pdfAvailable_ ;
      /**
       * <code>optional bool pdfAvailable = 16;</code>
       */
      public boolean hasPdfAvailable() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <code>optional bool pdfAvailable = 16;</code>
       */
      public boolean getPdfAvailable() {
        return pdfAvailable_;
      }
      /**
       * <code>optional bool pdfAvailable = 16;</code>
       */
      public Builder setPdfAvailable(boolean value) {
        bitField0_ |= 0x00002000;
        pdfAvailable_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool pdfAvailable = 16;</code>
       */
      public Builder clearPdfAvailable() {
        bitField0_ = (bitField0_ & ~0x00002000);
        pdfAvailable_ = false;
        onChanged();
        return this;
      }

      // optional string aboutTheAuthor = 17;
      private java.lang.Object aboutTheAuthor_ = "";
      /**
       * <code>optional string aboutTheAuthor = 17;</code>
       */
      public boolean hasAboutTheAuthor() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       * <code>optional string aboutTheAuthor = 17;</code>
       */
      public java.lang.String getAboutTheAuthor() {
        java.lang.Object ref = aboutTheAuthor_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          aboutTheAuthor_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string aboutTheAuthor = 17;</code>
       */
      public com.google.protobuf.ByteString
          getAboutTheAuthorBytes() {
        java.lang.Object ref = aboutTheAuthor_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          aboutTheAuthor_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string aboutTheAuthor = 17;</code>
       */
      public Builder setAboutTheAuthor(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00004000;
        aboutTheAuthor_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string aboutTheAuthor = 17;</code>
       */
      public Builder clearAboutTheAuthor() {
        bitField0_ = (bitField0_ & ~0x00004000);
        aboutTheAuthor_ = getDefaultInstance().getAboutTheAuthor();
        onChanged();
        return this;
      }
      /**
       * <code>optional string aboutTheAuthor = 17;</code>
       */
      public Builder setAboutTheAuthorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00004000;
        aboutTheAuthor_ = value;
        onChanged();
        return this;
      }

      // repeated group Identifier = 18 {
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier> identifier_ =
        java.util.Collections.emptyList();
      private void ensureIdentifierIsMutable() {
        if (!((bitField0_ & 0x00008000) == 0x00008000)) {
          identifier_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier>(identifier_);
          bitField0_ |= 0x00008000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.IdentifierOrBuilder> identifierBuilder_;

      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier> getIdentifierList() {
        if (identifierBuilder_ == null) {
          return java.util.Collections.unmodifiableList(identifier_);
        } else {
          return identifierBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public int getIdentifierCount() {
        if (identifierBuilder_ == null) {
          return identifier_.size();
        } else {
          return identifierBuilder_.getCount();
        }
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier getIdentifier(int index) {
        if (identifierBuilder_ == null) {
          return identifier_.get(index);
        } else {
          return identifierBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public Builder setIdentifier(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier value) {
        if (identifierBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIdentifierIsMutable();
          identifier_.set(index, value);
          onChanged();
        } else {
          identifierBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public Builder setIdentifier(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.Builder builderForValue) {
        if (identifierBuilder_ == null) {
          ensureIdentifierIsMutable();
          identifier_.set(index, builderForValue.build());
          onChanged();
        } else {
          identifierBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public Builder addIdentifier(com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier value) {
        if (identifierBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIdentifierIsMutable();
          identifier_.add(value);
          onChanged();
        } else {
          identifierBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public Builder addIdentifier(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier value) {
        if (identifierBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIdentifierIsMutable();
          identifier_.add(index, value);
          onChanged();
        } else {
          identifierBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public Builder addIdentifier(
          com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.Builder builderForValue) {
        if (identifierBuilder_ == null) {
          ensureIdentifierIsMutable();
          identifier_.add(builderForValue.build());
          onChanged();
        } else {
          identifierBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public Builder addIdentifier(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.Builder builderForValue) {
        if (identifierBuilder_ == null) {
          ensureIdentifierIsMutable();
          identifier_.add(index, builderForValue.build());
          onChanged();
        } else {
          identifierBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public Builder addAllIdentifier(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier> values) {
        if (identifierBuilder_ == null) {
          ensureIdentifierIsMutable();
          super.addAll(values, identifier_);
          onChanged();
        } else {
          identifierBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public Builder clearIdentifier() {
        if (identifierBuilder_ == null) {
          identifier_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
          onChanged();
        } else {
          identifierBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public Builder removeIdentifier(int index) {
        if (identifierBuilder_ == null) {
          ensureIdentifierIsMutable();
          identifier_.remove(index);
          onChanged();
        } else {
          identifierBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.Builder getIdentifierBuilder(
          int index) {
        return getIdentifierFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.IdentifierOrBuilder getIdentifierOrBuilder(
          int index) {
        if (identifierBuilder_ == null) {
          return identifier_.get(index);  } else {
          return identifierBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.IdentifierOrBuilder> 
           getIdentifierOrBuilderList() {
        if (identifierBuilder_ != null) {
          return identifierBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(identifier_);
        }
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.Builder addIdentifierBuilder() {
        return getIdentifierFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.getDefaultInstance());
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.Builder addIdentifierBuilder(
          int index) {
        return getIdentifierFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.getDefaultInstance());
      }
      /**
       * <code>repeated group Identifier = 18 { ... }</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.Builder> 
           getIdentifierBuilderList() {
        return getIdentifierFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.IdentifierOrBuilder> 
          getIdentifierFieldBuilder() {
        if (identifierBuilder_ == null) {
          identifierBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Identifier.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.IdentifierOrBuilder>(
                  identifier_,
                  ((bitField0_ & 0x00008000) == 0x00008000),
                  getParentForChildren(),
                  isClean());
          identifier_ = null;
        }
        return identifierBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:BookDetails)
    }

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

    // @@protoc_insertion_point(class_scope:BookDetails)
  }

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

    // optional string name = 1;
    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // optional string query = 2;
    /**
     * <code>optional string query = 2;</code>
     */
    boolean hasQuery();
    /**
     * <code>optional string query = 2;</code>
     */
    java.lang.String getQuery();
    /**
     * <code>optional string query = 2;</code>
     */
    com.google.protobuf.ByteString
        getQueryBytes();

    // optional string subjectId = 3;
    /**
     * <code>optional string subjectId = 3;</code>
     */
    boolean hasSubjectId();
    /**
     * <code>optional string subjectId = 3;</code>
     */
    java.lang.String getSubjectId();
    /**
     * <code>optional string subjectId = 3;</code>
     */
    com.google.protobuf.ByteString
        getSubjectIdBytes();
  }
  /**
   * Protobuf type {@code BookSubject}
   */
  public static final class BookSubject extends
      com.google.protobuf.GeneratedMessage
      implements BookSubjectOrBuilder {
    // Use BookSubject.newBuilder() to construct.
    private BookSubject(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private BookSubject(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public BookSubject getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private BookSubject(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              name_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              query_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              subjectId_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookSubject_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookSubject_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.class, com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string query = 2;
    public static final int QUERY_FIELD_NUMBER = 2;
    private java.lang.Object query_;
    /**
     * <code>optional string query = 2;</code>
     */
    public boolean hasQuery() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string query = 2;</code>
     */
    public java.lang.String getQuery() {
      java.lang.Object ref = query_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          query_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string query = 2;</code>
     */
    public com.google.protobuf.ByteString
        getQueryBytes() {
      java.lang.Object ref = query_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        query_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string subjectId = 3;
    public static final int SUBJECTID_FIELD_NUMBER = 3;
    private java.lang.Object subjectId_;
    /**
     * <code>optional string subjectId = 3;</code>
     */
    public boolean hasSubjectId() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string subjectId = 3;</code>
     */
    public java.lang.String getSubjectId() {
      java.lang.Object ref = subjectId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          subjectId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string subjectId = 3;</code>
     */
    public com.google.protobuf.ByteString
        getSubjectIdBytes() {
      java.lang.Object ref = subjectId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        subjectId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      name_ = "";
      query_ = "";
      subjectId_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

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

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getQueryBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getSubjectIdBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.BookSubject parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookSubject parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookSubject parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookSubject parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookSubject parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookSubject parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookSubject parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookSubject parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookSubject parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BookSubject parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.BookSubject prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code BookSubject}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.BookSubjectOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookSubject_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookSubject_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.class, com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        query_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        subjectId_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BookSubject_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BookSubject getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BookSubject build() {
        com.akdeniz.googleplaycrawler.GooglePlay.BookSubject result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BookSubject buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.BookSubject result = new com.akdeniz.googleplaycrawler.GooglePlay.BookSubject(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.query_ = query_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.subjectId_ = subjectId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.BookSubject) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.BookSubject)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.BookSubject other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.BookSubject.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasQuery()) {
          bitField0_ |= 0x00000002;
          query_ = other.query_;
          onChanged();
        }
        if (other.hasSubjectId()) {
          bitField0_ |= 0x00000004;
          subjectId_ = other.subjectId_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string name = 1;
      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      // optional string query = 2;
      private java.lang.Object query_ = "";
      /**
       * <code>optional string query = 2;</code>
       */
      public boolean hasQuery() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string query = 2;</code>
       */
      public java.lang.String getQuery() {
        java.lang.Object ref = query_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          query_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string query = 2;</code>
       */
      public com.google.protobuf.ByteString
          getQueryBytes() {
        java.lang.Object ref = query_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          query_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string query = 2;</code>
       */
      public Builder setQuery(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        query_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string query = 2;</code>
       */
      public Builder clearQuery() {
        bitField0_ = (bitField0_ & ~0x00000002);
        query_ = getDefaultInstance().getQuery();
        onChanged();
        return this;
      }
      /**
       * <code>optional string query = 2;</code>
       */
      public Builder setQueryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        query_ = value;
        onChanged();
        return this;
      }

      // optional string subjectId = 3;
      private java.lang.Object subjectId_ = "";
      /**
       * <code>optional string subjectId = 3;</code>
       */
      public boolean hasSubjectId() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string subjectId = 3;</code>
       */
      public java.lang.String getSubjectId() {
        java.lang.Object ref = subjectId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          subjectId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string subjectId = 3;</code>
       */
      public com.google.protobuf.ByteString
          getSubjectIdBytes() {
        java.lang.Object ref = subjectId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          subjectId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string subjectId = 3;</code>
       */
      public Builder setSubjectId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        subjectId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string subjectId = 3;</code>
       */
      public Builder clearSubjectId() {
        bitField0_ = (bitField0_ & ~0x00000004);
        subjectId_ = getDefaultInstance().getSubjectId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string subjectId = 3;</code>
       */
      public Builder setSubjectIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        subjectId_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:BookSubject)
    }

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

    // @@protoc_insertion_point(class_scope:BookSubject)
  }

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

    // optional string name = 1;
    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // optional string dataUrl = 3;
    /**
     * <code>optional string dataUrl = 3;</code>
     */
    boolean hasDataUrl();
    /**
     * <code>optional string dataUrl = 3;</code>
     */
    java.lang.String getDataUrl();
    /**
     * <code>optional string dataUrl = 3;</code>
     */
    com.google.protobuf.ByteString
        getDataUrlBytes();
  }
  /**
   * Protobuf type {@code BrowseLink}
   */
  public static final class BrowseLink extends
      com.google.protobuf.GeneratedMessage
      implements BrowseLinkOrBuilder {
    // Use BrowseLink.newBuilder() to construct.
    private BrowseLink(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private BrowseLink(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public BrowseLink getDefaultInstanceForType() {
      return defaultInstance;
    }

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

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BrowseLink_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.class, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string dataUrl = 3;
    public static final int DATAURL_FIELD_NUMBER = 3;
    private java.lang.Object dataUrl_;
    /**
     * <code>optional string dataUrl = 3;</code>
     */
    public boolean hasDataUrl() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string dataUrl = 3;</code>
     */
    public java.lang.String getDataUrl() {
      java.lang.Object ref = dataUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          dataUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string dataUrl = 3;</code>
     */
    public com.google.protobuf.ByteString
        getDataUrlBytes() {
      java.lang.Object ref = dataUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        dataUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

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

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getDataUrlBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code BrowseLink}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BrowseLink_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BrowseLink_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.class, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

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

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BrowseLink_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink build() {
        com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink result = new com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.dataUrl_ = dataUrl_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasDataUrl()) {
          bitField0_ |= 0x00000002;
          dataUrl_ = other.dataUrl_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string name = 1;
      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      // optional string dataUrl = 3;
      private java.lang.Object dataUrl_ = "";
      /**
       * <code>optional string dataUrl = 3;</code>
       */
      public boolean hasDataUrl() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string dataUrl = 3;</code>
       */
      public java.lang.String getDataUrl() {
        java.lang.Object ref = dataUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          dataUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string dataUrl = 3;</code>
       */
      public com.google.protobuf.ByteString
          getDataUrlBytes() {
        java.lang.Object ref = dataUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          dataUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string dataUrl = 3;</code>
       */
      public Builder setDataUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        dataUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string dataUrl = 3;</code>
       */
      public Builder clearDataUrl() {
        bitField0_ = (bitField0_ & ~0x00000002);
        dataUrl_ = getDefaultInstance().getDataUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string dataUrl = 3;</code>
       */
      public Builder setDataUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        dataUrl_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:BrowseLink)
    }

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

    // @@protoc_insertion_point(class_scope:BrowseLink)
  }

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

    // optional string contentsUrl = 1;
    /**
     * <code>optional string contentsUrl = 1;</code>
     */
    boolean hasContentsUrl();
    /**
     * <code>optional string contentsUrl = 1;</code>
     */
    java.lang.String getContentsUrl();
    /**
     * <code>optional string contentsUrl = 1;</code>
     */
    com.google.protobuf.ByteString
        getContentsUrlBytes();

    // optional string promoUrl = 2;
    /**
     * <code>optional string promoUrl = 2;</code>
     */
    boolean hasPromoUrl();
    /**
     * <code>optional string promoUrl = 2;</code>
     */
    java.lang.String getPromoUrl();
    /**
     * <code>optional string promoUrl = 2;</code>
     */
    com.google.protobuf.ByteString
        getPromoUrlBytes();

    // repeated .BrowseLink category = 3;
    /**
     * <code>repeated .BrowseLink category = 3;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink> 
        getCategoryList();
    /**
     * <code>repeated .BrowseLink category = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink getCategory(int index);
    /**
     * <code>repeated .BrowseLink category = 3;</code>
     */
    int getCategoryCount();
    /**
     * <code>repeated .BrowseLink category = 3;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder> 
        getCategoryOrBuilderList();
    /**
     * <code>repeated .BrowseLink category = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder getCategoryOrBuilder(
        int index);

    // repeated .BrowseLink breadcrumb = 4;
    /**
     * <code>repeated .BrowseLink breadcrumb = 4;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink> 
        getBreadcrumbList();
    /**
     * <code>repeated .BrowseLink breadcrumb = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink getBreadcrumb(int index);
    /**
     * <code>repeated .BrowseLink breadcrumb = 4;</code>
     */
    int getBreadcrumbCount();
    /**
     * <code>repeated .BrowseLink breadcrumb = 4;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder> 
        getBreadcrumbOrBuilderList();
    /**
     * <code>repeated .BrowseLink breadcrumb = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder getBreadcrumbOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code BrowseResponse}
   */
  public static final class BrowseResponse extends
      com.google.protobuf.GeneratedMessage
      implements BrowseResponseOrBuilder {
    // Use BrowseResponse.newBuilder() to construct.
    private BrowseResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private BrowseResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public BrowseResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private BrowseResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              contentsUrl_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              promoUrl_ = input.readBytes();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                category_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink>();
                mutable_bitField0_ |= 0x00000004;
              }
              category_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.PARSER, extensionRegistry));
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                breadcrumb_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink>();
                mutable_bitField0_ |= 0x00000008;
              }
              breadcrumb_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          category_ = java.util.Collections.unmodifiableList(category_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          breadcrumb_ = java.util.Collections.unmodifiableList(breadcrumb_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BrowseResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BrowseResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string contentsUrl = 1;
    public static final int CONTENTSURL_FIELD_NUMBER = 1;
    private java.lang.Object contentsUrl_;
    /**
     * <code>optional string contentsUrl = 1;</code>
     */
    public boolean hasContentsUrl() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string contentsUrl = 1;</code>
     */
    public java.lang.String getContentsUrl() {
      java.lang.Object ref = contentsUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          contentsUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string contentsUrl = 1;</code>
     */
    public com.google.protobuf.ByteString
        getContentsUrlBytes() {
      java.lang.Object ref = contentsUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        contentsUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string promoUrl = 2;
    public static final int PROMOURL_FIELD_NUMBER = 2;
    private java.lang.Object promoUrl_;
    /**
     * <code>optional string promoUrl = 2;</code>
     */
    public boolean hasPromoUrl() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string promoUrl = 2;</code>
     */
    public java.lang.String getPromoUrl() {
      java.lang.Object ref = promoUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          promoUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string promoUrl = 2;</code>
     */
    public com.google.protobuf.ByteString
        getPromoUrlBytes() {
      java.lang.Object ref = promoUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        promoUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated .BrowseLink category = 3;
    public static final int CATEGORY_FIELD_NUMBER = 3;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink> category_;
    /**
     * <code>repeated .BrowseLink category = 3;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink> getCategoryList() {
      return category_;
    }
    /**
     * <code>repeated .BrowseLink category = 3;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder> 
        getCategoryOrBuilderList() {
      return category_;
    }
    /**
     * <code>repeated .BrowseLink category = 3;</code>
     */
    public int getCategoryCount() {
      return category_.size();
    }
    /**
     * <code>repeated .BrowseLink category = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink getCategory(int index) {
      return category_.get(index);
    }
    /**
     * <code>repeated .BrowseLink category = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder getCategoryOrBuilder(
        int index) {
      return category_.get(index);
    }

    // repeated .BrowseLink breadcrumb = 4;
    public static final int BREADCRUMB_FIELD_NUMBER = 4;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink> breadcrumb_;
    /**
     * <code>repeated .BrowseLink breadcrumb = 4;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink> getBreadcrumbList() {
      return breadcrumb_;
    }
    /**
     * <code>repeated .BrowseLink breadcrumb = 4;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder> 
        getBreadcrumbOrBuilderList() {
      return breadcrumb_;
    }
    /**
     * <code>repeated .BrowseLink breadcrumb = 4;</code>
     */
    public int getBreadcrumbCount() {
      return breadcrumb_.size();
    }
    /**
     * <code>repeated .BrowseLink breadcrumb = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink getBreadcrumb(int index) {
      return breadcrumb_.get(index);
    }
    /**
     * <code>repeated .BrowseLink breadcrumb = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder getBreadcrumbOrBuilder(
        int index) {
      return breadcrumb_.get(index);
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getContentsUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getPromoUrlBytes());
      }
      for (int i = 0; i < category_.size(); i++) {
        output.writeMessage(3, category_.get(i));
      }
      for (int i = 0; i < breadcrumb_.size(); i++) {
        output.writeMessage(4, breadcrumb_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getContentsUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getPromoUrlBytes());
      }
      for (int i = 0; i < category_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, category_.get(i));
      }
      for (int i = 0; i < breadcrumb_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, breadcrumb_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code BrowseResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BrowseResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BrowseResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        contentsUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        promoUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (categoryBuilder_ == null) {
          category_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          categoryBuilder_.clear();
        }
        if (breadcrumbBuilder_ == null) {
          breadcrumb_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          breadcrumbBuilder_.clear();
        }
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BrowseResponse_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse build() {
        com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse result = new com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.contentsUrl_ = contentsUrl_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.promoUrl_ = promoUrl_;
        if (categoryBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            category_ = java.util.Collections.unmodifiableList(category_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.category_ = category_;
        } else {
          result.category_ = categoryBuilder_.build();
        }
        if (breadcrumbBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            breadcrumb_ = java.util.Collections.unmodifiableList(breadcrumb_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.breadcrumb_ = breadcrumb_;
        } else {
          result.breadcrumb_ = breadcrumbBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.getDefaultInstance()) return this;
        if (other.hasContentsUrl()) {
          bitField0_ |= 0x00000001;
          contentsUrl_ = other.contentsUrl_;
          onChanged();
        }
        if (other.hasPromoUrl()) {
          bitField0_ |= 0x00000002;
          promoUrl_ = other.promoUrl_;
          onChanged();
        }
        if (categoryBuilder_ == null) {
          if (!other.category_.isEmpty()) {
            if (category_.isEmpty()) {
              category_ = other.category_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureCategoryIsMutable();
              category_.addAll(other.category_);
            }
            onChanged();
          }
        } else {
          if (!other.category_.isEmpty()) {
            if (categoryBuilder_.isEmpty()) {
              categoryBuilder_.dispose();
              categoryBuilder_ = null;
              category_ = other.category_;
              bitField0_ = (bitField0_ & ~0x00000004);
              categoryBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getCategoryFieldBuilder() : null;
            } else {
              categoryBuilder_.addAllMessages(other.category_);
            }
          }
        }
        if (breadcrumbBuilder_ == null) {
          if (!other.breadcrumb_.isEmpty()) {
            if (breadcrumb_.isEmpty()) {
              breadcrumb_ = other.breadcrumb_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureBreadcrumbIsMutable();
              breadcrumb_.addAll(other.breadcrumb_);
            }
            onChanged();
          }
        } else {
          if (!other.breadcrumb_.isEmpty()) {
            if (breadcrumbBuilder_.isEmpty()) {
              breadcrumbBuilder_.dispose();
              breadcrumbBuilder_ = null;
              breadcrumb_ = other.breadcrumb_;
              bitField0_ = (bitField0_ & ~0x00000008);
              breadcrumbBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getBreadcrumbFieldBuilder() : null;
            } else {
              breadcrumbBuilder_.addAllMessages(other.breadcrumb_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string contentsUrl = 1;
      private java.lang.Object contentsUrl_ = "";
      /**
       * <code>optional string contentsUrl = 1;</code>
       */
      public boolean hasContentsUrl() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string contentsUrl = 1;</code>
       */
      public java.lang.String getContentsUrl() {
        java.lang.Object ref = contentsUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          contentsUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string contentsUrl = 1;</code>
       */
      public com.google.protobuf.ByteString
          getContentsUrlBytes() {
        java.lang.Object ref = contentsUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          contentsUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string contentsUrl = 1;</code>
       */
      public Builder setContentsUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        contentsUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string contentsUrl = 1;</code>
       */
      public Builder clearContentsUrl() {
        bitField0_ = (bitField0_ & ~0x00000001);
        contentsUrl_ = getDefaultInstance().getContentsUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string contentsUrl = 1;</code>
       */
      public Builder setContentsUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        contentsUrl_ = value;
        onChanged();
        return this;
      }

      // optional string promoUrl = 2;
      private java.lang.Object promoUrl_ = "";
      /**
       * <code>optional string promoUrl = 2;</code>
       */
      public boolean hasPromoUrl() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string promoUrl = 2;</code>
       */
      public java.lang.String getPromoUrl() {
        java.lang.Object ref = promoUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          promoUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string promoUrl = 2;</code>
       */
      public com.google.protobuf.ByteString
          getPromoUrlBytes() {
        java.lang.Object ref = promoUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          promoUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string promoUrl = 2;</code>
       */
      public Builder setPromoUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        promoUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string promoUrl = 2;</code>
       */
      public Builder clearPromoUrl() {
        bitField0_ = (bitField0_ & ~0x00000002);
        promoUrl_ = getDefaultInstance().getPromoUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string promoUrl = 2;</code>
       */
      public Builder setPromoUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        promoUrl_ = value;
        onChanged();
        return this;
      }

      // repeated .BrowseLink category = 3;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink> category_ =
        java.util.Collections.emptyList();
      private void ensureCategoryIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          category_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink>(category_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder> categoryBuilder_;

      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink> getCategoryList() {
        if (categoryBuilder_ == null) {
          return java.util.Collections.unmodifiableList(category_);
        } else {
          return categoryBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public int getCategoryCount() {
        if (categoryBuilder_ == null) {
          return category_.size();
        } else {
          return categoryBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink getCategory(int index) {
        if (categoryBuilder_ == null) {
          return category_.get(index);
        } else {
          return categoryBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public Builder setCategory(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink value) {
        if (categoryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCategoryIsMutable();
          category_.set(index, value);
          onChanged();
        } else {
          categoryBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public Builder setCategory(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder builderForValue) {
        if (categoryBuilder_ == null) {
          ensureCategoryIsMutable();
          category_.set(index, builderForValue.build());
          onChanged();
        } else {
          categoryBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public Builder addCategory(com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink value) {
        if (categoryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCategoryIsMutable();
          category_.add(value);
          onChanged();
        } else {
          categoryBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public Builder addCategory(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink value) {
        if (categoryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCategoryIsMutable();
          category_.add(index, value);
          onChanged();
        } else {
          categoryBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public Builder addCategory(
          com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder builderForValue) {
        if (categoryBuilder_ == null) {
          ensureCategoryIsMutable();
          category_.add(builderForValue.build());
          onChanged();
        } else {
          categoryBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public Builder addCategory(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder builderForValue) {
        if (categoryBuilder_ == null) {
          ensureCategoryIsMutable();
          category_.add(index, builderForValue.build());
          onChanged();
        } else {
          categoryBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public Builder addAllCategory(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink> values) {
        if (categoryBuilder_ == null) {
          ensureCategoryIsMutable();
          super.addAll(values, category_);
          onChanged();
        } else {
          categoryBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public Builder clearCategory() {
        if (categoryBuilder_ == null) {
          category_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          categoryBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public Builder removeCategory(int index) {
        if (categoryBuilder_ == null) {
          ensureCategoryIsMutable();
          category_.remove(index);
          onChanged();
        } else {
          categoryBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder getCategoryBuilder(
          int index) {
        return getCategoryFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder getCategoryOrBuilder(
          int index) {
        if (categoryBuilder_ == null) {
          return category_.get(index);  } else {
          return categoryBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder> 
           getCategoryOrBuilderList() {
        if (categoryBuilder_ != null) {
          return categoryBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(category_);
        }
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder addCategoryBuilder() {
        return getCategoryFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.getDefaultInstance());
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder addCategoryBuilder(
          int index) {
        return getCategoryFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.getDefaultInstance());
      }
      /**
       * <code>repeated .BrowseLink category = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder> 
           getCategoryBuilderList() {
        return getCategoryFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder> 
          getCategoryFieldBuilder() {
        if (categoryBuilder_ == null) {
          categoryBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder>(
                  category_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          category_ = null;
        }
        return categoryBuilder_;
      }

      // repeated .BrowseLink breadcrumb = 4;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink> breadcrumb_ =
        java.util.Collections.emptyList();
      private void ensureBreadcrumbIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          breadcrumb_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink>(breadcrumb_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder> breadcrumbBuilder_;

      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink> getBreadcrumbList() {
        if (breadcrumbBuilder_ == null) {
          return java.util.Collections.unmodifiableList(breadcrumb_);
        } else {
          return breadcrumbBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public int getBreadcrumbCount() {
        if (breadcrumbBuilder_ == null) {
          return breadcrumb_.size();
        } else {
          return breadcrumbBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink getBreadcrumb(int index) {
        if (breadcrumbBuilder_ == null) {
          return breadcrumb_.get(index);
        } else {
          return breadcrumbBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public Builder setBreadcrumb(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink value) {
        if (breadcrumbBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBreadcrumbIsMutable();
          breadcrumb_.set(index, value);
          onChanged();
        } else {
          breadcrumbBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public Builder setBreadcrumb(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder builderForValue) {
        if (breadcrumbBuilder_ == null) {
          ensureBreadcrumbIsMutable();
          breadcrumb_.set(index, builderForValue.build());
          onChanged();
        } else {
          breadcrumbBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public Builder addBreadcrumb(com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink value) {
        if (breadcrumbBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBreadcrumbIsMutable();
          breadcrumb_.add(value);
          onChanged();
        } else {
          breadcrumbBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public Builder addBreadcrumb(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink value) {
        if (breadcrumbBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBreadcrumbIsMutable();
          breadcrumb_.add(index, value);
          onChanged();
        } else {
          breadcrumbBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public Builder addBreadcrumb(
          com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder builderForValue) {
        if (breadcrumbBuilder_ == null) {
          ensureBreadcrumbIsMutable();
          breadcrumb_.add(builderForValue.build());
          onChanged();
        } else {
          breadcrumbBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public Builder addBreadcrumb(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder builderForValue) {
        if (breadcrumbBuilder_ == null) {
          ensureBreadcrumbIsMutable();
          breadcrumb_.add(index, builderForValue.build());
          onChanged();
        } else {
          breadcrumbBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public Builder addAllBreadcrumb(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink> values) {
        if (breadcrumbBuilder_ == null) {
          ensureBreadcrumbIsMutable();
          super.addAll(values, breadcrumb_);
          onChanged();
        } else {
          breadcrumbBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public Builder clearBreadcrumb() {
        if (breadcrumbBuilder_ == null) {
          breadcrumb_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          breadcrumbBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public Builder removeBreadcrumb(int index) {
        if (breadcrumbBuilder_ == null) {
          ensureBreadcrumbIsMutable();
          breadcrumb_.remove(index);
          onChanged();
        } else {
          breadcrumbBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder getBreadcrumbBuilder(
          int index) {
        return getBreadcrumbFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder getBreadcrumbOrBuilder(
          int index) {
        if (breadcrumbBuilder_ == null) {
          return breadcrumb_.get(index);  } else {
          return breadcrumbBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder> 
           getBreadcrumbOrBuilderList() {
        if (breadcrumbBuilder_ != null) {
          return breadcrumbBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(breadcrumb_);
        }
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder addBreadcrumbBuilder() {
        return getBreadcrumbFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.getDefaultInstance());
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder addBreadcrumbBuilder(
          int index) {
        return getBreadcrumbFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.getDefaultInstance());
      }
      /**
       * <code>repeated .BrowseLink breadcrumb = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder> 
           getBreadcrumbBuilderList() {
        return getBreadcrumbFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder> 
          getBreadcrumbFieldBuilder() {
        if (breadcrumbBuilder_ == null) {
          breadcrumbBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLink.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BrowseLinkOrBuilder>(
                  breadcrumb_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          breadcrumb_ = null;
        }
        return breadcrumbBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:BrowseResponse)
    }

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

    // @@protoc_insertion_point(class_scope:BrowseResponse)
  }

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

    // optional string responseAddressParam = 1;
    /**
     * <code>optional string responseAddressParam = 1;</code>
     */
    boolean hasResponseAddressParam();
    /**
     * <code>optional string responseAddressParam = 1;</code>
     */
    java.lang.String getResponseAddressParam();
    /**
     * <code>optional string responseAddressParam = 1;</code>
     */
    com.google.protobuf.ByteString
        getResponseAddressParamBytes();

    // optional string responseCheckboxesParam = 2;
    /**
     * <code>optional string responseCheckboxesParam = 2;</code>
     */
    boolean hasResponseCheckboxesParam();
    /**
     * <code>optional string responseCheckboxesParam = 2;</code>
     */
    java.lang.String getResponseCheckboxesParam();
    /**
     * <code>optional string responseCheckboxesParam = 2;</code>
     */
    com.google.protobuf.ByteString
        getResponseCheckboxesParamBytes();

    // optional string title = 3;
    /**
     * <code>optional string title = 3;</code>
     */
    boolean hasTitle();
    /**
     * <code>optional string title = 3;</code>
     */
    java.lang.String getTitle();
    /**
     * <code>optional string title = 3;</code>
     */
    com.google.protobuf.ByteString
        getTitleBytes();

    // optional string descriptionHtml = 4;
    /**
     * <code>optional string descriptionHtml = 4;</code>
     */
    boolean hasDescriptionHtml();
    /**
     * <code>optional string descriptionHtml = 4;</code>
     */
    java.lang.String getDescriptionHtml();
    /**
     * <code>optional string descriptionHtml = 4;</code>
     */
    com.google.protobuf.ByteString
        getDescriptionHtmlBytes();

    // repeated .FormCheckbox checkbox = 5;
    /**
     * <code>repeated .FormCheckbox checkbox = 5;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox> 
        getCheckboxList();
    /**
     * <code>repeated .FormCheckbox checkbox = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox getCheckbox(int index);
    /**
     * <code>repeated .FormCheckbox checkbox = 5;</code>
     */
    int getCheckboxCount();
    /**
     * <code>repeated .FormCheckbox checkbox = 5;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.FormCheckboxOrBuilder> 
        getCheckboxOrBuilderList();
    /**
     * <code>repeated .FormCheckbox checkbox = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.FormCheckboxOrBuilder getCheckboxOrBuilder(
        int index);

    // optional .Address address = 6;
    /**
     * <code>optional .Address address = 6;</code>
     */
    boolean hasAddress();
    /**
     * <code>optional .Address address = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Address getAddress();
    /**
     * <code>optional .Address address = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AddressOrBuilder getAddressOrBuilder();

    // repeated .InputValidationError errorInputField = 7;
    /**
     * <code>repeated .InputValidationError errorInputField = 7;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError> 
        getErrorInputFieldList();
    /**
     * <code>repeated .InputValidationError errorInputField = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError getErrorInputField(int index);
    /**
     * <code>repeated .InputValidationError errorInputField = 7;</code>
     */
    int getErrorInputFieldCount();
    /**
     * <code>repeated .InputValidationError errorInputField = 7;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.InputValidationErrorOrBuilder> 
        getErrorInputFieldOrBuilderList();
    /**
     * <code>repeated .InputValidationError errorInputField = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.InputValidationErrorOrBuilder getErrorInputFieldOrBuilder(
        int index);

    // optional string errorHtml = 8;
    /**
     * <code>optional string errorHtml = 8;</code>
     */
    boolean hasErrorHtml();
    /**
     * <code>optional string errorHtml = 8;</code>
     */
    java.lang.String getErrorHtml();
    /**
     * <code>optional string errorHtml = 8;</code>
     */
    com.google.protobuf.ByteString
        getErrorHtmlBytes();

    // repeated int32 requiredField = 9;
    /**
     * <code>repeated int32 requiredField = 9;</code>
     */
    java.util.List<java.lang.Integer> getRequiredFieldList();
    /**
     * <code>repeated int32 requiredField = 9;</code>
     */
    int getRequiredFieldCount();
    /**
     * <code>repeated int32 requiredField = 9;</code>
     */
    int getRequiredField(int index);
  }
  /**
   * Protobuf type {@code AddressChallenge}
   */
  public static final class AddressChallenge extends
      com.google.protobuf.GeneratedMessage
      implements AddressChallengeOrBuilder {
    // Use AddressChallenge.newBuilder() to construct.
    private AddressChallenge(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AddressChallenge(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public AddressChallenge getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AddressChallenge(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              responseAddressParam_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              responseCheckboxesParam_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              title_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              descriptionHtml_ = input.readBytes();
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                checkbox_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox>();
                mutable_bitField0_ |= 0x00000010;
              }
              checkbox_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.PARSER, extensionRegistry));
              break;
            }
            case 50: {
              com.akdeniz.googleplaycrawler.GooglePlay.Address.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = address_.toBuilder();
              }
              address_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Address.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(address_);
                address_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                errorInputField_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError>();
                mutable_bitField0_ |= 0x00000040;
              }
              errorInputField_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.PARSER, extensionRegistry));
              break;
            }
            case 66: {
              bitField0_ |= 0x00000020;
              errorHtml_ = input.readBytes();
              break;
            }
            case 72: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                requiredField_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000100;
              }
              requiredField_.add(input.readInt32());
              break;
            }
            case 74: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100) && input.getBytesUntilLimit() > 0) {
                requiredField_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000100;
              }
              while (input.getBytesUntilLimit() > 0) {
                requiredField_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          checkbox_ = java.util.Collections.unmodifiableList(checkbox_);
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          errorInputField_ = java.util.Collections.unmodifiableList(errorInputField_);
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          requiredField_ = java.util.Collections.unmodifiableList(requiredField_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AddressChallenge_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AddressChallenge_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.class, com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string responseAddressParam = 1;
    public static final int RESPONSEADDRESSPARAM_FIELD_NUMBER = 1;
    private java.lang.Object responseAddressParam_;
    /**
     * <code>optional string responseAddressParam = 1;</code>
     */
    public boolean hasResponseAddressParam() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string responseAddressParam = 1;</code>
     */
    public java.lang.String getResponseAddressParam() {
      java.lang.Object ref = responseAddressParam_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          responseAddressParam_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string responseAddressParam = 1;</code>
     */
    public com.google.protobuf.ByteString
        getResponseAddressParamBytes() {
      java.lang.Object ref = responseAddressParam_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        responseAddressParam_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string responseCheckboxesParam = 2;
    public static final int RESPONSECHECKBOXESPARAM_FIELD_NUMBER = 2;
    private java.lang.Object responseCheckboxesParam_;
    /**
     * <code>optional string responseCheckboxesParam = 2;</code>
     */
    public boolean hasResponseCheckboxesParam() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string responseCheckboxesParam = 2;</code>
     */
    public java.lang.String getResponseCheckboxesParam() {
      java.lang.Object ref = responseCheckboxesParam_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          responseCheckboxesParam_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string responseCheckboxesParam = 2;</code>
     */
    public com.google.protobuf.ByteString
        getResponseCheckboxesParamBytes() {
      java.lang.Object ref = responseCheckboxesParam_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        responseCheckboxesParam_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string title = 3;
    public static final int TITLE_FIELD_NUMBER = 3;
    private java.lang.Object title_;
    /**
     * <code>optional string title = 3;</code>
     */
    public boolean hasTitle() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string title = 3;</code>
     */
    public java.lang.String getTitle() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          title_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string title = 3;</code>
     */
    public com.google.protobuf.ByteString
        getTitleBytes() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        title_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string descriptionHtml = 4;
    public static final int DESCRIPTIONHTML_FIELD_NUMBER = 4;
    private java.lang.Object descriptionHtml_;
    /**
     * <code>optional string descriptionHtml = 4;</code>
     */
    public boolean hasDescriptionHtml() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string descriptionHtml = 4;</code>
     */
    public java.lang.String getDescriptionHtml() {
      java.lang.Object ref = descriptionHtml_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          descriptionHtml_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string descriptionHtml = 4;</code>
     */
    public com.google.protobuf.ByteString
        getDescriptionHtmlBytes() {
      java.lang.Object ref = descriptionHtml_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        descriptionHtml_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated .FormCheckbox checkbox = 5;
    public static final int CHECKBOX_FIELD_NUMBER = 5;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox> checkbox_;
    /**
     * <code>repeated .FormCheckbox checkbox = 5;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox> getCheckboxList() {
      return checkbox_;
    }
    /**
     * <code>repeated .FormCheckbox checkbox = 5;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.FormCheckboxOrBuilder> 
        getCheckboxOrBuilderList() {
      return checkbox_;
    }
    /**
     * <code>repeated .FormCheckbox checkbox = 5;</code>
     */
    public int getCheckboxCount() {
      return checkbox_.size();
    }
    /**
     * <code>repeated .FormCheckbox checkbox = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox getCheckbox(int index) {
      return checkbox_.get(index);
    }
    /**
     * <code>repeated .FormCheckbox checkbox = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.FormCheckboxOrBuilder getCheckboxOrBuilder(
        int index) {
      return checkbox_.get(index);
    }

    // optional .Address address = 6;
    public static final int ADDRESS_FIELD_NUMBER = 6;
    private com.akdeniz.googleplaycrawler.GooglePlay.Address address_;
    /**
     * <code>optional .Address address = 6;</code>
     */
    public boolean hasAddress() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional .Address address = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Address getAddress() {
      return address_;
    }
    /**
     * <code>optional .Address address = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AddressOrBuilder getAddressOrBuilder() {
      return address_;
    }

    // repeated .InputValidationError errorInputField = 7;
    public static final int ERRORINPUTFIELD_FIELD_NUMBER = 7;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError> errorInputField_;
    /**
     * <code>repeated .InputValidationError errorInputField = 7;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError> getErrorInputFieldList() {
      return errorInputField_;
    }
    /**
     * <code>repeated .InputValidationError errorInputField = 7;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.InputValidationErrorOrBuilder> 
        getErrorInputFieldOrBuilderList() {
      return errorInputField_;
    }
    /**
     * <code>repeated .InputValidationError errorInputField = 7;</code>
     */
    public int getErrorInputFieldCount() {
      return errorInputField_.size();
    }
    /**
     * <code>repeated .InputValidationError errorInputField = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError getErrorInputField(int index) {
      return errorInputField_.get(index);
    }
    /**
     * <code>repeated .InputValidationError errorInputField = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.InputValidationErrorOrBuilder getErrorInputFieldOrBuilder(
        int index) {
      return errorInputField_.get(index);
    }

    // optional string errorHtml = 8;
    public static final int ERRORHTML_FIELD_NUMBER = 8;
    private java.lang.Object errorHtml_;
    /**
     * <code>optional string errorHtml = 8;</code>
     */
    public boolean hasErrorHtml() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string errorHtml = 8;</code>
     */
    public java.lang.String getErrorHtml() {
      java.lang.Object ref = errorHtml_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          errorHtml_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string errorHtml = 8;</code>
     */
    public com.google.protobuf.ByteString
        getErrorHtmlBytes() {
      java.lang.Object ref = errorHtml_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        errorHtml_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated int32 requiredField = 9;
    public static final int REQUIREDFIELD_FIELD_NUMBER = 9;
    private java.util.List<java.lang.Integer> requiredField_;
    /**
     * <code>repeated int32 requiredField = 9;</code>
     */
    public java.util.List<java.lang.Integer>
        getRequiredFieldList() {
      return requiredField_;
    }
    /**
     * <code>repeated int32 requiredField = 9;</code>
     */
    public int getRequiredFieldCount() {
      return requiredField_.size();
    }
    /**
     * <code>repeated int32 requiredField = 9;</code>
     */
    public int getRequiredField(int index) {
      return requiredField_.get(index);
    }

    private void initFields() {
      responseAddressParam_ = "";
      responseCheckboxesParam_ = "";
      title_ = "";
      descriptionHtml_ = "";
      checkbox_ = java.util.Collections.emptyList();
      address_ = com.akdeniz.googleplaycrawler.GooglePlay.Address.getDefaultInstance();
      errorInputField_ = java.util.Collections.emptyList();
      errorHtml_ = "";
      requiredField_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getResponseAddressParamBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getResponseCheckboxesParamBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getTitleBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getDescriptionHtmlBytes());
      }
      for (int i = 0; i < checkbox_.size(); i++) {
        output.writeMessage(5, checkbox_.get(i));
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(6, address_);
      }
      for (int i = 0; i < errorInputField_.size(); i++) {
        output.writeMessage(7, errorInputField_.get(i));
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(8, getErrorHtmlBytes());
      }
      for (int i = 0; i < requiredField_.size(); i++) {
        output.writeInt32(9, requiredField_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getResponseAddressParamBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getResponseCheckboxesParamBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getTitleBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getDescriptionHtmlBytes());
      }
      for (int i = 0; i < checkbox_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, checkbox_.get(i));
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, address_);
      }
      for (int i = 0; i < errorInputField_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, errorInputField_.get(i));
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getErrorHtmlBytes());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < requiredField_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(requiredField_.get(i));
        }
        size += dataSize;
        size += 1 * getRequiredFieldList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AddressChallenge}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AddressChallengeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AddressChallenge_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AddressChallenge_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.class, com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        responseAddressParam_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        responseCheckboxesParam_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        title_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        descriptionHtml_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        if (checkboxBuilder_ == null) {
          checkbox_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          checkboxBuilder_.clear();
        }
        if (addressBuilder_ == null) {
          address_ = com.akdeniz.googleplaycrawler.GooglePlay.Address.getDefaultInstance();
        } else {
          addressBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (errorInputFieldBuilder_ == null) {
          errorInputField_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          errorInputFieldBuilder_.clear();
        }
        errorHtml_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        requiredField_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AddressChallenge_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge result = new com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.responseAddressParam_ = responseAddressParam_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.responseCheckboxesParam_ = responseCheckboxesParam_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.title_ = title_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.descriptionHtml_ = descriptionHtml_;
        if (checkboxBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            checkbox_ = java.util.Collections.unmodifiableList(checkbox_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.checkbox_ = checkbox_;
        } else {
          result.checkbox_ = checkboxBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000010;
        }
        if (addressBuilder_ == null) {
          result.address_ = address_;
        } else {
          result.address_ = addressBuilder_.build();
        }
        if (errorInputFieldBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            errorInputField_ = java.util.Collections.unmodifiableList(errorInputField_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.errorInputField_ = errorInputField_;
        } else {
          result.errorInputField_ = errorInputFieldBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000020;
        }
        result.errorHtml_ = errorHtml_;
        if (((bitField0_ & 0x00000100) == 0x00000100)) {
          requiredField_ = java.util.Collections.unmodifiableList(requiredField_);
          bitField0_ = (bitField0_ & ~0x00000100);
        }
        result.requiredField_ = requiredField_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.getDefaultInstance()) return this;
        if (other.hasResponseAddressParam()) {
          bitField0_ |= 0x00000001;
          responseAddressParam_ = other.responseAddressParam_;
          onChanged();
        }
        if (other.hasResponseCheckboxesParam()) {
          bitField0_ |= 0x00000002;
          responseCheckboxesParam_ = other.responseCheckboxesParam_;
          onChanged();
        }
        if (other.hasTitle()) {
          bitField0_ |= 0x00000004;
          title_ = other.title_;
          onChanged();
        }
        if (other.hasDescriptionHtml()) {
          bitField0_ |= 0x00000008;
          descriptionHtml_ = other.descriptionHtml_;
          onChanged();
        }
        if (checkboxBuilder_ == null) {
          if (!other.checkbox_.isEmpty()) {
            if (checkbox_.isEmpty()) {
              checkbox_ = other.checkbox_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureCheckboxIsMutable();
              checkbox_.addAll(other.checkbox_);
            }
            onChanged();
          }
        } else {
          if (!other.checkbox_.isEmpty()) {
            if (checkboxBuilder_.isEmpty()) {
              checkboxBuilder_.dispose();
              checkboxBuilder_ = null;
              checkbox_ = other.checkbox_;
              bitField0_ = (bitField0_ & ~0x00000010);
              checkboxBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getCheckboxFieldBuilder() : null;
            } else {
              checkboxBuilder_.addAllMessages(other.checkbox_);
            }
          }
        }
        if (other.hasAddress()) {
          mergeAddress(other.getAddress());
        }
        if (errorInputFieldBuilder_ == null) {
          if (!other.errorInputField_.isEmpty()) {
            if (errorInputField_.isEmpty()) {
              errorInputField_ = other.errorInputField_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureErrorInputFieldIsMutable();
              errorInputField_.addAll(other.errorInputField_);
            }
            onChanged();
          }
        } else {
          if (!other.errorInputField_.isEmpty()) {
            if (errorInputFieldBuilder_.isEmpty()) {
              errorInputFieldBuilder_.dispose();
              errorInputFieldBuilder_ = null;
              errorInputField_ = other.errorInputField_;
              bitField0_ = (bitField0_ & ~0x00000040);
              errorInputFieldBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getErrorInputFieldFieldBuilder() : null;
            } else {
              errorInputFieldBuilder_.addAllMessages(other.errorInputField_);
            }
          }
        }
        if (other.hasErrorHtml()) {
          bitField0_ |= 0x00000080;
          errorHtml_ = other.errorHtml_;
          onChanged();
        }
        if (!other.requiredField_.isEmpty()) {
          if (requiredField_.isEmpty()) {
            requiredField_ = other.requiredField_;
            bitField0_ = (bitField0_ & ~0x00000100);
          } else {
            ensureRequiredFieldIsMutable();
            requiredField_.addAll(other.requiredField_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string responseAddressParam = 1;
      private java.lang.Object responseAddressParam_ = "";
      /**
       * <code>optional string responseAddressParam = 1;</code>
       */
      public boolean hasResponseAddressParam() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string responseAddressParam = 1;</code>
       */
      public java.lang.String getResponseAddressParam() {
        java.lang.Object ref = responseAddressParam_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          responseAddressParam_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string responseAddressParam = 1;</code>
       */
      public com.google.protobuf.ByteString
          getResponseAddressParamBytes() {
        java.lang.Object ref = responseAddressParam_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          responseAddressParam_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string responseAddressParam = 1;</code>
       */
      public Builder setResponseAddressParam(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        responseAddressParam_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string responseAddressParam = 1;</code>
       */
      public Builder clearResponseAddressParam() {
        bitField0_ = (bitField0_ & ~0x00000001);
        responseAddressParam_ = getDefaultInstance().getResponseAddressParam();
        onChanged();
        return this;
      }
      /**
       * <code>optional string responseAddressParam = 1;</code>
       */
      public Builder setResponseAddressParamBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        responseAddressParam_ = value;
        onChanged();
        return this;
      }

      // optional string responseCheckboxesParam = 2;
      private java.lang.Object responseCheckboxesParam_ = "";
      /**
       * <code>optional string responseCheckboxesParam = 2;</code>
       */
      public boolean hasResponseCheckboxesParam() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string responseCheckboxesParam = 2;</code>
       */
      public java.lang.String getResponseCheckboxesParam() {
        java.lang.Object ref = responseCheckboxesParam_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          responseCheckboxesParam_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string responseCheckboxesParam = 2;</code>
       */
      public com.google.protobuf.ByteString
          getResponseCheckboxesParamBytes() {
        java.lang.Object ref = responseCheckboxesParam_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          responseCheckboxesParam_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string responseCheckboxesParam = 2;</code>
       */
      public Builder setResponseCheckboxesParam(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        responseCheckboxesParam_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string responseCheckboxesParam = 2;</code>
       */
      public Builder clearResponseCheckboxesParam() {
        bitField0_ = (bitField0_ & ~0x00000002);
        responseCheckboxesParam_ = getDefaultInstance().getResponseCheckboxesParam();
        onChanged();
        return this;
      }
      /**
       * <code>optional string responseCheckboxesParam = 2;</code>
       */
      public Builder setResponseCheckboxesParamBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        responseCheckboxesParam_ = value;
        onChanged();
        return this;
      }

      // optional string title = 3;
      private java.lang.Object title_ = "";
      /**
       * <code>optional string title = 3;</code>
       */
      public boolean hasTitle() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public java.lang.String getTitle() {
        java.lang.Object ref = title_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          title_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public com.google.protobuf.ByteString
          getTitleBytes() {
        java.lang.Object ref = title_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          title_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public Builder setTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        title_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public Builder clearTitle() {
        bitField0_ = (bitField0_ & ~0x00000004);
        title_ = getDefaultInstance().getTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public Builder setTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        title_ = value;
        onChanged();
        return this;
      }

      // optional string descriptionHtml = 4;
      private java.lang.Object descriptionHtml_ = "";
      /**
       * <code>optional string descriptionHtml = 4;</code>
       */
      public boolean hasDescriptionHtml() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string descriptionHtml = 4;</code>
       */
      public java.lang.String getDescriptionHtml() {
        java.lang.Object ref = descriptionHtml_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          descriptionHtml_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string descriptionHtml = 4;</code>
       */
      public com.google.protobuf.ByteString
          getDescriptionHtmlBytes() {
        java.lang.Object ref = descriptionHtml_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          descriptionHtml_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string descriptionHtml = 4;</code>
       */
      public Builder setDescriptionHtml(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        descriptionHtml_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string descriptionHtml = 4;</code>
       */
      public Builder clearDescriptionHtml() {
        bitField0_ = (bitField0_ & ~0x00000008);
        descriptionHtml_ = getDefaultInstance().getDescriptionHtml();
        onChanged();
        return this;
      }
      /**
       * <code>optional string descriptionHtml = 4;</code>
       */
      public Builder setDescriptionHtmlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        descriptionHtml_ = value;
        onChanged();
        return this;
      }

      // repeated .FormCheckbox checkbox = 5;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox> checkbox_ =
        java.util.Collections.emptyList();
      private void ensureCheckboxIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          checkbox_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox>(checkbox_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox, com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.Builder, com.akdeniz.googleplaycrawler.GooglePlay.FormCheckboxOrBuilder> checkboxBuilder_;

      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox> getCheckboxList() {
        if (checkboxBuilder_ == null) {
          return java.util.Collections.unmodifiableList(checkbox_);
        } else {
          return checkboxBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public int getCheckboxCount() {
        if (checkboxBuilder_ == null) {
          return checkbox_.size();
        } else {
          return checkboxBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox getCheckbox(int index) {
        if (checkboxBuilder_ == null) {
          return checkbox_.get(index);
        } else {
          return checkboxBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public Builder setCheckbox(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox value) {
        if (checkboxBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCheckboxIsMutable();
          checkbox_.set(index, value);
          onChanged();
        } else {
          checkboxBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public Builder setCheckbox(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.Builder builderForValue) {
        if (checkboxBuilder_ == null) {
          ensureCheckboxIsMutable();
          checkbox_.set(index, builderForValue.build());
          onChanged();
        } else {
          checkboxBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public Builder addCheckbox(com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox value) {
        if (checkboxBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCheckboxIsMutable();
          checkbox_.add(value);
          onChanged();
        } else {
          checkboxBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public Builder addCheckbox(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox value) {
        if (checkboxBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCheckboxIsMutable();
          checkbox_.add(index, value);
          onChanged();
        } else {
          checkboxBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public Builder addCheckbox(
          com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.Builder builderForValue) {
        if (checkboxBuilder_ == null) {
          ensureCheckboxIsMutable();
          checkbox_.add(builderForValue.build());
          onChanged();
        } else {
          checkboxBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public Builder addCheckbox(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.Builder builderForValue) {
        if (checkboxBuilder_ == null) {
          ensureCheckboxIsMutable();
          checkbox_.add(index, builderForValue.build());
          onChanged();
        } else {
          checkboxBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public Builder addAllCheckbox(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox> values) {
        if (checkboxBuilder_ == null) {
          ensureCheckboxIsMutable();
          super.addAll(values, checkbox_);
          onChanged();
        } else {
          checkboxBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public Builder clearCheckbox() {
        if (checkboxBuilder_ == null) {
          checkbox_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          checkboxBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public Builder removeCheckbox(int index) {
        if (checkboxBuilder_ == null) {
          ensureCheckboxIsMutable();
          checkbox_.remove(index);
          onChanged();
        } else {
          checkboxBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.Builder getCheckboxBuilder(
          int index) {
        return getCheckboxFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FormCheckboxOrBuilder getCheckboxOrBuilder(
          int index) {
        if (checkboxBuilder_ == null) {
          return checkbox_.get(index);  } else {
          return checkboxBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.FormCheckboxOrBuilder> 
           getCheckboxOrBuilderList() {
        if (checkboxBuilder_ != null) {
          return checkboxBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(checkbox_);
        }
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.Builder addCheckboxBuilder() {
        return getCheckboxFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.getDefaultInstance());
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.Builder addCheckboxBuilder(
          int index) {
        return getCheckboxFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.getDefaultInstance());
      }
      /**
       * <code>repeated .FormCheckbox checkbox = 5;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.Builder> 
           getCheckboxBuilderList() {
        return getCheckboxFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox, com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.Builder, com.akdeniz.googleplaycrawler.GooglePlay.FormCheckboxOrBuilder> 
          getCheckboxFieldBuilder() {
        if (checkboxBuilder_ == null) {
          checkboxBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox, com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.Builder, com.akdeniz.googleplaycrawler.GooglePlay.FormCheckboxOrBuilder>(
                  checkbox_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          checkbox_ = null;
        }
        return checkboxBuilder_;
      }

      // optional .Address address = 6;
      private com.akdeniz.googleplaycrawler.GooglePlay.Address address_ = com.akdeniz.googleplaycrawler.GooglePlay.Address.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Address, com.akdeniz.googleplaycrawler.GooglePlay.Address.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AddressOrBuilder> addressBuilder_;
      /**
       * <code>optional .Address address = 6;</code>
       */
      public boolean hasAddress() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .Address address = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Address getAddress() {
        if (addressBuilder_ == null) {
          return address_;
        } else {
          return addressBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Address address = 6;</code>
       */
      public Builder setAddress(com.akdeniz.googleplaycrawler.GooglePlay.Address value) {
        if (addressBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          address_ = value;
          onChanged();
        } else {
          addressBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .Address address = 6;</code>
       */
      public Builder setAddress(
          com.akdeniz.googleplaycrawler.GooglePlay.Address.Builder builderForValue) {
        if (addressBuilder_ == null) {
          address_ = builderForValue.build();
          onChanged();
        } else {
          addressBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .Address address = 6;</code>
       */
      public Builder mergeAddress(com.akdeniz.googleplaycrawler.GooglePlay.Address value) {
        if (addressBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              address_ != com.akdeniz.googleplaycrawler.GooglePlay.Address.getDefaultInstance()) {
            address_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Address.newBuilder(address_).mergeFrom(value).buildPartial();
          } else {
            address_ = value;
          }
          onChanged();
        } else {
          addressBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .Address address = 6;</code>
       */
      public Builder clearAddress() {
        if (addressBuilder_ == null) {
          address_ = com.akdeniz.googleplaycrawler.GooglePlay.Address.getDefaultInstance();
          onChanged();
        } else {
          addressBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .Address address = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Address.Builder getAddressBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getAddressFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Address address = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AddressOrBuilder getAddressOrBuilder() {
        if (addressBuilder_ != null) {
          return addressBuilder_.getMessageOrBuilder();
        } else {
          return address_;
        }
      }
      /**
       * <code>optional .Address address = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Address, com.akdeniz.googleplaycrawler.GooglePlay.Address.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AddressOrBuilder> 
          getAddressFieldBuilder() {
        if (addressBuilder_ == null) {
          addressBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Address, com.akdeniz.googleplaycrawler.GooglePlay.Address.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AddressOrBuilder>(
                  address_,
                  getParentForChildren(),
                  isClean());
          address_ = null;
        }
        return addressBuilder_;
      }

      // repeated .InputValidationError errorInputField = 7;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError> errorInputField_ =
        java.util.Collections.emptyList();
      private void ensureErrorInputFieldIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          errorInputField_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError>(errorInputField_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError, com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InputValidationErrorOrBuilder> errorInputFieldBuilder_;

      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError> getErrorInputFieldList() {
        if (errorInputFieldBuilder_ == null) {
          return java.util.Collections.unmodifiableList(errorInputField_);
        } else {
          return errorInputFieldBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public int getErrorInputFieldCount() {
        if (errorInputFieldBuilder_ == null) {
          return errorInputField_.size();
        } else {
          return errorInputFieldBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError getErrorInputField(int index) {
        if (errorInputFieldBuilder_ == null) {
          return errorInputField_.get(index);
        } else {
          return errorInputFieldBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public Builder setErrorInputField(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError value) {
        if (errorInputFieldBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureErrorInputFieldIsMutable();
          errorInputField_.set(index, value);
          onChanged();
        } else {
          errorInputFieldBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public Builder setErrorInputField(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.Builder builderForValue) {
        if (errorInputFieldBuilder_ == null) {
          ensureErrorInputFieldIsMutable();
          errorInputField_.set(index, builderForValue.build());
          onChanged();
        } else {
          errorInputFieldBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public Builder addErrorInputField(com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError value) {
        if (errorInputFieldBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureErrorInputFieldIsMutable();
          errorInputField_.add(value);
          onChanged();
        } else {
          errorInputFieldBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public Builder addErrorInputField(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError value) {
        if (errorInputFieldBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureErrorInputFieldIsMutable();
          errorInputField_.add(index, value);
          onChanged();
        } else {
          errorInputFieldBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public Builder addErrorInputField(
          com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.Builder builderForValue) {
        if (errorInputFieldBuilder_ == null) {
          ensureErrorInputFieldIsMutable();
          errorInputField_.add(builderForValue.build());
          onChanged();
        } else {
          errorInputFieldBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public Builder addErrorInputField(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.Builder builderForValue) {
        if (errorInputFieldBuilder_ == null) {
          ensureErrorInputFieldIsMutable();
          errorInputField_.add(index, builderForValue.build());
          onChanged();
        } else {
          errorInputFieldBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public Builder addAllErrorInputField(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError> values) {
        if (errorInputFieldBuilder_ == null) {
          ensureErrorInputFieldIsMutable();
          super.addAll(values, errorInputField_);
          onChanged();
        } else {
          errorInputFieldBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public Builder clearErrorInputField() {
        if (errorInputFieldBuilder_ == null) {
          errorInputField_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          errorInputFieldBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public Builder removeErrorInputField(int index) {
        if (errorInputFieldBuilder_ == null) {
          ensureErrorInputFieldIsMutable();
          errorInputField_.remove(index);
          onChanged();
        } else {
          errorInputFieldBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.Builder getErrorInputFieldBuilder(
          int index) {
        return getErrorInputFieldFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.InputValidationErrorOrBuilder getErrorInputFieldOrBuilder(
          int index) {
        if (errorInputFieldBuilder_ == null) {
          return errorInputField_.get(index);  } else {
          return errorInputFieldBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.InputValidationErrorOrBuilder> 
           getErrorInputFieldOrBuilderList() {
        if (errorInputFieldBuilder_ != null) {
          return errorInputFieldBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(errorInputField_);
        }
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.Builder addErrorInputFieldBuilder() {
        return getErrorInputFieldFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.getDefaultInstance());
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.Builder addErrorInputFieldBuilder(
          int index) {
        return getErrorInputFieldFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.getDefaultInstance());
      }
      /**
       * <code>repeated .InputValidationError errorInputField = 7;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.Builder> 
           getErrorInputFieldBuilderList() {
        return getErrorInputFieldFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError, com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InputValidationErrorOrBuilder> 
          getErrorInputFieldFieldBuilder() {
        if (errorInputFieldBuilder_ == null) {
          errorInputFieldBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError, com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InputValidationErrorOrBuilder>(
                  errorInputField_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          errorInputField_ = null;
        }
        return errorInputFieldBuilder_;
      }

      // optional string errorHtml = 8;
      private java.lang.Object errorHtml_ = "";
      /**
       * <code>optional string errorHtml = 8;</code>
       */
      public boolean hasErrorHtml() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string errorHtml = 8;</code>
       */
      public java.lang.String getErrorHtml() {
        java.lang.Object ref = errorHtml_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          errorHtml_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string errorHtml = 8;</code>
       */
      public com.google.protobuf.ByteString
          getErrorHtmlBytes() {
        java.lang.Object ref = errorHtml_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          errorHtml_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string errorHtml = 8;</code>
       */
      public Builder setErrorHtml(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        errorHtml_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string errorHtml = 8;</code>
       */
      public Builder clearErrorHtml() {
        bitField0_ = (bitField0_ & ~0x00000080);
        errorHtml_ = getDefaultInstance().getErrorHtml();
        onChanged();
        return this;
      }
      /**
       * <code>optional string errorHtml = 8;</code>
       */
      public Builder setErrorHtmlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        errorHtml_ = value;
        onChanged();
        return this;
      }

      // repeated int32 requiredField = 9;
      private java.util.List<java.lang.Integer> requiredField_ = java.util.Collections.emptyList();
      private void ensureRequiredFieldIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          requiredField_ = new java.util.ArrayList<java.lang.Integer>(requiredField_);
          bitField0_ |= 0x00000100;
         }
      }
      /**
       * <code>repeated int32 requiredField = 9;</code>
       */
      public java.util.List<java.lang.Integer>
          getRequiredFieldList() {
        return java.util.Collections.unmodifiableList(requiredField_);
      }
      /**
       * <code>repeated int32 requiredField = 9;</code>
       */
      public int getRequiredFieldCount() {
        return requiredField_.size();
      }
      /**
       * <code>repeated int32 requiredField = 9;</code>
       */
      public int getRequiredField(int index) {
        return requiredField_.get(index);
      }
      /**
       * <code>repeated int32 requiredField = 9;</code>
       */
      public Builder setRequiredField(
          int index, int value) {
        ensureRequiredFieldIsMutable();
        requiredField_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 requiredField = 9;</code>
       */
      public Builder addRequiredField(int value) {
        ensureRequiredFieldIsMutable();
        requiredField_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 requiredField = 9;</code>
       */
      public Builder addAllRequiredField(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureRequiredFieldIsMutable();
        super.addAll(values, requiredField_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 requiredField = 9;</code>
       */
      public Builder clearRequiredField() {
        requiredField_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000100);
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:AddressChallenge)
    }

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

    // @@protoc_insertion_point(class_scope:AddressChallenge)
  }

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

    // optional int32 authenticationType = 1;
    /**
     * <code>optional int32 authenticationType = 1;</code>
     */
    boolean hasAuthenticationType();
    /**
     * <code>optional int32 authenticationType = 1;</code>
     */
    int getAuthenticationType();

    // optional string responseAuthenticationTypeParam = 2;
    /**
     * <code>optional string responseAuthenticationTypeParam = 2;</code>
     */
    boolean hasResponseAuthenticationTypeParam();
    /**
     * <code>optional string responseAuthenticationTypeParam = 2;</code>
     */
    java.lang.String getResponseAuthenticationTypeParam();
    /**
     * <code>optional string responseAuthenticationTypeParam = 2;</code>
     */
    com.google.protobuf.ByteString
        getResponseAuthenticationTypeParamBytes();

    // optional string responseRetryCountParam = 3;
    /**
     * <code>optional string responseRetryCountParam = 3;</code>
     */
    boolean hasResponseRetryCountParam();
    /**
     * <code>optional string responseRetryCountParam = 3;</code>
     */
    java.lang.String getResponseRetryCountParam();
    /**
     * <code>optional string responseRetryCountParam = 3;</code>
     */
    com.google.protobuf.ByteString
        getResponseRetryCountParamBytes();

    // optional string pinHeaderText = 4;
    /**
     * <code>optional string pinHeaderText = 4;</code>
     */
    boolean hasPinHeaderText();
    /**
     * <code>optional string pinHeaderText = 4;</code>
     */
    java.lang.String getPinHeaderText();
    /**
     * <code>optional string pinHeaderText = 4;</code>
     */
    com.google.protobuf.ByteString
        getPinHeaderTextBytes();

    // optional string pinDescriptionTextHtml = 5;
    /**
     * <code>optional string pinDescriptionTextHtml = 5;</code>
     */
    boolean hasPinDescriptionTextHtml();
    /**
     * <code>optional string pinDescriptionTextHtml = 5;</code>
     */
    java.lang.String getPinDescriptionTextHtml();
    /**
     * <code>optional string pinDescriptionTextHtml = 5;</code>
     */
    com.google.protobuf.ByteString
        getPinDescriptionTextHtmlBytes();

    // optional string gaiaHeaderText = 6;
    /**
     * <code>optional string gaiaHeaderText = 6;</code>
     */
    boolean hasGaiaHeaderText();
    /**
     * <code>optional string gaiaHeaderText = 6;</code>
     */
    java.lang.String getGaiaHeaderText();
    /**
     * <code>optional string gaiaHeaderText = 6;</code>
     */
    com.google.protobuf.ByteString
        getGaiaHeaderTextBytes();

    // optional string gaiaDescriptionTextHtml = 7;
    /**
     * <code>optional string gaiaDescriptionTextHtml = 7;</code>
     */
    boolean hasGaiaDescriptionTextHtml();
    /**
     * <code>optional string gaiaDescriptionTextHtml = 7;</code>
     */
    java.lang.String getGaiaDescriptionTextHtml();
    /**
     * <code>optional string gaiaDescriptionTextHtml = 7;</code>
     */
    com.google.protobuf.ByteString
        getGaiaDescriptionTextHtmlBytes();
  }
  /**
   * Protobuf type {@code AuthenticationChallenge}
   */
  public static final class AuthenticationChallenge extends
      com.google.protobuf.GeneratedMessage
      implements AuthenticationChallengeOrBuilder {
    // Use AuthenticationChallenge.newBuilder() to construct.
    private AuthenticationChallenge(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AuthenticationChallenge(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public AuthenticationChallenge getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AuthenticationChallenge(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              authenticationType_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              responseAuthenticationTypeParam_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              responseRetryCountParam_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              pinHeaderText_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              pinDescriptionTextHtml_ = input.readBytes();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000020;
              gaiaHeaderText_ = input.readBytes();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000040;
              gaiaDescriptionTextHtml_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AuthenticationChallenge_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AuthenticationChallenge_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.class, com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 authenticationType = 1;
    public static final int AUTHENTICATIONTYPE_FIELD_NUMBER = 1;
    private int authenticationType_;
    /**
     * <code>optional int32 authenticationType = 1;</code>
     */
    public boolean hasAuthenticationType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 authenticationType = 1;</code>
     */
    public int getAuthenticationType() {
      return authenticationType_;
    }

    // optional string responseAuthenticationTypeParam = 2;
    public static final int RESPONSEAUTHENTICATIONTYPEPARAM_FIELD_NUMBER = 2;
    private java.lang.Object responseAuthenticationTypeParam_;
    /**
     * <code>optional string responseAuthenticationTypeParam = 2;</code>
     */
    public boolean hasResponseAuthenticationTypeParam() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string responseAuthenticationTypeParam = 2;</code>
     */
    public java.lang.String getResponseAuthenticationTypeParam() {
      java.lang.Object ref = responseAuthenticationTypeParam_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          responseAuthenticationTypeParam_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string responseAuthenticationTypeParam = 2;</code>
     */
    public com.google.protobuf.ByteString
        getResponseAuthenticationTypeParamBytes() {
      java.lang.Object ref = responseAuthenticationTypeParam_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        responseAuthenticationTypeParam_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string responseRetryCountParam = 3;
    public static final int RESPONSERETRYCOUNTPARAM_FIELD_NUMBER = 3;
    private java.lang.Object responseRetryCountParam_;
    /**
     * <code>optional string responseRetryCountParam = 3;</code>
     */
    public boolean hasResponseRetryCountParam() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string responseRetryCountParam = 3;</code>
     */
    public java.lang.String getResponseRetryCountParam() {
      java.lang.Object ref = responseRetryCountParam_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          responseRetryCountParam_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string responseRetryCountParam = 3;</code>
     */
    public com.google.protobuf.ByteString
        getResponseRetryCountParamBytes() {
      java.lang.Object ref = responseRetryCountParam_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        responseRetryCountParam_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string pinHeaderText = 4;
    public static final int PINHEADERTEXT_FIELD_NUMBER = 4;
    private java.lang.Object pinHeaderText_;
    /**
     * <code>optional string pinHeaderText = 4;</code>
     */
    public boolean hasPinHeaderText() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string pinHeaderText = 4;</code>
     */
    public java.lang.String getPinHeaderText() {
      java.lang.Object ref = pinHeaderText_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          pinHeaderText_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string pinHeaderText = 4;</code>
     */
    public com.google.protobuf.ByteString
        getPinHeaderTextBytes() {
      java.lang.Object ref = pinHeaderText_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        pinHeaderText_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string pinDescriptionTextHtml = 5;
    public static final int PINDESCRIPTIONTEXTHTML_FIELD_NUMBER = 5;
    private java.lang.Object pinDescriptionTextHtml_;
    /**
     * <code>optional string pinDescriptionTextHtml = 5;</code>
     */
    public boolean hasPinDescriptionTextHtml() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string pinDescriptionTextHtml = 5;</code>
     */
    public java.lang.String getPinDescriptionTextHtml() {
      java.lang.Object ref = pinDescriptionTextHtml_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          pinDescriptionTextHtml_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string pinDescriptionTextHtml = 5;</code>
     */
    public com.google.protobuf.ByteString
        getPinDescriptionTextHtmlBytes() {
      java.lang.Object ref = pinDescriptionTextHtml_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        pinDescriptionTextHtml_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string gaiaHeaderText = 6;
    public static final int GAIAHEADERTEXT_FIELD_NUMBER = 6;
    private java.lang.Object gaiaHeaderText_;
    /**
     * <code>optional string gaiaHeaderText = 6;</code>
     */
    public boolean hasGaiaHeaderText() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string gaiaHeaderText = 6;</code>
     */
    public java.lang.String getGaiaHeaderText() {
      java.lang.Object ref = gaiaHeaderText_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          gaiaHeaderText_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string gaiaHeaderText = 6;</code>
     */
    public com.google.protobuf.ByteString
        getGaiaHeaderTextBytes() {
      java.lang.Object ref = gaiaHeaderText_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gaiaHeaderText_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string gaiaDescriptionTextHtml = 7;
    public static final int GAIADESCRIPTIONTEXTHTML_FIELD_NUMBER = 7;
    private java.lang.Object gaiaDescriptionTextHtml_;
    /**
     * <code>optional string gaiaDescriptionTextHtml = 7;</code>
     */
    public boolean hasGaiaDescriptionTextHtml() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional string gaiaDescriptionTextHtml = 7;</code>
     */
    public java.lang.String getGaiaDescriptionTextHtml() {
      java.lang.Object ref = gaiaDescriptionTextHtml_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          gaiaDescriptionTextHtml_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string gaiaDescriptionTextHtml = 7;</code>
     */
    public com.google.protobuf.ByteString
        getGaiaDescriptionTextHtmlBytes() {
      java.lang.Object ref = gaiaDescriptionTextHtml_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gaiaDescriptionTextHtml_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      authenticationType_ = 0;
      responseAuthenticationTypeParam_ = "";
      responseRetryCountParam_ = "";
      pinHeaderText_ = "";
      pinDescriptionTextHtml_ = "";
      gaiaHeaderText_ = "";
      gaiaDescriptionTextHtml_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, authenticationType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getResponseAuthenticationTypeParamBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getResponseRetryCountParamBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getPinHeaderTextBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getPinDescriptionTextHtmlBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(6, getGaiaHeaderTextBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(7, getGaiaDescriptionTextHtmlBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, authenticationType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getResponseAuthenticationTypeParamBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getResponseRetryCountParamBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getPinHeaderTextBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getPinDescriptionTextHtmlBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getGaiaHeaderTextBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getGaiaDescriptionTextHtmlBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AuthenticationChallenge}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallengeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AuthenticationChallenge_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AuthenticationChallenge_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.class, com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        authenticationType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        responseAuthenticationTypeParam_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        responseRetryCountParam_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        pinHeaderText_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        pinDescriptionTextHtml_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        gaiaHeaderText_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        gaiaDescriptionTextHtml_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AuthenticationChallenge_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge result = new com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.authenticationType_ = authenticationType_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.responseAuthenticationTypeParam_ = responseAuthenticationTypeParam_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.responseRetryCountParam_ = responseRetryCountParam_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.pinHeaderText_ = pinHeaderText_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.pinDescriptionTextHtml_ = pinDescriptionTextHtml_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.gaiaHeaderText_ = gaiaHeaderText_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.gaiaDescriptionTextHtml_ = gaiaDescriptionTextHtml_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.getDefaultInstance()) return this;
        if (other.hasAuthenticationType()) {
          setAuthenticationType(other.getAuthenticationType());
        }
        if (other.hasResponseAuthenticationTypeParam()) {
          bitField0_ |= 0x00000002;
          responseAuthenticationTypeParam_ = other.responseAuthenticationTypeParam_;
          onChanged();
        }
        if (other.hasResponseRetryCountParam()) {
          bitField0_ |= 0x00000004;
          responseRetryCountParam_ = other.responseRetryCountParam_;
          onChanged();
        }
        if (other.hasPinHeaderText()) {
          bitField0_ |= 0x00000008;
          pinHeaderText_ = other.pinHeaderText_;
          onChanged();
        }
        if (other.hasPinDescriptionTextHtml()) {
          bitField0_ |= 0x00000010;
          pinDescriptionTextHtml_ = other.pinDescriptionTextHtml_;
          onChanged();
        }
        if (other.hasGaiaHeaderText()) {
          bitField0_ |= 0x00000020;
          gaiaHeaderText_ = other.gaiaHeaderText_;
          onChanged();
        }
        if (other.hasGaiaDescriptionTextHtml()) {
          bitField0_ |= 0x00000040;
          gaiaDescriptionTextHtml_ = other.gaiaDescriptionTextHtml_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 authenticationType = 1;
      private int authenticationType_ ;
      /**
       * <code>optional int32 authenticationType = 1;</code>
       */
      public boolean hasAuthenticationType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 authenticationType = 1;</code>
       */
      public int getAuthenticationType() {
        return authenticationType_;
      }
      /**
       * <code>optional int32 authenticationType = 1;</code>
       */
      public Builder setAuthenticationType(int value) {
        bitField0_ |= 0x00000001;
        authenticationType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 authenticationType = 1;</code>
       */
      public Builder clearAuthenticationType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        authenticationType_ = 0;
        onChanged();
        return this;
      }

      // optional string responseAuthenticationTypeParam = 2;
      private java.lang.Object responseAuthenticationTypeParam_ = "";
      /**
       * <code>optional string responseAuthenticationTypeParam = 2;</code>
       */
      public boolean hasResponseAuthenticationTypeParam() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string responseAuthenticationTypeParam = 2;</code>
       */
      public java.lang.String getResponseAuthenticationTypeParam() {
        java.lang.Object ref = responseAuthenticationTypeParam_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          responseAuthenticationTypeParam_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string responseAuthenticationTypeParam = 2;</code>
       */
      public com.google.protobuf.ByteString
          getResponseAuthenticationTypeParamBytes() {
        java.lang.Object ref = responseAuthenticationTypeParam_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          responseAuthenticationTypeParam_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string responseAuthenticationTypeParam = 2;</code>
       */
      public Builder setResponseAuthenticationTypeParam(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        responseAuthenticationTypeParam_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string responseAuthenticationTypeParam = 2;</code>
       */
      public Builder clearResponseAuthenticationTypeParam() {
        bitField0_ = (bitField0_ & ~0x00000002);
        responseAuthenticationTypeParam_ = getDefaultInstance().getResponseAuthenticationTypeParam();
        onChanged();
        return this;
      }
      /**
       * <code>optional string responseAuthenticationTypeParam = 2;</code>
       */
      public Builder setResponseAuthenticationTypeParamBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        responseAuthenticationTypeParam_ = value;
        onChanged();
        return this;
      }

      // optional string responseRetryCountParam = 3;
      private java.lang.Object responseRetryCountParam_ = "";
      /**
       * <code>optional string responseRetryCountParam = 3;</code>
       */
      public boolean hasResponseRetryCountParam() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string responseRetryCountParam = 3;</code>
       */
      public java.lang.String getResponseRetryCountParam() {
        java.lang.Object ref = responseRetryCountParam_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          responseRetryCountParam_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string responseRetryCountParam = 3;</code>
       */
      public com.google.protobuf.ByteString
          getResponseRetryCountParamBytes() {
        java.lang.Object ref = responseRetryCountParam_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          responseRetryCountParam_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string responseRetryCountParam = 3;</code>
       */
      public Builder setResponseRetryCountParam(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        responseRetryCountParam_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string responseRetryCountParam = 3;</code>
       */
      public Builder clearResponseRetryCountParam() {
        bitField0_ = (bitField0_ & ~0x00000004);
        responseRetryCountParam_ = getDefaultInstance().getResponseRetryCountParam();
        onChanged();
        return this;
      }
      /**
       * <code>optional string responseRetryCountParam = 3;</code>
       */
      public Builder setResponseRetryCountParamBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        responseRetryCountParam_ = value;
        onChanged();
        return this;
      }

      // optional string pinHeaderText = 4;
      private java.lang.Object pinHeaderText_ = "";
      /**
       * <code>optional string pinHeaderText = 4;</code>
       */
      public boolean hasPinHeaderText() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string pinHeaderText = 4;</code>
       */
      public java.lang.String getPinHeaderText() {
        java.lang.Object ref = pinHeaderText_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          pinHeaderText_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string pinHeaderText = 4;</code>
       */
      public com.google.protobuf.ByteString
          getPinHeaderTextBytes() {
        java.lang.Object ref = pinHeaderText_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          pinHeaderText_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string pinHeaderText = 4;</code>
       */
      public Builder setPinHeaderText(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        pinHeaderText_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string pinHeaderText = 4;</code>
       */
      public Builder clearPinHeaderText() {
        bitField0_ = (bitField0_ & ~0x00000008);
        pinHeaderText_ = getDefaultInstance().getPinHeaderText();
        onChanged();
        return this;
      }
      /**
       * <code>optional string pinHeaderText = 4;</code>
       */
      public Builder setPinHeaderTextBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        pinHeaderText_ = value;
        onChanged();
        return this;
      }

      // optional string pinDescriptionTextHtml = 5;
      private java.lang.Object pinDescriptionTextHtml_ = "";
      /**
       * <code>optional string pinDescriptionTextHtml = 5;</code>
       */
      public boolean hasPinDescriptionTextHtml() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string pinDescriptionTextHtml = 5;</code>
       */
      public java.lang.String getPinDescriptionTextHtml() {
        java.lang.Object ref = pinDescriptionTextHtml_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          pinDescriptionTextHtml_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string pinDescriptionTextHtml = 5;</code>
       */
      public com.google.protobuf.ByteString
          getPinDescriptionTextHtmlBytes() {
        java.lang.Object ref = pinDescriptionTextHtml_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          pinDescriptionTextHtml_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string pinDescriptionTextHtml = 5;</code>
       */
      public Builder setPinDescriptionTextHtml(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        pinDescriptionTextHtml_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string pinDescriptionTextHtml = 5;</code>
       */
      public Builder clearPinDescriptionTextHtml() {
        bitField0_ = (bitField0_ & ~0x00000010);
        pinDescriptionTextHtml_ = getDefaultInstance().getPinDescriptionTextHtml();
        onChanged();
        return this;
      }
      /**
       * <code>optional string pinDescriptionTextHtml = 5;</code>
       */
      public Builder setPinDescriptionTextHtmlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        pinDescriptionTextHtml_ = value;
        onChanged();
        return this;
      }

      // optional string gaiaHeaderText = 6;
      private java.lang.Object gaiaHeaderText_ = "";
      /**
       * <code>optional string gaiaHeaderText = 6;</code>
       */
      public boolean hasGaiaHeaderText() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional string gaiaHeaderText = 6;</code>
       */
      public java.lang.String getGaiaHeaderText() {
        java.lang.Object ref = gaiaHeaderText_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          gaiaHeaderText_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string gaiaHeaderText = 6;</code>
       */
      public com.google.protobuf.ByteString
          getGaiaHeaderTextBytes() {
        java.lang.Object ref = gaiaHeaderText_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gaiaHeaderText_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string gaiaHeaderText = 6;</code>
       */
      public Builder setGaiaHeaderText(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        gaiaHeaderText_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string gaiaHeaderText = 6;</code>
       */
      public Builder clearGaiaHeaderText() {
        bitField0_ = (bitField0_ & ~0x00000020);
        gaiaHeaderText_ = getDefaultInstance().getGaiaHeaderText();
        onChanged();
        return this;
      }
      /**
       * <code>optional string gaiaHeaderText = 6;</code>
       */
      public Builder setGaiaHeaderTextBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        gaiaHeaderText_ = value;
        onChanged();
        return this;
      }

      // optional string gaiaDescriptionTextHtml = 7;
      private java.lang.Object gaiaDescriptionTextHtml_ = "";
      /**
       * <code>optional string gaiaDescriptionTextHtml = 7;</code>
       */
      public boolean hasGaiaDescriptionTextHtml() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string gaiaDescriptionTextHtml = 7;</code>
       */
      public java.lang.String getGaiaDescriptionTextHtml() {
        java.lang.Object ref = gaiaDescriptionTextHtml_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          gaiaDescriptionTextHtml_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string gaiaDescriptionTextHtml = 7;</code>
       */
      public com.google.protobuf.ByteString
          getGaiaDescriptionTextHtmlBytes() {
        java.lang.Object ref = gaiaDescriptionTextHtml_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gaiaDescriptionTextHtml_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string gaiaDescriptionTextHtml = 7;</code>
       */
      public Builder setGaiaDescriptionTextHtml(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        gaiaDescriptionTextHtml_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string gaiaDescriptionTextHtml = 7;</code>
       */
      public Builder clearGaiaDescriptionTextHtml() {
        bitField0_ = (bitField0_ & ~0x00000040);
        gaiaDescriptionTextHtml_ = getDefaultInstance().getGaiaDescriptionTextHtml();
        onChanged();
        return this;
      }
      /**
       * <code>optional string gaiaDescriptionTextHtml = 7;</code>
       */
      public Builder setGaiaDescriptionTextHtmlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        gaiaDescriptionTextHtml_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:AuthenticationChallenge)
    }

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

    // @@protoc_insertion_point(class_scope:AuthenticationChallenge)
  }

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

    // optional .PurchaseNotificationResponse purchaseResponse = 1;
    /**
     * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
     */
    boolean hasPurchaseResponse();
    /**
     * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse getPurchaseResponse();
    /**
     * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponseOrBuilder getPurchaseResponseOrBuilder();

    // optional group CheckoutInfo = 2 {
    /**
     * <code>optional group CheckoutInfo = 2 { ... }</code>
     */
    boolean hasCheckoutInfo();
    /**
     * <code>optional group CheckoutInfo = 2 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo getCheckoutInfo();
    /**
     * <code>optional group CheckoutInfo = 2 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfoOrBuilder getCheckoutInfoOrBuilder();

    // optional string continueViaUrl = 8;
    /**
     * <code>optional string continueViaUrl = 8;</code>
     */
    boolean hasContinueViaUrl();
    /**
     * <code>optional string continueViaUrl = 8;</code>
     */
    java.lang.String getContinueViaUrl();
    /**
     * <code>optional string continueViaUrl = 8;</code>
     */
    com.google.protobuf.ByteString
        getContinueViaUrlBytes();

    // optional string purchaseStatusUrl = 9;
    /**
     * <code>optional string purchaseStatusUrl = 9;</code>
     */
    boolean hasPurchaseStatusUrl();
    /**
     * <code>optional string purchaseStatusUrl = 9;</code>
     */
    java.lang.String getPurchaseStatusUrl();
    /**
     * <code>optional string purchaseStatusUrl = 9;</code>
     */
    com.google.protobuf.ByteString
        getPurchaseStatusUrlBytes();

    // optional string checkoutServiceId = 12;
    /**
     * <code>optional string checkoutServiceId = 12;</code>
     */
    boolean hasCheckoutServiceId();
    /**
     * <code>optional string checkoutServiceId = 12;</code>
     */
    java.lang.String getCheckoutServiceId();
    /**
     * <code>optional string checkoutServiceId = 12;</code>
     */
    com.google.protobuf.ByteString
        getCheckoutServiceIdBytes();

    // optional bool checkoutTokenRequired = 13;
    /**
     * <code>optional bool checkoutTokenRequired = 13;</code>
     */
    boolean hasCheckoutTokenRequired();
    /**
     * <code>optional bool checkoutTokenRequired = 13;</code>
     */
    boolean getCheckoutTokenRequired();

    // optional string baseCheckoutUrl = 14;
    /**
     * <code>optional string baseCheckoutUrl = 14;</code>
     */
    boolean hasBaseCheckoutUrl();
    /**
     * <code>optional string baseCheckoutUrl = 14;</code>
     */
    java.lang.String getBaseCheckoutUrl();
    /**
     * <code>optional string baseCheckoutUrl = 14;</code>
     */
    com.google.protobuf.ByteString
        getBaseCheckoutUrlBytes();

    // repeated string tosCheckboxHtml = 37;
    /**
     * <code>repeated string tosCheckboxHtml = 37;</code>
     */
    java.util.List<java.lang.String>
    getTosCheckboxHtmlList();
    /**
     * <code>repeated string tosCheckboxHtml = 37;</code>
     */
    int getTosCheckboxHtmlCount();
    /**
     * <code>repeated string tosCheckboxHtml = 37;</code>
     */
    java.lang.String getTosCheckboxHtml(int index);
    /**
     * <code>repeated string tosCheckboxHtml = 37;</code>
     */
    com.google.protobuf.ByteString
        getTosCheckboxHtmlBytes(int index);

    // optional int32 iabPermissionError = 38;
    /**
     * <code>optional int32 iabPermissionError = 38;</code>
     */
    boolean hasIabPermissionError();
    /**
     * <code>optional int32 iabPermissionError = 38;</code>
     */
    int getIabPermissionError();

    // optional .PurchaseStatusResponse purchaseStatusResponse = 39;
    /**
     * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
     */
    boolean hasPurchaseStatusResponse();
    /**
     * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse getPurchaseStatusResponse();
    /**
     * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponseOrBuilder getPurchaseStatusResponseOrBuilder();

    // optional string purchaseCookie = 46;
    /**
     * <code>optional string purchaseCookie = 46;</code>
     */
    boolean hasPurchaseCookie();
    /**
     * <code>optional string purchaseCookie = 46;</code>
     */
    java.lang.String getPurchaseCookie();
    /**
     * <code>optional string purchaseCookie = 46;</code>
     */
    com.google.protobuf.ByteString
        getPurchaseCookieBytes();

    // optional .Challenge challenge = 49;
    /**
     * <code>optional .Challenge challenge = 49;</code>
     */
    boolean hasChallenge();
    /**
     * <code>optional .Challenge challenge = 49;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Challenge getChallenge();
    /**
     * <code>optional .Challenge challenge = 49;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ChallengeOrBuilder getChallengeOrBuilder();
  }
  /**
   * Protobuf type {@code BuyResponse}
   */
  public static final class BuyResponse extends
      com.google.protobuf.GeneratedMessage
      implements BuyResponseOrBuilder {
    // Use BuyResponse.newBuilder() to construct.
    private BuyResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private BuyResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public BuyResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private BuyResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = purchaseResponse_.toBuilder();
              }
              purchaseResponse_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(purchaseResponse_);
                purchaseResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 19: {
              com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = checkoutInfo_.toBuilder();
              }
              checkoutInfo_ = input.readGroup(2, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.PARSER,
                  extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(checkoutInfo_);
                checkoutInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 66: {
              bitField0_ |= 0x00000004;
              continueViaUrl_ = input.readBytes();
              break;
            }
            case 74: {
              bitField0_ |= 0x00000008;
              purchaseStatusUrl_ = input.readBytes();
              break;
            }
            case 98: {
              bitField0_ |= 0x00000010;
              checkoutServiceId_ = input.readBytes();
              break;
            }
            case 104: {
              bitField0_ |= 0x00000020;
              checkoutTokenRequired_ = input.readBool();
              break;
            }
            case 114: {
              bitField0_ |= 0x00000040;
              baseCheckoutUrl_ = input.readBytes();
              break;
            }
            case 298: {
              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                tosCheckboxHtml_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000080;
              }
              tosCheckboxHtml_.add(input.readBytes());
              break;
            }
            case 304: {
              bitField0_ |= 0x00000080;
              iabPermissionError_ = input.readInt32();
              break;
            }
            case 314: {
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = purchaseStatusResponse_.toBuilder();
              }
              purchaseStatusResponse_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(purchaseStatusResponse_);
                purchaseStatusResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 370: {
              bitField0_ |= 0x00000200;
              purchaseCookie_ = input.readBytes();
              break;
            }
            case 394: {
              com.akdeniz.googleplaycrawler.GooglePlay.Challenge.Builder subBuilder = null;
              if (((bitField0_ & 0x00000400) == 0x00000400)) {
                subBuilder = challenge_.toBuilder();
              }
              challenge_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Challenge.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(challenge_);
                challenge_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000400;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
          tosCheckboxHtml_ = new com.google.protobuf.UnmodifiableLazyStringList(tosCheckboxHtml_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.Builder.class);
    }

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

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

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

      // optional .LineItem item = 3;
      /**
       * <code>optional .LineItem item = 3;</code>
       */
      boolean hasItem();
      /**
       * <code>optional .LineItem item = 3;</code>
       */
      com.akdeniz.googleplaycrawler.GooglePlay.LineItem getItem();
      /**
       * <code>optional .LineItem item = 3;</code>
       */
      com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getItemOrBuilder();

      // repeated .LineItem subItem = 4;
      /**
       * <code>repeated .LineItem subItem = 4;</code>
       */
      java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> 
          getSubItemList();
      /**
       * <code>repeated .LineItem subItem = 4;</code>
       */
      com.akdeniz.googleplaycrawler.GooglePlay.LineItem getSubItem(int index);
      /**
       * <code>repeated .LineItem subItem = 4;</code>
       */
      int getSubItemCount();
      /**
       * <code>repeated .LineItem subItem = 4;</code>
       */
      java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
          getSubItemOrBuilderList();
      /**
       * <code>repeated .LineItem subItem = 4;</code>
       */
      com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getSubItemOrBuilder(
          int index);

      // repeated group CheckoutOption = 5 {
      /**
       * <code>repeated group CheckoutOption = 5 { ... }</code>
       */
      java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption> 
          getCheckoutOptionList();
      /**
       * <code>repeated group CheckoutOption = 5 { ... }</code>
       */
      com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption getCheckoutOption(int index);
      /**
       * <code>repeated group CheckoutOption = 5 { ... }</code>
       */
      int getCheckoutOptionCount();
      /**
       * <code>repeated group CheckoutOption = 5 { ... }</code>
       */
      java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOptionOrBuilder> 
          getCheckoutOptionOrBuilderList();
      /**
       * <code>repeated group CheckoutOption = 5 { ... }</code>
       */
      com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOptionOrBuilder getCheckoutOptionOrBuilder(
          int index);

      // optional string deprecatedCheckoutUrl = 10;
      /**
       * <code>optional string deprecatedCheckoutUrl = 10;</code>
       */
      boolean hasDeprecatedCheckoutUrl();
      /**
       * <code>optional string deprecatedCheckoutUrl = 10;</code>
       */
      java.lang.String getDeprecatedCheckoutUrl();
      /**
       * <code>optional string deprecatedCheckoutUrl = 10;</code>
       */
      com.google.protobuf.ByteString
          getDeprecatedCheckoutUrlBytes();

      // optional string addInstrumentUrl = 11;
      /**
       * <code>optional string addInstrumentUrl = 11;</code>
       */
      boolean hasAddInstrumentUrl();
      /**
       * <code>optional string addInstrumentUrl = 11;</code>
       */
      java.lang.String getAddInstrumentUrl();
      /**
       * <code>optional string addInstrumentUrl = 11;</code>
       */
      com.google.protobuf.ByteString
          getAddInstrumentUrlBytes();

      // repeated string footerHtml = 20;
      /**
       * <code>repeated string footerHtml = 20;</code>
       */
      java.util.List<java.lang.String>
      getFooterHtmlList();
      /**
       * <code>repeated string footerHtml = 20;</code>
       */
      int getFooterHtmlCount();
      /**
       * <code>repeated string footerHtml = 20;</code>
       */
      java.lang.String getFooterHtml(int index);
      /**
       * <code>repeated string footerHtml = 20;</code>
       */
      com.google.protobuf.ByteString
          getFooterHtmlBytes(int index);

      // repeated int32 eligibleInstrumentFamily = 31;
      /**
       * <code>repeated int32 eligibleInstrumentFamily = 31;</code>
       */
      java.util.List<java.lang.Integer> getEligibleInstrumentFamilyList();
      /**
       * <code>repeated int32 eligibleInstrumentFamily = 31;</code>
       */
      int getEligibleInstrumentFamilyCount();
      /**
       * <code>repeated int32 eligibleInstrumentFamily = 31;</code>
       */
      int getEligibleInstrumentFamily(int index);

      // repeated string footnoteHtml = 36;
      /**
       * <code>repeated string footnoteHtml = 36;</code>
       */
      java.util.List<java.lang.String>
      getFootnoteHtmlList();
      /**
       * <code>repeated string footnoteHtml = 36;</code>
       */
      int getFootnoteHtmlCount();
      /**
       * <code>repeated string footnoteHtml = 36;</code>
       */
      java.lang.String getFootnoteHtml(int index);
      /**
       * <code>repeated string footnoteHtml = 36;</code>
       */
      com.google.protobuf.ByteString
          getFootnoteHtmlBytes(int index);

      // repeated .Instrument eligibleInstrument = 44;
      /**
       * <code>repeated .Instrument eligibleInstrument = 44;</code>
       */
      java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Instrument> 
          getEligibleInstrumentList();
      /**
       * <code>repeated .Instrument eligibleInstrument = 44;</code>
       */
      com.akdeniz.googleplaycrawler.GooglePlay.Instrument getEligibleInstrument(int index);
      /**
       * <code>repeated .Instrument eligibleInstrument = 44;</code>
       */
      int getEligibleInstrumentCount();
      /**
       * <code>repeated .Instrument eligibleInstrument = 44;</code>
       */
      java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder> 
          getEligibleInstrumentOrBuilderList();
      /**
       * <code>repeated .Instrument eligibleInstrument = 44;</code>
       */
      com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder getEligibleInstrumentOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code BuyResponse.CheckoutInfo}
     */
    public static final class CheckoutInfo extends
        com.google.protobuf.GeneratedMessage
        implements CheckoutInfoOrBuilder {
      // Use CheckoutInfo.newBuilder() to construct.
      private CheckoutInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private CheckoutInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

      public CheckoutInfo getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private CheckoutInfo(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 26: {
                com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder subBuilder = null;
                if (((bitField0_ & 0x00000001) == 0x00000001)) {
                  subBuilder = item_.toBuilder();
                }
                item_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.LineItem.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(item_);
                  item_ = subBuilder.buildPartial();
                }
                bitField0_ |= 0x00000001;
                break;
              }
              case 34: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  subItem_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.LineItem>();
                  mutable_bitField0_ |= 0x00000002;
                }
                subItem_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.LineItem.PARSER, extensionRegistry));
                break;
              }
              case 43: {
                if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                  checkoutOption_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption>();
                  mutable_bitField0_ |= 0x00000004;
                }
                checkoutOption_.add(input.readGroup(5, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.PARSER,
                    extensionRegistry));
                break;
              }
              case 82: {
                bitField0_ |= 0x00000002;
                deprecatedCheckoutUrl_ = input.readBytes();
                break;
              }
              case 90: {
                bitField0_ |= 0x00000004;
                addInstrumentUrl_ = input.readBytes();
                break;
              }
              case 162: {
                if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                  footerHtml_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000020;
                }
                footerHtml_.add(input.readBytes());
                break;
              }
              case 248: {
                if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                  eligibleInstrumentFamily_ = new java.util.ArrayList<java.lang.Integer>();
                  mutable_bitField0_ |= 0x00000040;
                }
                eligibleInstrumentFamily_.add(input.readInt32());
                break;
              }
              case 250: {
                int length = input.readRawVarint32();
                int limit = input.pushLimit(length);
                if (!((mutable_bitField0_ & 0x00000040) == 0x00000040) && input.getBytesUntilLimit() > 0) {
                  eligibleInstrumentFamily_ = new java.util.ArrayList<java.lang.Integer>();
                  mutable_bitField0_ |= 0x00000040;
                }
                while (input.getBytesUntilLimit() > 0) {
                  eligibleInstrumentFamily_.add(input.readInt32());
                }
                input.popLimit(limit);
                break;
              }
              case 290: {
                if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                  footnoteHtml_ = new com.google.protobuf.LazyStringArrayList();
                  mutable_bitField0_ |= 0x00000080;
                }
                footnoteHtml_.add(input.readBytes());
                break;
              }
              case 354: {
                if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                  eligibleInstrument_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Instrument>();
                  mutable_bitField0_ |= 0x00000100;
                }
                eligibleInstrument_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Instrument.PARSER, extensionRegistry));
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
            subItem_ = java.util.Collections.unmodifiableList(subItem_);
          }
          if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
            checkoutOption_ = java.util.Collections.unmodifiableList(checkoutOption_);
          }
          if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
            footerHtml_ = new com.google.protobuf.UnmodifiableLazyStringList(footerHtml_);
          }
          if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
            eligibleInstrumentFamily_ = java.util.Collections.unmodifiableList(eligibleInstrumentFamily_);
          }
          if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
            footnoteHtml_ = new com.google.protobuf.UnmodifiableLazyStringList(footnoteHtml_);
          }
          if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
            eligibleInstrument_ = java.util.Collections.unmodifiableList(eligibleInstrument_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_CheckoutInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_CheckoutInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.class, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.Builder.class);
      }

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

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

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

        // optional string formOfPayment = 6;
        /**
         * <code>optional string formOfPayment = 6;</code>
         */
        boolean hasFormOfPayment();
        /**
         * <code>optional string formOfPayment = 6;</code>
         */
        java.lang.String getFormOfPayment();
        /**
         * <code>optional string formOfPayment = 6;</code>
         */
        com.google.protobuf.ByteString
            getFormOfPaymentBytes();

        // optional string encodedAdjustedCart = 7;
        /**
         * <code>optional string encodedAdjustedCart = 7;</code>
         */
        boolean hasEncodedAdjustedCart();
        /**
         * <code>optional string encodedAdjustedCart = 7;</code>
         */
        java.lang.String getEncodedAdjustedCart();
        /**
         * <code>optional string encodedAdjustedCart = 7;</code>
         */
        com.google.protobuf.ByteString
            getEncodedAdjustedCartBytes();

        // optional string instrumentId = 15;
        /**
         * <code>optional string instrumentId = 15;</code>
         */
        boolean hasInstrumentId();
        /**
         * <code>optional string instrumentId = 15;</code>
         */
        java.lang.String getInstrumentId();
        /**
         * <code>optional string instrumentId = 15;</code>
         */
        com.google.protobuf.ByteString
            getInstrumentIdBytes();

        // repeated .LineItem item = 16;
        /**
         * <code>repeated .LineItem item = 16;</code>
         */
        java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> 
            getItemList();
        /**
         * <code>repeated .LineItem item = 16;</code>
         */
        com.akdeniz.googleplaycrawler.GooglePlay.LineItem getItem(int index);
        /**
         * <code>repeated .LineItem item = 16;</code>
         */
        int getItemCount();
        /**
         * <code>repeated .LineItem item = 16;</code>
         */
        java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
            getItemOrBuilderList();
        /**
         * <code>repeated .LineItem item = 16;</code>
         */
        com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getItemOrBuilder(
            int index);

        // repeated .LineItem subItem = 17;
        /**
         * <code>repeated .LineItem subItem = 17;</code>
         */
        java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> 
            getSubItemList();
        /**
         * <code>repeated .LineItem subItem = 17;</code>
         */
        com.akdeniz.googleplaycrawler.GooglePlay.LineItem getSubItem(int index);
        /**
         * <code>repeated .LineItem subItem = 17;</code>
         */
        int getSubItemCount();
        /**
         * <code>repeated .LineItem subItem = 17;</code>
         */
        java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
            getSubItemOrBuilderList();
        /**
         * <code>repeated .LineItem subItem = 17;</code>
         */
        com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getSubItemOrBuilder(
            int index);

        // optional .LineItem total = 18;
        /**
         * <code>optional .LineItem total = 18;</code>
         */
        boolean hasTotal();
        /**
         * <code>optional .LineItem total = 18;</code>
         */
        com.akdeniz.googleplaycrawler.GooglePlay.LineItem getTotal();
        /**
         * <code>optional .LineItem total = 18;</code>
         */
        com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getTotalOrBuilder();

        // repeated string footerHtml = 19;
        /**
         * <code>repeated string footerHtml = 19;</code>
         */
        java.util.List<java.lang.String>
        getFooterHtmlList();
        /**
         * <code>repeated string footerHtml = 19;</code>
         */
        int getFooterHtmlCount();
        /**
         * <code>repeated string footerHtml = 19;</code>
         */
        java.lang.String getFooterHtml(int index);
        /**
         * <code>repeated string footerHtml = 19;</code>
         */
        com.google.protobuf.ByteString
            getFooterHtmlBytes(int index);

        // optional int32 instrumentFamily = 29;
        /**
         * <code>optional int32 instrumentFamily = 29;</code>
         */
        boolean hasInstrumentFamily();
        /**
         * <code>optional int32 instrumentFamily = 29;</code>
         */
        int getInstrumentFamily();

        // repeated int32 deprecatedInstrumentInapplicableReason = 30;
        /**
         * <code>repeated int32 deprecatedInstrumentInapplicableReason = 30;</code>
         */
        java.util.List<java.lang.Integer> getDeprecatedInstrumentInapplicableReasonList();
        /**
         * <code>repeated int32 deprecatedInstrumentInapplicableReason = 30;</code>
         */
        int getDeprecatedInstrumentInapplicableReasonCount();
        /**
         * <code>repeated int32 deprecatedInstrumentInapplicableReason = 30;</code>
         */
        int getDeprecatedInstrumentInapplicableReason(int index);

        // optional bool selectedInstrument = 32;
        /**
         * <code>optional bool selectedInstrument = 32;</code>
         */
        boolean hasSelectedInstrument();
        /**
         * <code>optional bool selectedInstrument = 32;</code>
         */
        boolean getSelectedInstrument();

        // optional .LineItem summary = 33;
        /**
         * <code>optional .LineItem summary = 33;</code>
         */
        boolean hasSummary();
        /**
         * <code>optional .LineItem summary = 33;</code>
         */
        com.akdeniz.googleplaycrawler.GooglePlay.LineItem getSummary();
        /**
         * <code>optional .LineItem summary = 33;</code>
         */
        com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getSummaryOrBuilder();

        // repeated string footnoteHtml = 35;
        /**
         * <code>repeated string footnoteHtml = 35;</code>
         */
        java.util.List<java.lang.String>
        getFootnoteHtmlList();
        /**
         * <code>repeated string footnoteHtml = 35;</code>
         */
        int getFootnoteHtmlCount();
        /**
         * <code>repeated string footnoteHtml = 35;</code>
         */
        java.lang.String getFootnoteHtml(int index);
        /**
         * <code>repeated string footnoteHtml = 35;</code>
         */
        com.google.protobuf.ByteString
            getFootnoteHtmlBytes(int index);

        // optional .Instrument instrument = 43;
        /**
         * <code>optional .Instrument instrument = 43;</code>
         */
        boolean hasInstrument();
        /**
         * <code>optional .Instrument instrument = 43;</code>
         */
        com.akdeniz.googleplaycrawler.GooglePlay.Instrument getInstrument();
        /**
         * <code>optional .Instrument instrument = 43;</code>
         */
        com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder getInstrumentOrBuilder();

        // optional string purchaseCookie = 45;
        /**
         * <code>optional string purchaseCookie = 45;</code>
         */
        boolean hasPurchaseCookie();
        /**
         * <code>optional string purchaseCookie = 45;</code>
         */
        java.lang.String getPurchaseCookie();
        /**
         * <code>optional string purchaseCookie = 45;</code>
         */
        com.google.protobuf.ByteString
            getPurchaseCookieBytes();

        // repeated string disabledReason = 48;
        /**
         * <code>repeated string disabledReason = 48;</code>
         */
        java.util.List<java.lang.String>
        getDisabledReasonList();
        /**
         * <code>repeated string disabledReason = 48;</code>
         */
        int getDisabledReasonCount();
        /**
         * <code>repeated string disabledReason = 48;</code>
         */
        java.lang.String getDisabledReason(int index);
        /**
         * <code>repeated string disabledReason = 48;</code>
         */
        com.google.protobuf.ByteString
            getDisabledReasonBytes(int index);
      }
      /**
       * Protobuf type {@code BuyResponse.CheckoutInfo.CheckoutOption}
       */
      public static final class CheckoutOption extends
          com.google.protobuf.GeneratedMessage
          implements CheckoutOptionOrBuilder {
        // Use CheckoutOption.newBuilder() to construct.
        private CheckoutOption(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
          super(builder);
          this.unknownFields = builder.getUnknownFields();
        }
        private CheckoutOption(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

        public CheckoutOption getDefaultInstanceForType() {
          return defaultInstance;
        }

        private final com.google.protobuf.UnknownFieldSet unknownFields;
        @java.lang.Override
        public final com.google.protobuf.UnknownFieldSet
            getUnknownFields() {
          return this.unknownFields;
        }
        private CheckoutOption(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          initFields();
          int mutable_bitField0_ = 0;
          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
              com.google.protobuf.UnknownFieldSet.newBuilder();
          try {
            boolean done = false;
            while (!done) {
              int tag = input.readTag();
              switch (tag) {
                case 0:
                  done = true;
                  break;
                default: {
                  if (!parseUnknownField(input, unknownFields,
                                         extensionRegistry, tag)) {
                    done = true;
                  }
                  break;
                }
                case 50: {
                  bitField0_ |= 0x00000001;
                  formOfPayment_ = input.readBytes();
                  break;
                }
                case 58: {
                  bitField0_ |= 0x00000002;
                  encodedAdjustedCart_ = input.readBytes();
                  break;
                }
                case 122: {
                  bitField0_ |= 0x00000004;
                  instrumentId_ = input.readBytes();
                  break;
                }
                case 130: {
                  if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                    item_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.LineItem>();
                    mutable_bitField0_ |= 0x00000008;
                  }
                  item_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.LineItem.PARSER, extensionRegistry));
                  break;
                }
                case 138: {
                  if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                    subItem_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.LineItem>();
                    mutable_bitField0_ |= 0x00000010;
                  }
                  subItem_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.LineItem.PARSER, extensionRegistry));
                  break;
                }
                case 146: {
                  com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder subBuilder = null;
                  if (((bitField0_ & 0x00000008) == 0x00000008)) {
                    subBuilder = total_.toBuilder();
                  }
                  total_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.LineItem.PARSER, extensionRegistry);
                  if (subBuilder != null) {
                    subBuilder.mergeFrom(total_);
                    total_ = subBuilder.buildPartial();
                  }
                  bitField0_ |= 0x00000008;
                  break;
                }
                case 154: {
                  if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                    footerHtml_ = new com.google.protobuf.LazyStringArrayList();
                    mutable_bitField0_ |= 0x00000040;
                  }
                  footerHtml_.add(input.readBytes());
                  break;
                }
                case 232: {
                  bitField0_ |= 0x00000010;
                  instrumentFamily_ = input.readInt32();
                  break;
                }
                case 240: {
                  if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                    deprecatedInstrumentInapplicableReason_ = new java.util.ArrayList<java.lang.Integer>();
                    mutable_bitField0_ |= 0x00000100;
                  }
                  deprecatedInstrumentInapplicableReason_.add(input.readInt32());
                  break;
                }
                case 242: {
                  int length = input.readRawVarint32();
                  int limit = input.pushLimit(length);
                  if (!((mutable_bitField0_ & 0x00000100) == 0x00000100) && input.getBytesUntilLimit() > 0) {
                    deprecatedInstrumentInapplicableReason_ = new java.util.ArrayList<java.lang.Integer>();
                    mutable_bitField0_ |= 0x00000100;
                  }
                  while (input.getBytesUntilLimit() > 0) {
                    deprecatedInstrumentInapplicableReason_.add(input.readInt32());
                  }
                  input.popLimit(limit);
                  break;
                }
                case 256: {
                  bitField0_ |= 0x00000020;
                  selectedInstrument_ = input.readBool();
                  break;
                }
                case 266: {
                  com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder subBuilder = null;
                  if (((bitField0_ & 0x00000040) == 0x00000040)) {
                    subBuilder = summary_.toBuilder();
                  }
                  summary_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.LineItem.PARSER, extensionRegistry);
                  if (subBuilder != null) {
                    subBuilder.mergeFrom(summary_);
                    summary_ = subBuilder.buildPartial();
                  }
                  bitField0_ |= 0x00000040;
                  break;
                }
                case 282: {
                  if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
                    footnoteHtml_ = new com.google.protobuf.LazyStringArrayList();
                    mutable_bitField0_ |= 0x00000800;
                  }
                  footnoteHtml_.add(input.readBytes());
                  break;
                }
                case 346: {
                  com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder subBuilder = null;
                  if (((bitField0_ & 0x00000080) == 0x00000080)) {
                    subBuilder = instrument_.toBuilder();
                  }
                  instrument_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Instrument.PARSER, extensionRegistry);
                  if (subBuilder != null) {
                    subBuilder.mergeFrom(instrument_);
                    instrument_ = subBuilder.buildPartial();
                  }
                  bitField0_ |= 0x00000080;
                  break;
                }
                case 362: {
                  bitField0_ |= 0x00000100;
                  purchaseCookie_ = input.readBytes();
                  break;
                }
                case 386: {
                  if (!((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
                    disabledReason_ = new com.google.protobuf.LazyStringArrayList();
                    mutable_bitField0_ |= 0x00004000;
                  }
                  disabledReason_.add(input.readBytes());
                  break;
                }
              }
            }
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            throw e.setUnfinishedMessage(this);
          } catch (java.io.IOException e) {
            throw new com.google.protobuf.InvalidProtocolBufferException(
                e.getMessage()).setUnfinishedMessage(this);
          } finally {
            if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
              item_ = java.util.Collections.unmodifiableList(item_);
            }
            if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
              subItem_ = java.util.Collections.unmodifiableList(subItem_);
            }
            if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
              footerHtml_ = new com.google.protobuf.UnmodifiableLazyStringList(footerHtml_);
            }
            if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
              deprecatedInstrumentInapplicableReason_ = java.util.Collections.unmodifiableList(deprecatedInstrumentInapplicableReason_);
            }
            if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
              footnoteHtml_ = new com.google.protobuf.UnmodifiableLazyStringList(footnoteHtml_);
            }
            if (((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
              disabledReason_ = new com.google.protobuf.UnmodifiableLazyStringList(disabledReason_);
            }
            this.unknownFields = unknownFields.build();
            makeExtensionsImmutable();
          }
        }
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_CheckoutInfo_CheckoutOption_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_CheckoutInfo_CheckoutOption_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.class, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.Builder.class);
        }

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

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

        private int bitField0_;
        // optional string formOfPayment = 6;
        public static final int FORMOFPAYMENT_FIELD_NUMBER = 6;
        private java.lang.Object formOfPayment_;
        /**
         * <code>optional string formOfPayment = 6;</code>
         */
        public boolean hasFormOfPayment() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string formOfPayment = 6;</code>
         */
        public java.lang.String getFormOfPayment() {
          java.lang.Object ref = formOfPayment_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              formOfPayment_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string formOfPayment = 6;</code>
         */
        public com.google.protobuf.ByteString
            getFormOfPaymentBytes() {
          java.lang.Object ref = formOfPayment_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            formOfPayment_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string encodedAdjustedCart = 7;
        public static final int ENCODEDADJUSTEDCART_FIELD_NUMBER = 7;
        private java.lang.Object encodedAdjustedCart_;
        /**
         * <code>optional string encodedAdjustedCart = 7;</code>
         */
        public boolean hasEncodedAdjustedCart() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string encodedAdjustedCart = 7;</code>
         */
        public java.lang.String getEncodedAdjustedCart() {
          java.lang.Object ref = encodedAdjustedCart_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              encodedAdjustedCart_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string encodedAdjustedCart = 7;</code>
         */
        public com.google.protobuf.ByteString
            getEncodedAdjustedCartBytes() {
          java.lang.Object ref = encodedAdjustedCart_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            encodedAdjustedCart_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // optional string instrumentId = 15;
        public static final int INSTRUMENTID_FIELD_NUMBER = 15;
        private java.lang.Object instrumentId_;
        /**
         * <code>optional string instrumentId = 15;</code>
         */
        public boolean hasInstrumentId() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional string instrumentId = 15;</code>
         */
        public java.lang.String getInstrumentId() {
          java.lang.Object ref = instrumentId_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              instrumentId_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string instrumentId = 15;</code>
         */
        public com.google.protobuf.ByteString
            getInstrumentIdBytes() {
          java.lang.Object ref = instrumentId_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            instrumentId_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // repeated .LineItem item = 16;
        public static final int ITEM_FIELD_NUMBER = 16;
        private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> item_;
        /**
         * <code>repeated .LineItem item = 16;</code>
         */
        public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> getItemList() {
          return item_;
        }
        /**
         * <code>repeated .LineItem item = 16;</code>
         */
        public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
            getItemOrBuilderList() {
          return item_;
        }
        /**
         * <code>repeated .LineItem item = 16;</code>
         */
        public int getItemCount() {
          return item_.size();
        }
        /**
         * <code>repeated .LineItem item = 16;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItem getItem(int index) {
          return item_.get(index);
        }
        /**
         * <code>repeated .LineItem item = 16;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getItemOrBuilder(
            int index) {
          return item_.get(index);
        }

        // repeated .LineItem subItem = 17;
        public static final int SUBITEM_FIELD_NUMBER = 17;
        private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> subItem_;
        /**
         * <code>repeated .LineItem subItem = 17;</code>
         */
        public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> getSubItemList() {
          return subItem_;
        }
        /**
         * <code>repeated .LineItem subItem = 17;</code>
         */
        public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
            getSubItemOrBuilderList() {
          return subItem_;
        }
        /**
         * <code>repeated .LineItem subItem = 17;</code>
         */
        public int getSubItemCount() {
          return subItem_.size();
        }
        /**
         * <code>repeated .LineItem subItem = 17;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItem getSubItem(int index) {
          return subItem_.get(index);
        }
        /**
         * <code>repeated .LineItem subItem = 17;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getSubItemOrBuilder(
            int index) {
          return subItem_.get(index);
        }

        // optional .LineItem total = 18;
        public static final int TOTAL_FIELD_NUMBER = 18;
        private com.akdeniz.googleplaycrawler.GooglePlay.LineItem total_;
        /**
         * <code>optional .LineItem total = 18;</code>
         */
        public boolean hasTotal() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional .LineItem total = 18;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItem getTotal() {
          return total_;
        }
        /**
         * <code>optional .LineItem total = 18;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getTotalOrBuilder() {
          return total_;
        }

        // repeated string footerHtml = 19;
        public static final int FOOTERHTML_FIELD_NUMBER = 19;
        private com.google.protobuf.LazyStringList footerHtml_;
        /**
         * <code>repeated string footerHtml = 19;</code>
         */
        public java.util.List<java.lang.String>
            getFooterHtmlList() {
          return footerHtml_;
        }
        /**
         * <code>repeated string footerHtml = 19;</code>
         */
        public int getFooterHtmlCount() {
          return footerHtml_.size();
        }
        /**
         * <code>repeated string footerHtml = 19;</code>
         */
        public java.lang.String getFooterHtml(int index) {
          return footerHtml_.get(index);
        }
        /**
         * <code>repeated string footerHtml = 19;</code>
         */
        public com.google.protobuf.ByteString
            getFooterHtmlBytes(int index) {
          return footerHtml_.getByteString(index);
        }

        // optional int32 instrumentFamily = 29;
        public static final int INSTRUMENTFAMILY_FIELD_NUMBER = 29;
        private int instrumentFamily_;
        /**
         * <code>optional int32 instrumentFamily = 29;</code>
         */
        public boolean hasInstrumentFamily() {
          return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional int32 instrumentFamily = 29;</code>
         */
        public int getInstrumentFamily() {
          return instrumentFamily_;
        }

        // repeated int32 deprecatedInstrumentInapplicableReason = 30;
        public static final int DEPRECATEDINSTRUMENTINAPPLICABLEREASON_FIELD_NUMBER = 30;
        private java.util.List<java.lang.Integer> deprecatedInstrumentInapplicableReason_;
        /**
         * <code>repeated int32 deprecatedInstrumentInapplicableReason = 30;</code>
         */
        public java.util.List<java.lang.Integer>
            getDeprecatedInstrumentInapplicableReasonList() {
          return deprecatedInstrumentInapplicableReason_;
        }
        /**
         * <code>repeated int32 deprecatedInstrumentInapplicableReason = 30;</code>
         */
        public int getDeprecatedInstrumentInapplicableReasonCount() {
          return deprecatedInstrumentInapplicableReason_.size();
        }
        /**
         * <code>repeated int32 deprecatedInstrumentInapplicableReason = 30;</code>
         */
        public int getDeprecatedInstrumentInapplicableReason(int index) {
          return deprecatedInstrumentInapplicableReason_.get(index);
        }

        // optional bool selectedInstrument = 32;
        public static final int SELECTEDINSTRUMENT_FIELD_NUMBER = 32;
        private boolean selectedInstrument_;
        /**
         * <code>optional bool selectedInstrument = 32;</code>
         */
        public boolean hasSelectedInstrument() {
          return ((bitField0_ & 0x00000020) == 0x00000020);
        }
        /**
         * <code>optional bool selectedInstrument = 32;</code>
         */
        public boolean getSelectedInstrument() {
          return selectedInstrument_;
        }

        // optional .LineItem summary = 33;
        public static final int SUMMARY_FIELD_NUMBER = 33;
        private com.akdeniz.googleplaycrawler.GooglePlay.LineItem summary_;
        /**
         * <code>optional .LineItem summary = 33;</code>
         */
        public boolean hasSummary() {
          return ((bitField0_ & 0x00000040) == 0x00000040);
        }
        /**
         * <code>optional .LineItem summary = 33;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItem getSummary() {
          return summary_;
        }
        /**
         * <code>optional .LineItem summary = 33;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getSummaryOrBuilder() {
          return summary_;
        }

        // repeated string footnoteHtml = 35;
        public static final int FOOTNOTEHTML_FIELD_NUMBER = 35;
        private com.google.protobuf.LazyStringList footnoteHtml_;
        /**
         * <code>repeated string footnoteHtml = 35;</code>
         */
        public java.util.List<java.lang.String>
            getFootnoteHtmlList() {
          return footnoteHtml_;
        }
        /**
         * <code>repeated string footnoteHtml = 35;</code>
         */
        public int getFootnoteHtmlCount() {
          return footnoteHtml_.size();
        }
        /**
         * <code>repeated string footnoteHtml = 35;</code>
         */
        public java.lang.String getFootnoteHtml(int index) {
          return footnoteHtml_.get(index);
        }
        /**
         * <code>repeated string footnoteHtml = 35;</code>
         */
        public com.google.protobuf.ByteString
            getFootnoteHtmlBytes(int index) {
          return footnoteHtml_.getByteString(index);
        }

        // optional .Instrument instrument = 43;
        public static final int INSTRUMENT_FIELD_NUMBER = 43;
        private com.akdeniz.googleplaycrawler.GooglePlay.Instrument instrument_;
        /**
         * <code>optional .Instrument instrument = 43;</code>
         */
        public boolean hasInstrument() {
          return ((bitField0_ & 0x00000080) == 0x00000080);
        }
        /**
         * <code>optional .Instrument instrument = 43;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.Instrument getInstrument() {
          return instrument_;
        }
        /**
         * <code>optional .Instrument instrument = 43;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder getInstrumentOrBuilder() {
          return instrument_;
        }

        // optional string purchaseCookie = 45;
        public static final int PURCHASECOOKIE_FIELD_NUMBER = 45;
        private java.lang.Object purchaseCookie_;
        /**
         * <code>optional string purchaseCookie = 45;</code>
         */
        public boolean hasPurchaseCookie() {
          return ((bitField0_ & 0x00000100) == 0x00000100);
        }
        /**
         * <code>optional string purchaseCookie = 45;</code>
         */
        public java.lang.String getPurchaseCookie() {
          java.lang.Object ref = purchaseCookie_;
          if (ref instanceof java.lang.String) {
            return (java.lang.String) ref;
          } else {
            com.google.protobuf.ByteString bs = 
                (com.google.protobuf.ByteString) ref;
            java.lang.String s = bs.toStringUtf8();
            if (bs.isValidUtf8()) {
              purchaseCookie_ = s;
            }
            return s;
          }
        }
        /**
         * <code>optional string purchaseCookie = 45;</code>
         */
        public com.google.protobuf.ByteString
            getPurchaseCookieBytes() {
          java.lang.Object ref = purchaseCookie_;
          if (ref instanceof java.lang.String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            purchaseCookie_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }

        // repeated string disabledReason = 48;
        public static final int DISABLEDREASON_FIELD_NUMBER = 48;
        private com.google.protobuf.LazyStringList disabledReason_;
        /**
         * <code>repeated string disabledReason = 48;</code>
         */
        public java.util.List<java.lang.String>
            getDisabledReasonList() {
          return disabledReason_;
        }
        /**
         * <code>repeated string disabledReason = 48;</code>
         */
        public int getDisabledReasonCount() {
          return disabledReason_.size();
        }
        /**
         * <code>repeated string disabledReason = 48;</code>
         */
        public java.lang.String getDisabledReason(int index) {
          return disabledReason_.get(index);
        }
        /**
         * <code>repeated string disabledReason = 48;</code>
         */
        public com.google.protobuf.ByteString
            getDisabledReasonBytes(int index) {
          return disabledReason_.getByteString(index);
        }

        private void initFields() {
          formOfPayment_ = "";
          encodedAdjustedCart_ = "";
          instrumentId_ = "";
          item_ = java.util.Collections.emptyList();
          subItem_ = java.util.Collections.emptyList();
          total_ = com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance();
          footerHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          instrumentFamily_ = 0;
          deprecatedInstrumentInapplicableReason_ = java.util.Collections.emptyList();
          selectedInstrument_ = false;
          summary_ = com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance();
          footnoteHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          instrument_ = com.akdeniz.googleplaycrawler.GooglePlay.Instrument.getDefaultInstance();
          purchaseCookie_ = "";
          disabledReason_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        }
        private byte memoizedIsInitialized = -1;
        public final boolean isInitialized() {
          byte isInitialized = memoizedIsInitialized;
          if (isInitialized != -1) return isInitialized == 1;

          memoizedIsInitialized = 1;
          return true;
        }

        public void writeTo(com.google.protobuf.CodedOutputStream output)
                            throws java.io.IOException {
          getSerializedSize();
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            output.writeBytes(6, getFormOfPaymentBytes());
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            output.writeBytes(7, getEncodedAdjustedCartBytes());
          }
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            output.writeBytes(15, getInstrumentIdBytes());
          }
          for (int i = 0; i < item_.size(); i++) {
            output.writeMessage(16, item_.get(i));
          }
          for (int i = 0; i < subItem_.size(); i++) {
            output.writeMessage(17, subItem_.get(i));
          }
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            output.writeMessage(18, total_);
          }
          for (int i = 0; i < footerHtml_.size(); i++) {
            output.writeBytes(19, footerHtml_.getByteString(i));
          }
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            output.writeInt32(29, instrumentFamily_);
          }
          for (int i = 0; i < deprecatedInstrumentInapplicableReason_.size(); i++) {
            output.writeInt32(30, deprecatedInstrumentInapplicableReason_.get(i));
          }
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            output.writeBool(32, selectedInstrument_);
          }
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            output.writeMessage(33, summary_);
          }
          for (int i = 0; i < footnoteHtml_.size(); i++) {
            output.writeBytes(35, footnoteHtml_.getByteString(i));
          }
          if (((bitField0_ & 0x00000080) == 0x00000080)) {
            output.writeMessage(43, instrument_);
          }
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            output.writeBytes(45, getPurchaseCookieBytes());
          }
          for (int i = 0; i < disabledReason_.size(); i++) {
            output.writeBytes(48, disabledReason_.getByteString(i));
          }
          getUnknownFields().writeTo(output);
        }

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

          size = 0;
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(6, getFormOfPaymentBytes());
          }
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(7, getEncodedAdjustedCartBytes());
          }
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(15, getInstrumentIdBytes());
          }
          for (int i = 0; i < item_.size(); i++) {
            size += com.google.protobuf.CodedOutputStream
              .computeMessageSize(16, item_.get(i));
          }
          for (int i = 0; i < subItem_.size(); i++) {
            size += com.google.protobuf.CodedOutputStream
              .computeMessageSize(17, subItem_.get(i));
          }
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            size += com.google.protobuf.CodedOutputStream
              .computeMessageSize(18, total_);
          }
          {
            int dataSize = 0;
            for (int i = 0; i < footerHtml_.size(); i++) {
              dataSize += com.google.protobuf.CodedOutputStream
                .computeBytesSizeNoTag(footerHtml_.getByteString(i));
            }
            size += dataSize;
            size += 2 * getFooterHtmlList().size();
          }
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            size += com.google.protobuf.CodedOutputStream
              .computeInt32Size(29, instrumentFamily_);
          }
          {
            int dataSize = 0;
            for (int i = 0; i < deprecatedInstrumentInapplicableReason_.size(); i++) {
              dataSize += com.google.protobuf.CodedOutputStream
                .computeInt32SizeNoTag(deprecatedInstrumentInapplicableReason_.get(i));
            }
            size += dataSize;
            size += 2 * getDeprecatedInstrumentInapplicableReasonList().size();
          }
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBoolSize(32, selectedInstrument_);
          }
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            size += com.google.protobuf.CodedOutputStream
              .computeMessageSize(33, summary_);
          }
          {
            int dataSize = 0;
            for (int i = 0; i < footnoteHtml_.size(); i++) {
              dataSize += com.google.protobuf.CodedOutputStream
                .computeBytesSizeNoTag(footnoteHtml_.getByteString(i));
            }
            size += dataSize;
            size += 2 * getFootnoteHtmlList().size();
          }
          if (((bitField0_ & 0x00000080) == 0x00000080)) {
            size += com.google.protobuf.CodedOutputStream
              .computeMessageSize(43, instrument_);
          }
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            size += com.google.protobuf.CodedOutputStream
              .computeBytesSize(45, getPurchaseCookieBytes());
          }
          {
            int dataSize = 0;
            for (int i = 0; i < disabledReason_.size(); i++) {
              dataSize += com.google.protobuf.CodedOutputStream
                .computeBytesSizeNoTag(disabledReason_.getByteString(i));
            }
            size += dataSize;
            size += 2 * getDisabledReasonList().size();
          }
          size += getUnknownFields().getSerializedSize();
          memoizedSerializedSize = size;
          return size;
        }

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

        public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption parseFrom(
            com.google.protobuf.ByteString data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption parseFrom(
            com.google.protobuf.ByteString data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption parseFrom(byte[] data)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data);
        }
        public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption parseFrom(
            byte[] data,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return PARSER.parseFrom(data, extensionRegistry);
        }
        public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption parseFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption parseFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }
        public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption parseDelimitedFrom(java.io.InputStream input)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input);
        }
        public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption parseDelimitedFrom(
            java.io.InputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseDelimitedFrom(input, extensionRegistry);
        }
        public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption parseFrom(
            com.google.protobuf.CodedInputStream input)
            throws java.io.IOException {
          return PARSER.parseFrom(input);
        }
        public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption parseFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          return PARSER.parseFrom(input, extensionRegistry);
        }

        public static Builder newBuilder() { return Builder.create(); }
        public Builder newBuilderForType() { return newBuilder(); }
        public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption prototype) {
          return newBuilder().mergeFrom(prototype);
        }
        public Builder toBuilder() { return newBuilder(this); }

        @java.lang.Override
        protected Builder newBuilderForType(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          Builder builder = new Builder(parent);
          return builder;
        }
        /**
         * Protobuf type {@code BuyResponse.CheckoutInfo.CheckoutOption}
         */
        public static final class Builder extends
            com.google.protobuf.GeneratedMessage.Builder<Builder>
           implements com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOptionOrBuilder {
          public static final com.google.protobuf.Descriptors.Descriptor
              getDescriptor() {
            return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_CheckoutInfo_CheckoutOption_descriptor;
          }

          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
              internalGetFieldAccessorTable() {
            return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_CheckoutInfo_CheckoutOption_fieldAccessorTable
                .ensureFieldAccessorsInitialized(
                    com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.class, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.Builder.class);
          }

          // Construct using com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.newBuilder()
          private Builder() {
            maybeForceBuilderInitialization();
          }

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

          public Builder clear() {
            super.clear();
            formOfPayment_ = "";
            bitField0_ = (bitField0_ & ~0x00000001);
            encodedAdjustedCart_ = "";
            bitField0_ = (bitField0_ & ~0x00000002);
            instrumentId_ = "";
            bitField0_ = (bitField0_ & ~0x00000004);
            if (itemBuilder_ == null) {
              item_ = java.util.Collections.emptyList();
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              itemBuilder_.clear();
            }
            if (subItemBuilder_ == null) {
              subItem_ = java.util.Collections.emptyList();
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              subItemBuilder_.clear();
            }
            if (totalBuilder_ == null) {
              total_ = com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance();
            } else {
              totalBuilder_.clear();
            }
            bitField0_ = (bitField0_ & ~0x00000020);
            footerHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            bitField0_ = (bitField0_ & ~0x00000040);
            instrumentFamily_ = 0;
            bitField0_ = (bitField0_ & ~0x00000080);
            deprecatedInstrumentInapplicableReason_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000100);
            selectedInstrument_ = false;
            bitField0_ = (bitField0_ & ~0x00000200);
            if (summaryBuilder_ == null) {
              summary_ = com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance();
            } else {
              summaryBuilder_.clear();
            }
            bitField0_ = (bitField0_ & ~0x00000400);
            footnoteHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            bitField0_ = (bitField0_ & ~0x00000800);
            if (instrumentBuilder_ == null) {
              instrument_ = com.akdeniz.googleplaycrawler.GooglePlay.Instrument.getDefaultInstance();
            } else {
              instrumentBuilder_.clear();
            }
            bitField0_ = (bitField0_ & ~0x00001000);
            purchaseCookie_ = "";
            bitField0_ = (bitField0_ & ~0x00002000);
            disabledReason_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            bitField0_ = (bitField0_ & ~0x00004000);
            return this;
          }

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

          public com.google.protobuf.Descriptors.Descriptor
              getDescriptorForType() {
            return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_CheckoutInfo_CheckoutOption_descriptor;
          }

          public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption getDefaultInstanceForType() {
            return com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.getDefaultInstance();
          }

          public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption build() {
            com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption result = buildPartial();
            if (!result.isInitialized()) {
              throw newUninitializedMessageException(result);
            }
            return result;
          }

          public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption buildPartial() {
            com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption result = new com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption(this);
            int from_bitField0_ = bitField0_;
            int to_bitField0_ = 0;
            if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
              to_bitField0_ |= 0x00000001;
            }
            result.formOfPayment_ = formOfPayment_;
            if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
              to_bitField0_ |= 0x00000002;
            }
            result.encodedAdjustedCart_ = encodedAdjustedCart_;
            if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
              to_bitField0_ |= 0x00000004;
            }
            result.instrumentId_ = instrumentId_;
            if (itemBuilder_ == null) {
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                item_ = java.util.Collections.unmodifiableList(item_);
                bitField0_ = (bitField0_ & ~0x00000008);
              }
              result.item_ = item_;
            } else {
              result.item_ = itemBuilder_.build();
            }
            if (subItemBuilder_ == null) {
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subItem_ = java.util.Collections.unmodifiableList(subItem_);
                bitField0_ = (bitField0_ & ~0x00000010);
              }
              result.subItem_ = subItem_;
            } else {
              result.subItem_ = subItemBuilder_.build();
            }
            if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
              to_bitField0_ |= 0x00000008;
            }
            if (totalBuilder_ == null) {
              result.total_ = total_;
            } else {
              result.total_ = totalBuilder_.build();
            }
            if (((bitField0_ & 0x00000040) == 0x00000040)) {
              footerHtml_ = new com.google.protobuf.UnmodifiableLazyStringList(
                  footerHtml_);
              bitField0_ = (bitField0_ & ~0x00000040);
            }
            result.footerHtml_ = footerHtml_;
            if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
              to_bitField0_ |= 0x00000010;
            }
            result.instrumentFamily_ = instrumentFamily_;
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
              deprecatedInstrumentInapplicableReason_ = java.util.Collections.unmodifiableList(deprecatedInstrumentInapplicableReason_);
              bitField0_ = (bitField0_ & ~0x00000100);
            }
            result.deprecatedInstrumentInapplicableReason_ = deprecatedInstrumentInapplicableReason_;
            if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
              to_bitField0_ |= 0x00000020;
            }
            result.selectedInstrument_ = selectedInstrument_;
            if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
              to_bitField0_ |= 0x00000040;
            }
            if (summaryBuilder_ == null) {
              result.summary_ = summary_;
            } else {
              result.summary_ = summaryBuilder_.build();
            }
            if (((bitField0_ & 0x00000800) == 0x00000800)) {
              footnoteHtml_ = new com.google.protobuf.UnmodifiableLazyStringList(
                  footnoteHtml_);
              bitField0_ = (bitField0_ & ~0x00000800);
            }
            result.footnoteHtml_ = footnoteHtml_;
            if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
              to_bitField0_ |= 0x00000080;
            }
            if (instrumentBuilder_ == null) {
              result.instrument_ = instrument_;
            } else {
              result.instrument_ = instrumentBuilder_.build();
            }
            if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
              to_bitField0_ |= 0x00000100;
            }
            result.purchaseCookie_ = purchaseCookie_;
            if (((bitField0_ & 0x00004000) == 0x00004000)) {
              disabledReason_ = new com.google.protobuf.UnmodifiableLazyStringList(
                  disabledReason_);
              bitField0_ = (bitField0_ & ~0x00004000);
            }
            result.disabledReason_ = disabledReason_;
            result.bitField0_ = to_bitField0_;
            onBuilt();
            return result;
          }

          public Builder mergeFrom(com.google.protobuf.Message other) {
            if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption) {
              return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption)other);
            } else {
              super.mergeFrom(other);
              return this;
            }
          }

          public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption other) {
            if (other == com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.getDefaultInstance()) return this;
            if (other.hasFormOfPayment()) {
              bitField0_ |= 0x00000001;
              formOfPayment_ = other.formOfPayment_;
              onChanged();
            }
            if (other.hasEncodedAdjustedCart()) {
              bitField0_ |= 0x00000002;
              encodedAdjustedCart_ = other.encodedAdjustedCart_;
              onChanged();
            }
            if (other.hasInstrumentId()) {
              bitField0_ |= 0x00000004;
              instrumentId_ = other.instrumentId_;
              onChanged();
            }
            if (itemBuilder_ == null) {
              if (!other.item_.isEmpty()) {
                if (item_.isEmpty()) {
                  item_ = other.item_;
                  bitField0_ = (bitField0_ & ~0x00000008);
                } else {
                  ensureItemIsMutable();
                  item_.addAll(other.item_);
                }
                onChanged();
              }
            } else {
              if (!other.item_.isEmpty()) {
                if (itemBuilder_.isEmpty()) {
                  itemBuilder_.dispose();
                  itemBuilder_ = null;
                  item_ = other.item_;
                  bitField0_ = (bitField0_ & ~0x00000008);
                  itemBuilder_ = 
                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                       getItemFieldBuilder() : null;
                } else {
                  itemBuilder_.addAllMessages(other.item_);
                }
              }
            }
            if (subItemBuilder_ == null) {
              if (!other.subItem_.isEmpty()) {
                if (subItem_.isEmpty()) {
                  subItem_ = other.subItem_;
                  bitField0_ = (bitField0_ & ~0x00000010);
                } else {
                  ensureSubItemIsMutable();
                  subItem_.addAll(other.subItem_);
                }
                onChanged();
              }
            } else {
              if (!other.subItem_.isEmpty()) {
                if (subItemBuilder_.isEmpty()) {
                  subItemBuilder_.dispose();
                  subItemBuilder_ = null;
                  subItem_ = other.subItem_;
                  bitField0_ = (bitField0_ & ~0x00000010);
                  subItemBuilder_ = 
                    com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                       getSubItemFieldBuilder() : null;
                } else {
                  subItemBuilder_.addAllMessages(other.subItem_);
                }
              }
            }
            if (other.hasTotal()) {
              mergeTotal(other.getTotal());
            }
            if (!other.footerHtml_.isEmpty()) {
              if (footerHtml_.isEmpty()) {
                footerHtml_ = other.footerHtml_;
                bitField0_ = (bitField0_ & ~0x00000040);
              } else {
                ensureFooterHtmlIsMutable();
                footerHtml_.addAll(other.footerHtml_);
              }
              onChanged();
            }
            if (other.hasInstrumentFamily()) {
              setInstrumentFamily(other.getInstrumentFamily());
            }
            if (!other.deprecatedInstrumentInapplicableReason_.isEmpty()) {
              if (deprecatedInstrumentInapplicableReason_.isEmpty()) {
                deprecatedInstrumentInapplicableReason_ = other.deprecatedInstrumentInapplicableReason_;
                bitField0_ = (bitField0_ & ~0x00000100);
              } else {
                ensureDeprecatedInstrumentInapplicableReasonIsMutable();
                deprecatedInstrumentInapplicableReason_.addAll(other.deprecatedInstrumentInapplicableReason_);
              }
              onChanged();
            }
            if (other.hasSelectedInstrument()) {
              setSelectedInstrument(other.getSelectedInstrument());
            }
            if (other.hasSummary()) {
              mergeSummary(other.getSummary());
            }
            if (!other.footnoteHtml_.isEmpty()) {
              if (footnoteHtml_.isEmpty()) {
                footnoteHtml_ = other.footnoteHtml_;
                bitField0_ = (bitField0_ & ~0x00000800);
              } else {
                ensureFootnoteHtmlIsMutable();
                footnoteHtml_.addAll(other.footnoteHtml_);
              }
              onChanged();
            }
            if (other.hasInstrument()) {
              mergeInstrument(other.getInstrument());
            }
            if (other.hasPurchaseCookie()) {
              bitField0_ |= 0x00002000;
              purchaseCookie_ = other.purchaseCookie_;
              onChanged();
            }
            if (!other.disabledReason_.isEmpty()) {
              if (disabledReason_.isEmpty()) {
                disabledReason_ = other.disabledReason_;
                bitField0_ = (bitField0_ & ~0x00004000);
              } else {
                ensureDisabledReasonIsMutable();
                disabledReason_.addAll(other.disabledReason_);
              }
              onChanged();
            }
            this.mergeUnknownFields(other.getUnknownFields());
            return this;
          }

          public final boolean isInitialized() {
            return true;
          }

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

          // optional string formOfPayment = 6;
          private java.lang.Object formOfPayment_ = "";
          /**
           * <code>optional string formOfPayment = 6;</code>
           */
          public boolean hasFormOfPayment() {
            return ((bitField0_ & 0x00000001) == 0x00000001);
          }
          /**
           * <code>optional string formOfPayment = 6;</code>
           */
          public java.lang.String getFormOfPayment() {
            java.lang.Object ref = formOfPayment_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              formOfPayment_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string formOfPayment = 6;</code>
           */
          public com.google.protobuf.ByteString
              getFormOfPaymentBytes() {
            java.lang.Object ref = formOfPayment_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              formOfPayment_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string formOfPayment = 6;</code>
           */
          public Builder setFormOfPayment(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
            formOfPayment_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string formOfPayment = 6;</code>
           */
          public Builder clearFormOfPayment() {
            bitField0_ = (bitField0_ & ~0x00000001);
            formOfPayment_ = getDefaultInstance().getFormOfPayment();
            onChanged();
            return this;
          }
          /**
           * <code>optional string formOfPayment = 6;</code>
           */
          public Builder setFormOfPaymentBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
            formOfPayment_ = value;
            onChanged();
            return this;
          }

          // optional string encodedAdjustedCart = 7;
          private java.lang.Object encodedAdjustedCart_ = "";
          /**
           * <code>optional string encodedAdjustedCart = 7;</code>
           */
          public boolean hasEncodedAdjustedCart() {
            return ((bitField0_ & 0x00000002) == 0x00000002);
          }
          /**
           * <code>optional string encodedAdjustedCart = 7;</code>
           */
          public java.lang.String getEncodedAdjustedCart() {
            java.lang.Object ref = encodedAdjustedCart_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              encodedAdjustedCart_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string encodedAdjustedCart = 7;</code>
           */
          public com.google.protobuf.ByteString
              getEncodedAdjustedCartBytes() {
            java.lang.Object ref = encodedAdjustedCart_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              encodedAdjustedCart_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string encodedAdjustedCart = 7;</code>
           */
          public Builder setEncodedAdjustedCart(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
            encodedAdjustedCart_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string encodedAdjustedCart = 7;</code>
           */
          public Builder clearEncodedAdjustedCart() {
            bitField0_ = (bitField0_ & ~0x00000002);
            encodedAdjustedCart_ = getDefaultInstance().getEncodedAdjustedCart();
            onChanged();
            return this;
          }
          /**
           * <code>optional string encodedAdjustedCart = 7;</code>
           */
          public Builder setEncodedAdjustedCartBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
            encodedAdjustedCart_ = value;
            onChanged();
            return this;
          }

          // optional string instrumentId = 15;
          private java.lang.Object instrumentId_ = "";
          /**
           * <code>optional string instrumentId = 15;</code>
           */
          public boolean hasInstrumentId() {
            return ((bitField0_ & 0x00000004) == 0x00000004);
          }
          /**
           * <code>optional string instrumentId = 15;</code>
           */
          public java.lang.String getInstrumentId() {
            java.lang.Object ref = instrumentId_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              instrumentId_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string instrumentId = 15;</code>
           */
          public com.google.protobuf.ByteString
              getInstrumentIdBytes() {
            java.lang.Object ref = instrumentId_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              instrumentId_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string instrumentId = 15;</code>
           */
          public Builder setInstrumentId(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
            instrumentId_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string instrumentId = 15;</code>
           */
          public Builder clearInstrumentId() {
            bitField0_ = (bitField0_ & ~0x00000004);
            instrumentId_ = getDefaultInstance().getInstrumentId();
            onChanged();
            return this;
          }
          /**
           * <code>optional string instrumentId = 15;</code>
           */
          public Builder setInstrumentIdBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
            instrumentId_ = value;
            onChanged();
            return this;
          }

          // repeated .LineItem item = 16;
          private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> item_ =
            java.util.Collections.emptyList();
          private void ensureItemIsMutable() {
            if (!((bitField0_ & 0x00000008) == 0x00000008)) {
              item_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.LineItem>(item_);
              bitField0_ |= 0x00000008;
             }
          }

          private com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> itemBuilder_;

          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> getItemList() {
            if (itemBuilder_ == null) {
              return java.util.Collections.unmodifiableList(item_);
            } else {
              return itemBuilder_.getMessageList();
            }
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public int getItemCount() {
            if (itemBuilder_ == null) {
              return item_.size();
            } else {
              return itemBuilder_.getCount();
            }
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItem getItem(int index) {
            if (itemBuilder_ == null) {
              return item_.get(index);
            } else {
              return itemBuilder_.getMessage(index);
            }
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public Builder setItem(
              int index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
            if (itemBuilder_ == null) {
              if (value == null) {
                throw new NullPointerException();
              }
              ensureItemIsMutable();
              item_.set(index, value);
              onChanged();
            } else {
              itemBuilder_.setMessage(index, value);
            }
            return this;
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public Builder setItem(
              int index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder builderForValue) {
            if (itemBuilder_ == null) {
              ensureItemIsMutable();
              item_.set(index, builderForValue.build());
              onChanged();
            } else {
              itemBuilder_.setMessage(index, builderForValue.build());
            }
            return this;
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public Builder addItem(com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
            if (itemBuilder_ == null) {
              if (value == null) {
                throw new NullPointerException();
              }
              ensureItemIsMutable();
              item_.add(value);
              onChanged();
            } else {
              itemBuilder_.addMessage(value);
            }
            return this;
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public Builder addItem(
              int index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
            if (itemBuilder_ == null) {
              if (value == null) {
                throw new NullPointerException();
              }
              ensureItemIsMutable();
              item_.add(index, value);
              onChanged();
            } else {
              itemBuilder_.addMessage(index, value);
            }
            return this;
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public Builder addItem(
              com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder builderForValue) {
            if (itemBuilder_ == null) {
              ensureItemIsMutable();
              item_.add(builderForValue.build());
              onChanged();
            } else {
              itemBuilder_.addMessage(builderForValue.build());
            }
            return this;
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public Builder addItem(
              int index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder builderForValue) {
            if (itemBuilder_ == null) {
              ensureItemIsMutable();
              item_.add(index, builderForValue.build());
              onChanged();
            } else {
              itemBuilder_.addMessage(index, builderForValue.build());
            }
            return this;
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public Builder addAllItem(
              java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.LineItem> values) {
            if (itemBuilder_ == null) {
              ensureItemIsMutable();
              super.addAll(values, item_);
              onChanged();
            } else {
              itemBuilder_.addAllMessages(values);
            }
            return this;
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public Builder clearItem() {
            if (itemBuilder_ == null) {
              item_ = java.util.Collections.emptyList();
              bitField0_ = (bitField0_ & ~0x00000008);
              onChanged();
            } else {
              itemBuilder_.clear();
            }
            return this;
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public Builder removeItem(int index) {
            if (itemBuilder_ == null) {
              ensureItemIsMutable();
              item_.remove(index);
              onChanged();
            } else {
              itemBuilder_.remove(index);
            }
            return this;
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder getItemBuilder(
              int index) {
            return getItemFieldBuilder().getBuilder(index);
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getItemOrBuilder(
              int index) {
            if (itemBuilder_ == null) {
              return item_.get(index);  } else {
              return itemBuilder_.getMessageOrBuilder(index);
            }
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
               getItemOrBuilderList() {
            if (itemBuilder_ != null) {
              return itemBuilder_.getMessageOrBuilderList();
            } else {
              return java.util.Collections.unmodifiableList(item_);
            }
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder addItemBuilder() {
            return getItemFieldBuilder().addBuilder(
                com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance());
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder addItemBuilder(
              int index) {
            return getItemFieldBuilder().addBuilder(
                index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance());
          }
          /**
           * <code>repeated .LineItem item = 16;</code>
           */
          public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder> 
               getItemBuilderList() {
            return getItemFieldBuilder().getBuilderList();
          }
          private com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
              getItemFieldBuilder() {
            if (itemBuilder_ == null) {
              itemBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                  com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder>(
                      item_,
                      ((bitField0_ & 0x00000008) == 0x00000008),
                      getParentForChildren(),
                      isClean());
              item_ = null;
            }
            return itemBuilder_;
          }

          // repeated .LineItem subItem = 17;
          private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> subItem_ =
            java.util.Collections.emptyList();
          private void ensureSubItemIsMutable() {
            if (!((bitField0_ & 0x00000010) == 0x00000010)) {
              subItem_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.LineItem>(subItem_);
              bitField0_ |= 0x00000010;
             }
          }

          private com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> subItemBuilder_;

          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> getSubItemList() {
            if (subItemBuilder_ == null) {
              return java.util.Collections.unmodifiableList(subItem_);
            } else {
              return subItemBuilder_.getMessageList();
            }
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public int getSubItemCount() {
            if (subItemBuilder_ == null) {
              return subItem_.size();
            } else {
              return subItemBuilder_.getCount();
            }
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItem getSubItem(int index) {
            if (subItemBuilder_ == null) {
              return subItem_.get(index);
            } else {
              return subItemBuilder_.getMessage(index);
            }
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public Builder setSubItem(
              int index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
            if (subItemBuilder_ == null) {
              if (value == null) {
                throw new NullPointerException();
              }
              ensureSubItemIsMutable();
              subItem_.set(index, value);
              onChanged();
            } else {
              subItemBuilder_.setMessage(index, value);
            }
            return this;
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public Builder setSubItem(
              int index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder builderForValue) {
            if (subItemBuilder_ == null) {
              ensureSubItemIsMutable();
              subItem_.set(index, builderForValue.build());
              onChanged();
            } else {
              subItemBuilder_.setMessage(index, builderForValue.build());
            }
            return this;
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public Builder addSubItem(com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
            if (subItemBuilder_ == null) {
              if (value == null) {
                throw new NullPointerException();
              }
              ensureSubItemIsMutable();
              subItem_.add(value);
              onChanged();
            } else {
              subItemBuilder_.addMessage(value);
            }
            return this;
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public Builder addSubItem(
              int index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
            if (subItemBuilder_ == null) {
              if (value == null) {
                throw new NullPointerException();
              }
              ensureSubItemIsMutable();
              subItem_.add(index, value);
              onChanged();
            } else {
              subItemBuilder_.addMessage(index, value);
            }
            return this;
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public Builder addSubItem(
              com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder builderForValue) {
            if (subItemBuilder_ == null) {
              ensureSubItemIsMutable();
              subItem_.add(builderForValue.build());
              onChanged();
            } else {
              subItemBuilder_.addMessage(builderForValue.build());
            }
            return this;
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public Builder addSubItem(
              int index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder builderForValue) {
            if (subItemBuilder_ == null) {
              ensureSubItemIsMutable();
              subItem_.add(index, builderForValue.build());
              onChanged();
            } else {
              subItemBuilder_.addMessage(index, builderForValue.build());
            }
            return this;
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public Builder addAllSubItem(
              java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.LineItem> values) {
            if (subItemBuilder_ == null) {
              ensureSubItemIsMutable();
              super.addAll(values, subItem_);
              onChanged();
            } else {
              subItemBuilder_.addAllMessages(values);
            }
            return this;
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public Builder clearSubItem() {
            if (subItemBuilder_ == null) {
              subItem_ = java.util.Collections.emptyList();
              bitField0_ = (bitField0_ & ~0x00000010);
              onChanged();
            } else {
              subItemBuilder_.clear();
            }
            return this;
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public Builder removeSubItem(int index) {
            if (subItemBuilder_ == null) {
              ensureSubItemIsMutable();
              subItem_.remove(index);
              onChanged();
            } else {
              subItemBuilder_.remove(index);
            }
            return this;
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder getSubItemBuilder(
              int index) {
            return getSubItemFieldBuilder().getBuilder(index);
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getSubItemOrBuilder(
              int index) {
            if (subItemBuilder_ == null) {
              return subItem_.get(index);  } else {
              return subItemBuilder_.getMessageOrBuilder(index);
            }
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
               getSubItemOrBuilderList() {
            if (subItemBuilder_ != null) {
              return subItemBuilder_.getMessageOrBuilderList();
            } else {
              return java.util.Collections.unmodifiableList(subItem_);
            }
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder addSubItemBuilder() {
            return getSubItemFieldBuilder().addBuilder(
                com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance());
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder addSubItemBuilder(
              int index) {
            return getSubItemFieldBuilder().addBuilder(
                index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance());
          }
          /**
           * <code>repeated .LineItem subItem = 17;</code>
           */
          public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder> 
               getSubItemBuilderList() {
            return getSubItemFieldBuilder().getBuilderList();
          }
          private com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
              getSubItemFieldBuilder() {
            if (subItemBuilder_ == null) {
              subItemBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                  com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder>(
                      subItem_,
                      ((bitField0_ & 0x00000010) == 0x00000010),
                      getParentForChildren(),
                      isClean());
              subItem_ = null;
            }
            return subItemBuilder_;
          }

          // optional .LineItem total = 18;
          private com.akdeniz.googleplaycrawler.GooglePlay.LineItem total_ = com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance();
          private com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> totalBuilder_;
          /**
           * <code>optional .LineItem total = 18;</code>
           */
          public boolean hasTotal() {
            return ((bitField0_ & 0x00000020) == 0x00000020);
          }
          /**
           * <code>optional .LineItem total = 18;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItem getTotal() {
            if (totalBuilder_ == null) {
              return total_;
            } else {
              return totalBuilder_.getMessage();
            }
          }
          /**
           * <code>optional .LineItem total = 18;</code>
           */
          public Builder setTotal(com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
            if (totalBuilder_ == null) {
              if (value == null) {
                throw new NullPointerException();
              }
              total_ = value;
              onChanged();
            } else {
              totalBuilder_.setMessage(value);
            }
            bitField0_ |= 0x00000020;
            return this;
          }
          /**
           * <code>optional .LineItem total = 18;</code>
           */
          public Builder setTotal(
              com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder builderForValue) {
            if (totalBuilder_ == null) {
              total_ = builderForValue.build();
              onChanged();
            } else {
              totalBuilder_.setMessage(builderForValue.build());
            }
            bitField0_ |= 0x00000020;
            return this;
          }
          /**
           * <code>optional .LineItem total = 18;</code>
           */
          public Builder mergeTotal(com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
            if (totalBuilder_ == null) {
              if (((bitField0_ & 0x00000020) == 0x00000020) &&
                  total_ != com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance()) {
                total_ =
                  com.akdeniz.googleplaycrawler.GooglePlay.LineItem.newBuilder(total_).mergeFrom(value).buildPartial();
              } else {
                total_ = value;
              }
              onChanged();
            } else {
              totalBuilder_.mergeFrom(value);
            }
            bitField0_ |= 0x00000020;
            return this;
          }
          /**
           * <code>optional .LineItem total = 18;</code>
           */
          public Builder clearTotal() {
            if (totalBuilder_ == null) {
              total_ = com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance();
              onChanged();
            } else {
              totalBuilder_.clear();
            }
            bitField0_ = (bitField0_ & ~0x00000020);
            return this;
          }
          /**
           * <code>optional .LineItem total = 18;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder getTotalBuilder() {
            bitField0_ |= 0x00000020;
            onChanged();
            return getTotalFieldBuilder().getBuilder();
          }
          /**
           * <code>optional .LineItem total = 18;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getTotalOrBuilder() {
            if (totalBuilder_ != null) {
              return totalBuilder_.getMessageOrBuilder();
            } else {
              return total_;
            }
          }
          /**
           * <code>optional .LineItem total = 18;</code>
           */
          private com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
              getTotalFieldBuilder() {
            if (totalBuilder_ == null) {
              totalBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                  com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder>(
                      total_,
                      getParentForChildren(),
                      isClean());
              total_ = null;
            }
            return totalBuilder_;
          }

          // repeated string footerHtml = 19;
          private com.google.protobuf.LazyStringList footerHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          private void ensureFooterHtmlIsMutable() {
            if (!((bitField0_ & 0x00000040) == 0x00000040)) {
              footerHtml_ = new com.google.protobuf.LazyStringArrayList(footerHtml_);
              bitField0_ |= 0x00000040;
             }
          }
          /**
           * <code>repeated string footerHtml = 19;</code>
           */
          public java.util.List<java.lang.String>
              getFooterHtmlList() {
            return java.util.Collections.unmodifiableList(footerHtml_);
          }
          /**
           * <code>repeated string footerHtml = 19;</code>
           */
          public int getFooterHtmlCount() {
            return footerHtml_.size();
          }
          /**
           * <code>repeated string footerHtml = 19;</code>
           */
          public java.lang.String getFooterHtml(int index) {
            return footerHtml_.get(index);
          }
          /**
           * <code>repeated string footerHtml = 19;</code>
           */
          public com.google.protobuf.ByteString
              getFooterHtmlBytes(int index) {
            return footerHtml_.getByteString(index);
          }
          /**
           * <code>repeated string footerHtml = 19;</code>
           */
          public Builder setFooterHtml(
              int index, java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  ensureFooterHtmlIsMutable();
            footerHtml_.set(index, value);
            onChanged();
            return this;
          }
          /**
           * <code>repeated string footerHtml = 19;</code>
           */
          public Builder addFooterHtml(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  ensureFooterHtmlIsMutable();
            footerHtml_.add(value);
            onChanged();
            return this;
          }
          /**
           * <code>repeated string footerHtml = 19;</code>
           */
          public Builder addAllFooterHtml(
              java.lang.Iterable<java.lang.String> values) {
            ensureFooterHtmlIsMutable();
            super.addAll(values, footerHtml_);
            onChanged();
            return this;
          }
          /**
           * <code>repeated string footerHtml = 19;</code>
           */
          public Builder clearFooterHtml() {
            footerHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            bitField0_ = (bitField0_ & ~0x00000040);
            onChanged();
            return this;
          }
          /**
           * <code>repeated string footerHtml = 19;</code>
           */
          public Builder addFooterHtmlBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  ensureFooterHtmlIsMutable();
            footerHtml_.add(value);
            onChanged();
            return this;
          }

          // optional int32 instrumentFamily = 29;
          private int instrumentFamily_ ;
          /**
           * <code>optional int32 instrumentFamily = 29;</code>
           */
          public boolean hasInstrumentFamily() {
            return ((bitField0_ & 0x00000080) == 0x00000080);
          }
          /**
           * <code>optional int32 instrumentFamily = 29;</code>
           */
          public int getInstrumentFamily() {
            return instrumentFamily_;
          }
          /**
           * <code>optional int32 instrumentFamily = 29;</code>
           */
          public Builder setInstrumentFamily(int value) {
            bitField0_ |= 0x00000080;
            instrumentFamily_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional int32 instrumentFamily = 29;</code>
           */
          public Builder clearInstrumentFamily() {
            bitField0_ = (bitField0_ & ~0x00000080);
            instrumentFamily_ = 0;
            onChanged();
            return this;
          }

          // repeated int32 deprecatedInstrumentInapplicableReason = 30;
          private java.util.List<java.lang.Integer> deprecatedInstrumentInapplicableReason_ = java.util.Collections.emptyList();
          private void ensureDeprecatedInstrumentInapplicableReasonIsMutable() {
            if (!((bitField0_ & 0x00000100) == 0x00000100)) {
              deprecatedInstrumentInapplicableReason_ = new java.util.ArrayList<java.lang.Integer>(deprecatedInstrumentInapplicableReason_);
              bitField0_ |= 0x00000100;
             }
          }
          /**
           * <code>repeated int32 deprecatedInstrumentInapplicableReason = 30;</code>
           */
          public java.util.List<java.lang.Integer>
              getDeprecatedInstrumentInapplicableReasonList() {
            return java.util.Collections.unmodifiableList(deprecatedInstrumentInapplicableReason_);
          }
          /**
           * <code>repeated int32 deprecatedInstrumentInapplicableReason = 30;</code>
           */
          public int getDeprecatedInstrumentInapplicableReasonCount() {
            return deprecatedInstrumentInapplicableReason_.size();
          }
          /**
           * <code>repeated int32 deprecatedInstrumentInapplicableReason = 30;</code>
           */
          public int getDeprecatedInstrumentInapplicableReason(int index) {
            return deprecatedInstrumentInapplicableReason_.get(index);
          }
          /**
           * <code>repeated int32 deprecatedInstrumentInapplicableReason = 30;</code>
           */
          public Builder setDeprecatedInstrumentInapplicableReason(
              int index, int value) {
            ensureDeprecatedInstrumentInapplicableReasonIsMutable();
            deprecatedInstrumentInapplicableReason_.set(index, value);
            onChanged();
            return this;
          }
          /**
           * <code>repeated int32 deprecatedInstrumentInapplicableReason = 30;</code>
           */
          public Builder addDeprecatedInstrumentInapplicableReason(int value) {
            ensureDeprecatedInstrumentInapplicableReasonIsMutable();
            deprecatedInstrumentInapplicableReason_.add(value);
            onChanged();
            return this;
          }
          /**
           * <code>repeated int32 deprecatedInstrumentInapplicableReason = 30;</code>
           */
          public Builder addAllDeprecatedInstrumentInapplicableReason(
              java.lang.Iterable<? extends java.lang.Integer> values) {
            ensureDeprecatedInstrumentInapplicableReasonIsMutable();
            super.addAll(values, deprecatedInstrumentInapplicableReason_);
            onChanged();
            return this;
          }
          /**
           * <code>repeated int32 deprecatedInstrumentInapplicableReason = 30;</code>
           */
          public Builder clearDeprecatedInstrumentInapplicableReason() {
            deprecatedInstrumentInapplicableReason_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000100);
            onChanged();
            return this;
          }

          // optional bool selectedInstrument = 32;
          private boolean selectedInstrument_ ;
          /**
           * <code>optional bool selectedInstrument = 32;</code>
           */
          public boolean hasSelectedInstrument() {
            return ((bitField0_ & 0x00000200) == 0x00000200);
          }
          /**
           * <code>optional bool selectedInstrument = 32;</code>
           */
          public boolean getSelectedInstrument() {
            return selectedInstrument_;
          }
          /**
           * <code>optional bool selectedInstrument = 32;</code>
           */
          public Builder setSelectedInstrument(boolean value) {
            bitField0_ |= 0x00000200;
            selectedInstrument_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional bool selectedInstrument = 32;</code>
           */
          public Builder clearSelectedInstrument() {
            bitField0_ = (bitField0_ & ~0x00000200);
            selectedInstrument_ = false;
            onChanged();
            return this;
          }

          // optional .LineItem summary = 33;
          private com.akdeniz.googleplaycrawler.GooglePlay.LineItem summary_ = com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance();
          private com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> summaryBuilder_;
          /**
           * <code>optional .LineItem summary = 33;</code>
           */
          public boolean hasSummary() {
            return ((bitField0_ & 0x00000400) == 0x00000400);
          }
          /**
           * <code>optional .LineItem summary = 33;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItem getSummary() {
            if (summaryBuilder_ == null) {
              return summary_;
            } else {
              return summaryBuilder_.getMessage();
            }
          }
          /**
           * <code>optional .LineItem summary = 33;</code>
           */
          public Builder setSummary(com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
            if (summaryBuilder_ == null) {
              if (value == null) {
                throw new NullPointerException();
              }
              summary_ = value;
              onChanged();
            } else {
              summaryBuilder_.setMessage(value);
            }
            bitField0_ |= 0x00000400;
            return this;
          }
          /**
           * <code>optional .LineItem summary = 33;</code>
           */
          public Builder setSummary(
              com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder builderForValue) {
            if (summaryBuilder_ == null) {
              summary_ = builderForValue.build();
              onChanged();
            } else {
              summaryBuilder_.setMessage(builderForValue.build());
            }
            bitField0_ |= 0x00000400;
            return this;
          }
          /**
           * <code>optional .LineItem summary = 33;</code>
           */
          public Builder mergeSummary(com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
            if (summaryBuilder_ == null) {
              if (((bitField0_ & 0x00000400) == 0x00000400) &&
                  summary_ != com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance()) {
                summary_ =
                  com.akdeniz.googleplaycrawler.GooglePlay.LineItem.newBuilder(summary_).mergeFrom(value).buildPartial();
              } else {
                summary_ = value;
              }
              onChanged();
            } else {
              summaryBuilder_.mergeFrom(value);
            }
            bitField0_ |= 0x00000400;
            return this;
          }
          /**
           * <code>optional .LineItem summary = 33;</code>
           */
          public Builder clearSummary() {
            if (summaryBuilder_ == null) {
              summary_ = com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance();
              onChanged();
            } else {
              summaryBuilder_.clear();
            }
            bitField0_ = (bitField0_ & ~0x00000400);
            return this;
          }
          /**
           * <code>optional .LineItem summary = 33;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder getSummaryBuilder() {
            bitField0_ |= 0x00000400;
            onChanged();
            return getSummaryFieldBuilder().getBuilder();
          }
          /**
           * <code>optional .LineItem summary = 33;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getSummaryOrBuilder() {
            if (summaryBuilder_ != null) {
              return summaryBuilder_.getMessageOrBuilder();
            } else {
              return summary_;
            }
          }
          /**
           * <code>optional .LineItem summary = 33;</code>
           */
          private com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
              getSummaryFieldBuilder() {
            if (summaryBuilder_ == null) {
              summaryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                  com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder>(
                      summary_,
                      getParentForChildren(),
                      isClean());
              summary_ = null;
            }
            return summaryBuilder_;
          }

          // repeated string footnoteHtml = 35;
          private com.google.protobuf.LazyStringList footnoteHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          private void ensureFootnoteHtmlIsMutable() {
            if (!((bitField0_ & 0x00000800) == 0x00000800)) {
              footnoteHtml_ = new com.google.protobuf.LazyStringArrayList(footnoteHtml_);
              bitField0_ |= 0x00000800;
             }
          }
          /**
           * <code>repeated string footnoteHtml = 35;</code>
           */
          public java.util.List<java.lang.String>
              getFootnoteHtmlList() {
            return java.util.Collections.unmodifiableList(footnoteHtml_);
          }
          /**
           * <code>repeated string footnoteHtml = 35;</code>
           */
          public int getFootnoteHtmlCount() {
            return footnoteHtml_.size();
          }
          /**
           * <code>repeated string footnoteHtml = 35;</code>
           */
          public java.lang.String getFootnoteHtml(int index) {
            return footnoteHtml_.get(index);
          }
          /**
           * <code>repeated string footnoteHtml = 35;</code>
           */
          public com.google.protobuf.ByteString
              getFootnoteHtmlBytes(int index) {
            return footnoteHtml_.getByteString(index);
          }
          /**
           * <code>repeated string footnoteHtml = 35;</code>
           */
          public Builder setFootnoteHtml(
              int index, java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  ensureFootnoteHtmlIsMutable();
            footnoteHtml_.set(index, value);
            onChanged();
            return this;
          }
          /**
           * <code>repeated string footnoteHtml = 35;</code>
           */
          public Builder addFootnoteHtml(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  ensureFootnoteHtmlIsMutable();
            footnoteHtml_.add(value);
            onChanged();
            return this;
          }
          /**
           * <code>repeated string footnoteHtml = 35;</code>
           */
          public Builder addAllFootnoteHtml(
              java.lang.Iterable<java.lang.String> values) {
            ensureFootnoteHtmlIsMutable();
            super.addAll(values, footnoteHtml_);
            onChanged();
            return this;
          }
          /**
           * <code>repeated string footnoteHtml = 35;</code>
           */
          public Builder clearFootnoteHtml() {
            footnoteHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            bitField0_ = (bitField0_ & ~0x00000800);
            onChanged();
            return this;
          }
          /**
           * <code>repeated string footnoteHtml = 35;</code>
           */
          public Builder addFootnoteHtmlBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  ensureFootnoteHtmlIsMutable();
            footnoteHtml_.add(value);
            onChanged();
            return this;
          }

          // optional .Instrument instrument = 43;
          private com.akdeniz.googleplaycrawler.GooglePlay.Instrument instrument_ = com.akdeniz.googleplaycrawler.GooglePlay.Instrument.getDefaultInstance();
          private com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Instrument, com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder> instrumentBuilder_;
          /**
           * <code>optional .Instrument instrument = 43;</code>
           */
          public boolean hasInstrument() {
            return ((bitField0_ & 0x00001000) == 0x00001000);
          }
          /**
           * <code>optional .Instrument instrument = 43;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.Instrument getInstrument() {
            if (instrumentBuilder_ == null) {
              return instrument_;
            } else {
              return instrumentBuilder_.getMessage();
            }
          }
          /**
           * <code>optional .Instrument instrument = 43;</code>
           */
          public Builder setInstrument(com.akdeniz.googleplaycrawler.GooglePlay.Instrument value) {
            if (instrumentBuilder_ == null) {
              if (value == null) {
                throw new NullPointerException();
              }
              instrument_ = value;
              onChanged();
            } else {
              instrumentBuilder_.setMessage(value);
            }
            bitField0_ |= 0x00001000;
            return this;
          }
          /**
           * <code>optional .Instrument instrument = 43;</code>
           */
          public Builder setInstrument(
              com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder builderForValue) {
            if (instrumentBuilder_ == null) {
              instrument_ = builderForValue.build();
              onChanged();
            } else {
              instrumentBuilder_.setMessage(builderForValue.build());
            }
            bitField0_ |= 0x00001000;
            return this;
          }
          /**
           * <code>optional .Instrument instrument = 43;</code>
           */
          public Builder mergeInstrument(com.akdeniz.googleplaycrawler.GooglePlay.Instrument value) {
            if (instrumentBuilder_ == null) {
              if (((bitField0_ & 0x00001000) == 0x00001000) &&
                  instrument_ != com.akdeniz.googleplaycrawler.GooglePlay.Instrument.getDefaultInstance()) {
                instrument_ =
                  com.akdeniz.googleplaycrawler.GooglePlay.Instrument.newBuilder(instrument_).mergeFrom(value).buildPartial();
              } else {
                instrument_ = value;
              }
              onChanged();
            } else {
              instrumentBuilder_.mergeFrom(value);
            }
            bitField0_ |= 0x00001000;
            return this;
          }
          /**
           * <code>optional .Instrument instrument = 43;</code>
           */
          public Builder clearInstrument() {
            if (instrumentBuilder_ == null) {
              instrument_ = com.akdeniz.googleplaycrawler.GooglePlay.Instrument.getDefaultInstance();
              onChanged();
            } else {
              instrumentBuilder_.clear();
            }
            bitField0_ = (bitField0_ & ~0x00001000);
            return this;
          }
          /**
           * <code>optional .Instrument instrument = 43;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder getInstrumentBuilder() {
            bitField0_ |= 0x00001000;
            onChanged();
            return getInstrumentFieldBuilder().getBuilder();
          }
          /**
           * <code>optional .Instrument instrument = 43;</code>
           */
          public com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder getInstrumentOrBuilder() {
            if (instrumentBuilder_ != null) {
              return instrumentBuilder_.getMessageOrBuilder();
            } else {
              return instrument_;
            }
          }
          /**
           * <code>optional .Instrument instrument = 43;</code>
           */
          private com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Instrument, com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder> 
              getInstrumentFieldBuilder() {
            if (instrumentBuilder_ == null) {
              instrumentBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                  com.akdeniz.googleplaycrawler.GooglePlay.Instrument, com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder>(
                      instrument_,
                      getParentForChildren(),
                      isClean());
              instrument_ = null;
            }
            return instrumentBuilder_;
          }

          // optional string purchaseCookie = 45;
          private java.lang.Object purchaseCookie_ = "";
          /**
           * <code>optional string purchaseCookie = 45;</code>
           */
          public boolean hasPurchaseCookie() {
            return ((bitField0_ & 0x00002000) == 0x00002000);
          }
          /**
           * <code>optional string purchaseCookie = 45;</code>
           */
          public java.lang.String getPurchaseCookie() {
            java.lang.Object ref = purchaseCookie_;
            if (!(ref instanceof java.lang.String)) {
              java.lang.String s = ((com.google.protobuf.ByteString) ref)
                  .toStringUtf8();
              purchaseCookie_ = s;
              return s;
            } else {
              return (java.lang.String) ref;
            }
          }
          /**
           * <code>optional string purchaseCookie = 45;</code>
           */
          public com.google.protobuf.ByteString
              getPurchaseCookieBytes() {
            java.lang.Object ref = purchaseCookie_;
            if (ref instanceof String) {
              com.google.protobuf.ByteString b = 
                  com.google.protobuf.ByteString.copyFromUtf8(
                      (java.lang.String) ref);
              purchaseCookie_ = b;
              return b;
            } else {
              return (com.google.protobuf.ByteString) ref;
            }
          }
          /**
           * <code>optional string purchaseCookie = 45;</code>
           */
          public Builder setPurchaseCookie(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00002000;
            purchaseCookie_ = value;
            onChanged();
            return this;
          }
          /**
           * <code>optional string purchaseCookie = 45;</code>
           */
          public Builder clearPurchaseCookie() {
            bitField0_ = (bitField0_ & ~0x00002000);
            purchaseCookie_ = getDefaultInstance().getPurchaseCookie();
            onChanged();
            return this;
          }
          /**
           * <code>optional string purchaseCookie = 45;</code>
           */
          public Builder setPurchaseCookieBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00002000;
            purchaseCookie_ = value;
            onChanged();
            return this;
          }

          // repeated string disabledReason = 48;
          private com.google.protobuf.LazyStringList disabledReason_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          private void ensureDisabledReasonIsMutable() {
            if (!((bitField0_ & 0x00004000) == 0x00004000)) {
              disabledReason_ = new com.google.protobuf.LazyStringArrayList(disabledReason_);
              bitField0_ |= 0x00004000;
             }
          }
          /**
           * <code>repeated string disabledReason = 48;</code>
           */
          public java.util.List<java.lang.String>
              getDisabledReasonList() {
            return java.util.Collections.unmodifiableList(disabledReason_);
          }
          /**
           * <code>repeated string disabledReason = 48;</code>
           */
          public int getDisabledReasonCount() {
            return disabledReason_.size();
          }
          /**
           * <code>repeated string disabledReason = 48;</code>
           */
          public java.lang.String getDisabledReason(int index) {
            return disabledReason_.get(index);
          }
          /**
           * <code>repeated string disabledReason = 48;</code>
           */
          public com.google.protobuf.ByteString
              getDisabledReasonBytes(int index) {
            return disabledReason_.getByteString(index);
          }
          /**
           * <code>repeated string disabledReason = 48;</code>
           */
          public Builder setDisabledReason(
              int index, java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  ensureDisabledReasonIsMutable();
            disabledReason_.set(index, value);
            onChanged();
            return this;
          }
          /**
           * <code>repeated string disabledReason = 48;</code>
           */
          public Builder addDisabledReason(
              java.lang.String value) {
            if (value == null) {
    throw new NullPointerException();
  }
  ensureDisabledReasonIsMutable();
            disabledReason_.add(value);
            onChanged();
            return this;
          }
          /**
           * <code>repeated string disabledReason = 48;</code>
           */
          public Builder addAllDisabledReason(
              java.lang.Iterable<java.lang.String> values) {
            ensureDisabledReasonIsMutable();
            super.addAll(values, disabledReason_);
            onChanged();
            return this;
          }
          /**
           * <code>repeated string disabledReason = 48;</code>
           */
          public Builder clearDisabledReason() {
            disabledReason_ = com.google.protobuf.LazyStringArrayList.EMPTY;
            bitField0_ = (bitField0_ & ~0x00004000);
            onChanged();
            return this;
          }
          /**
           * <code>repeated string disabledReason = 48;</code>
           */
          public Builder addDisabledReasonBytes(
              com.google.protobuf.ByteString value) {
            if (value == null) {
    throw new NullPointerException();
  }
  ensureDisabledReasonIsMutable();
            disabledReason_.add(value);
            onChanged();
            return this;
          }

          // @@protoc_insertion_point(builder_scope:BuyResponse.CheckoutInfo.CheckoutOption)
        }

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

        // @@protoc_insertion_point(class_scope:BuyResponse.CheckoutInfo.CheckoutOption)
      }

      private int bitField0_;
      // optional .LineItem item = 3;
      public static final int ITEM_FIELD_NUMBER = 3;
      private com.akdeniz.googleplaycrawler.GooglePlay.LineItem item_;
      /**
       * <code>optional .LineItem item = 3;</code>
       */
      public boolean hasItem() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .LineItem item = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LineItem getItem() {
        return item_;
      }
      /**
       * <code>optional .LineItem item = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getItemOrBuilder() {
        return item_;
      }

      // repeated .LineItem subItem = 4;
      public static final int SUBITEM_FIELD_NUMBER = 4;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> subItem_;
      /**
       * <code>repeated .LineItem subItem = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> getSubItemList() {
        return subItem_;
      }
      /**
       * <code>repeated .LineItem subItem = 4;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
          getSubItemOrBuilderList() {
        return subItem_;
      }
      /**
       * <code>repeated .LineItem subItem = 4;</code>
       */
      public int getSubItemCount() {
        return subItem_.size();
      }
      /**
       * <code>repeated .LineItem subItem = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LineItem getSubItem(int index) {
        return subItem_.get(index);
      }
      /**
       * <code>repeated .LineItem subItem = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getSubItemOrBuilder(
          int index) {
        return subItem_.get(index);
      }

      // repeated group CheckoutOption = 5 {
      public static final int CHECKOUTOPTION_FIELD_NUMBER = 5;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption> checkoutOption_;
      /**
       * <code>repeated group CheckoutOption = 5 { ... }</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption> getCheckoutOptionList() {
        return checkoutOption_;
      }
      /**
       * <code>repeated group CheckoutOption = 5 { ... }</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOptionOrBuilder> 
          getCheckoutOptionOrBuilderList() {
        return checkoutOption_;
      }
      /**
       * <code>repeated group CheckoutOption = 5 { ... }</code>
       */
      public int getCheckoutOptionCount() {
        return checkoutOption_.size();
      }
      /**
       * <code>repeated group CheckoutOption = 5 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption getCheckoutOption(int index) {
        return checkoutOption_.get(index);
      }
      /**
       * <code>repeated group CheckoutOption = 5 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOptionOrBuilder getCheckoutOptionOrBuilder(
          int index) {
        return checkoutOption_.get(index);
      }

      // optional string deprecatedCheckoutUrl = 10;
      public static final int DEPRECATEDCHECKOUTURL_FIELD_NUMBER = 10;
      private java.lang.Object deprecatedCheckoutUrl_;
      /**
       * <code>optional string deprecatedCheckoutUrl = 10;</code>
       */
      public boolean hasDeprecatedCheckoutUrl() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string deprecatedCheckoutUrl = 10;</code>
       */
      public java.lang.String getDeprecatedCheckoutUrl() {
        java.lang.Object ref = deprecatedCheckoutUrl_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            deprecatedCheckoutUrl_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string deprecatedCheckoutUrl = 10;</code>
       */
      public com.google.protobuf.ByteString
          getDeprecatedCheckoutUrlBytes() {
        java.lang.Object ref = deprecatedCheckoutUrl_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          deprecatedCheckoutUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // optional string addInstrumentUrl = 11;
      public static final int ADDINSTRUMENTURL_FIELD_NUMBER = 11;
      private java.lang.Object addInstrumentUrl_;
      /**
       * <code>optional string addInstrumentUrl = 11;</code>
       */
      public boolean hasAddInstrumentUrl() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string addInstrumentUrl = 11;</code>
       */
      public java.lang.String getAddInstrumentUrl() {
        java.lang.Object ref = addInstrumentUrl_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            addInstrumentUrl_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string addInstrumentUrl = 11;</code>
       */
      public com.google.protobuf.ByteString
          getAddInstrumentUrlBytes() {
        java.lang.Object ref = addInstrumentUrl_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          addInstrumentUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // repeated string footerHtml = 20;
      public static final int FOOTERHTML_FIELD_NUMBER = 20;
      private com.google.protobuf.LazyStringList footerHtml_;
      /**
       * <code>repeated string footerHtml = 20;</code>
       */
      public java.util.List<java.lang.String>
          getFooterHtmlList() {
        return footerHtml_;
      }
      /**
       * <code>repeated string footerHtml = 20;</code>
       */
      public int getFooterHtmlCount() {
        return footerHtml_.size();
      }
      /**
       * <code>repeated string footerHtml = 20;</code>
       */
      public java.lang.String getFooterHtml(int index) {
        return footerHtml_.get(index);
      }
      /**
       * <code>repeated string footerHtml = 20;</code>
       */
      public com.google.protobuf.ByteString
          getFooterHtmlBytes(int index) {
        return footerHtml_.getByteString(index);
      }

      // repeated int32 eligibleInstrumentFamily = 31;
      public static final int ELIGIBLEINSTRUMENTFAMILY_FIELD_NUMBER = 31;
      private java.util.List<java.lang.Integer> eligibleInstrumentFamily_;
      /**
       * <code>repeated int32 eligibleInstrumentFamily = 31;</code>
       */
      public java.util.List<java.lang.Integer>
          getEligibleInstrumentFamilyList() {
        return eligibleInstrumentFamily_;
      }
      /**
       * <code>repeated int32 eligibleInstrumentFamily = 31;</code>
       */
      public int getEligibleInstrumentFamilyCount() {
        return eligibleInstrumentFamily_.size();
      }
      /**
       * <code>repeated int32 eligibleInstrumentFamily = 31;</code>
       */
      public int getEligibleInstrumentFamily(int index) {
        return eligibleInstrumentFamily_.get(index);
      }

      // repeated string footnoteHtml = 36;
      public static final int FOOTNOTEHTML_FIELD_NUMBER = 36;
      private com.google.protobuf.LazyStringList footnoteHtml_;
      /**
       * <code>repeated string footnoteHtml = 36;</code>
       */
      public java.util.List<java.lang.String>
          getFootnoteHtmlList() {
        return footnoteHtml_;
      }
      /**
       * <code>repeated string footnoteHtml = 36;</code>
       */
      public int getFootnoteHtmlCount() {
        return footnoteHtml_.size();
      }
      /**
       * <code>repeated string footnoteHtml = 36;</code>
       */
      public java.lang.String getFootnoteHtml(int index) {
        return footnoteHtml_.get(index);
      }
      /**
       * <code>repeated string footnoteHtml = 36;</code>
       */
      public com.google.protobuf.ByteString
          getFootnoteHtmlBytes(int index) {
        return footnoteHtml_.getByteString(index);
      }

      // repeated .Instrument eligibleInstrument = 44;
      public static final int ELIGIBLEINSTRUMENT_FIELD_NUMBER = 44;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Instrument> eligibleInstrument_;
      /**
       * <code>repeated .Instrument eligibleInstrument = 44;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Instrument> getEligibleInstrumentList() {
        return eligibleInstrument_;
      }
      /**
       * <code>repeated .Instrument eligibleInstrument = 44;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder> 
          getEligibleInstrumentOrBuilderList() {
        return eligibleInstrument_;
      }
      /**
       * <code>repeated .Instrument eligibleInstrument = 44;</code>
       */
      public int getEligibleInstrumentCount() {
        return eligibleInstrument_.size();
      }
      /**
       * <code>repeated .Instrument eligibleInstrument = 44;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Instrument getEligibleInstrument(int index) {
        return eligibleInstrument_.get(index);
      }
      /**
       * <code>repeated .Instrument eligibleInstrument = 44;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder getEligibleInstrumentOrBuilder(
          int index) {
        return eligibleInstrument_.get(index);
      }

      private void initFields() {
        item_ = com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance();
        subItem_ = java.util.Collections.emptyList();
        checkoutOption_ = java.util.Collections.emptyList();
        deprecatedCheckoutUrl_ = "";
        addInstrumentUrl_ = "";
        footerHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        eligibleInstrumentFamily_ = java.util.Collections.emptyList();
        footnoteHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        eligibleInstrument_ = java.util.Collections.emptyList();
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeMessage(3, item_);
        }
        for (int i = 0; i < subItem_.size(); i++) {
          output.writeMessage(4, subItem_.get(i));
        }
        for (int i = 0; i < checkoutOption_.size(); i++) {
          output.writeGroup(5, checkoutOption_.get(i));
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(10, getDeprecatedCheckoutUrlBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeBytes(11, getAddInstrumentUrlBytes());
        }
        for (int i = 0; i < footerHtml_.size(); i++) {
          output.writeBytes(20, footerHtml_.getByteString(i));
        }
        for (int i = 0; i < eligibleInstrumentFamily_.size(); i++) {
          output.writeInt32(31, eligibleInstrumentFamily_.get(i));
        }
        for (int i = 0; i < footnoteHtml_.size(); i++) {
          output.writeBytes(36, footnoteHtml_.getByteString(i));
        }
        for (int i = 0; i < eligibleInstrument_.size(); i++) {
          output.writeMessage(44, eligibleInstrument_.get(i));
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(3, item_);
        }
        for (int i = 0; i < subItem_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(4, subItem_.get(i));
        }
        for (int i = 0; i < checkoutOption_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeGroupSize(5, checkoutOption_.get(i));
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(10, getDeprecatedCheckoutUrlBytes());
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(11, getAddInstrumentUrlBytes());
        }
        {
          int dataSize = 0;
          for (int i = 0; i < footerHtml_.size(); i++) {
            dataSize += com.google.protobuf.CodedOutputStream
              .computeBytesSizeNoTag(footerHtml_.getByteString(i));
          }
          size += dataSize;
          size += 2 * getFooterHtmlList().size();
        }
        {
          int dataSize = 0;
          for (int i = 0; i < eligibleInstrumentFamily_.size(); i++) {
            dataSize += com.google.protobuf.CodedOutputStream
              .computeInt32SizeNoTag(eligibleInstrumentFamily_.get(i));
          }
          size += dataSize;
          size += 2 * getEligibleInstrumentFamilyList().size();
        }
        {
          int dataSize = 0;
          for (int i = 0; i < footnoteHtml_.size(); i++) {
            dataSize += com.google.protobuf.CodedOutputStream
              .computeBytesSizeNoTag(footnoteHtml_.getByteString(i));
          }
          size += dataSize;
          size += 2 * getFootnoteHtmlList().size();
        }
        for (int i = 0; i < eligibleInstrument_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(44, eligibleInstrument_.get(i));
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

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

      public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code BuyResponse.CheckoutInfo}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfoOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_CheckoutInfo_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_CheckoutInfo_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.class, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.Builder.class);
        }

        // Construct using com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

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

        public Builder clear() {
          super.clear();
          if (itemBuilder_ == null) {
            item_ = com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance();
          } else {
            itemBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          if (subItemBuilder_ == null) {
            subItem_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            subItemBuilder_.clear();
          }
          if (checkoutOptionBuilder_ == null) {
            checkoutOption_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            checkoutOptionBuilder_.clear();
          }
          deprecatedCheckoutUrl_ = "";
          bitField0_ = (bitField0_ & ~0x00000008);
          addInstrumentUrl_ = "";
          bitField0_ = (bitField0_ & ~0x00000010);
          footerHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000020);
          eligibleInstrumentFamily_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          footnoteHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000080);
          if (eligibleInstrumentBuilder_ == null) {
            eligibleInstrument_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000100);
          } else {
            eligibleInstrumentBuilder_.clear();
          }
          return this;
        }

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

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_CheckoutInfo_descriptor;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo getDefaultInstanceForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.getDefaultInstance();
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo build() {
          com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo buildPartial() {
          com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo result = new com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          if (itemBuilder_ == null) {
            result.item_ = item_;
          } else {
            result.item_ = itemBuilder_.build();
          }
          if (subItemBuilder_ == null) {
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
              subItem_ = java.util.Collections.unmodifiableList(subItem_);
              bitField0_ = (bitField0_ & ~0x00000002);
            }
            result.subItem_ = subItem_;
          } else {
            result.subItem_ = subItemBuilder_.build();
          }
          if (checkoutOptionBuilder_ == null) {
            if (((bitField0_ & 0x00000004) == 0x00000004)) {
              checkoutOption_ = java.util.Collections.unmodifiableList(checkoutOption_);
              bitField0_ = (bitField0_ & ~0x00000004);
            }
            result.checkoutOption_ = checkoutOption_;
          } else {
            result.checkoutOption_ = checkoutOptionBuilder_.build();
          }
          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
            to_bitField0_ |= 0x00000002;
          }
          result.deprecatedCheckoutUrl_ = deprecatedCheckoutUrl_;
          if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
            to_bitField0_ |= 0x00000004;
          }
          result.addInstrumentUrl_ = addInstrumentUrl_;
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            footerHtml_ = new com.google.protobuf.UnmodifiableLazyStringList(
                footerHtml_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.footerHtml_ = footerHtml_;
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            eligibleInstrumentFamily_ = java.util.Collections.unmodifiableList(eligibleInstrumentFamily_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.eligibleInstrumentFamily_ = eligibleInstrumentFamily_;
          if (((bitField0_ & 0x00000080) == 0x00000080)) {
            footnoteHtml_ = new com.google.protobuf.UnmodifiableLazyStringList(
                footnoteHtml_);
            bitField0_ = (bitField0_ & ~0x00000080);
          }
          result.footnoteHtml_ = footnoteHtml_;
          if (eligibleInstrumentBuilder_ == null) {
            if (((bitField0_ & 0x00000100) == 0x00000100)) {
              eligibleInstrument_ = java.util.Collections.unmodifiableList(eligibleInstrument_);
              bitField0_ = (bitField0_ & ~0x00000100);
            }
            result.eligibleInstrument_ = eligibleInstrument_;
          } else {
            result.eligibleInstrument_ = eligibleInstrumentBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo) {
            return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo other) {
          if (other == com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.getDefaultInstance()) return this;
          if (other.hasItem()) {
            mergeItem(other.getItem());
          }
          if (subItemBuilder_ == null) {
            if (!other.subItem_.isEmpty()) {
              if (subItem_.isEmpty()) {
                subItem_ = other.subItem_;
                bitField0_ = (bitField0_ & ~0x00000002);
              } else {
                ensureSubItemIsMutable();
                subItem_.addAll(other.subItem_);
              }
              onChanged();
            }
          } else {
            if (!other.subItem_.isEmpty()) {
              if (subItemBuilder_.isEmpty()) {
                subItemBuilder_.dispose();
                subItemBuilder_ = null;
                subItem_ = other.subItem_;
                bitField0_ = (bitField0_ & ~0x00000002);
                subItemBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getSubItemFieldBuilder() : null;
              } else {
                subItemBuilder_.addAllMessages(other.subItem_);
              }
            }
          }
          if (checkoutOptionBuilder_ == null) {
            if (!other.checkoutOption_.isEmpty()) {
              if (checkoutOption_.isEmpty()) {
                checkoutOption_ = other.checkoutOption_;
                bitField0_ = (bitField0_ & ~0x00000004);
              } else {
                ensureCheckoutOptionIsMutable();
                checkoutOption_.addAll(other.checkoutOption_);
              }
              onChanged();
            }
          } else {
            if (!other.checkoutOption_.isEmpty()) {
              if (checkoutOptionBuilder_.isEmpty()) {
                checkoutOptionBuilder_.dispose();
                checkoutOptionBuilder_ = null;
                checkoutOption_ = other.checkoutOption_;
                bitField0_ = (bitField0_ & ~0x00000004);
                checkoutOptionBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getCheckoutOptionFieldBuilder() : null;
              } else {
                checkoutOptionBuilder_.addAllMessages(other.checkoutOption_);
              }
            }
          }
          if (other.hasDeprecatedCheckoutUrl()) {
            bitField0_ |= 0x00000008;
            deprecatedCheckoutUrl_ = other.deprecatedCheckoutUrl_;
            onChanged();
          }
          if (other.hasAddInstrumentUrl()) {
            bitField0_ |= 0x00000010;
            addInstrumentUrl_ = other.addInstrumentUrl_;
            onChanged();
          }
          if (!other.footerHtml_.isEmpty()) {
            if (footerHtml_.isEmpty()) {
              footerHtml_ = other.footerHtml_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureFooterHtmlIsMutable();
              footerHtml_.addAll(other.footerHtml_);
            }
            onChanged();
          }
          if (!other.eligibleInstrumentFamily_.isEmpty()) {
            if (eligibleInstrumentFamily_.isEmpty()) {
              eligibleInstrumentFamily_ = other.eligibleInstrumentFamily_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureEligibleInstrumentFamilyIsMutable();
              eligibleInstrumentFamily_.addAll(other.eligibleInstrumentFamily_);
            }
            onChanged();
          }
          if (!other.footnoteHtml_.isEmpty()) {
            if (footnoteHtml_.isEmpty()) {
              footnoteHtml_ = other.footnoteHtml_;
              bitField0_ = (bitField0_ & ~0x00000080);
            } else {
              ensureFootnoteHtmlIsMutable();
              footnoteHtml_.addAll(other.footnoteHtml_);
            }
            onChanged();
          }
          if (eligibleInstrumentBuilder_ == null) {
            if (!other.eligibleInstrument_.isEmpty()) {
              if (eligibleInstrument_.isEmpty()) {
                eligibleInstrument_ = other.eligibleInstrument_;
                bitField0_ = (bitField0_ & ~0x00000100);
              } else {
                ensureEligibleInstrumentIsMutable();
                eligibleInstrument_.addAll(other.eligibleInstrument_);
              }
              onChanged();
            }
          } else {
            if (!other.eligibleInstrument_.isEmpty()) {
              if (eligibleInstrumentBuilder_.isEmpty()) {
                eligibleInstrumentBuilder_.dispose();
                eligibleInstrumentBuilder_ = null;
                eligibleInstrument_ = other.eligibleInstrument_;
                bitField0_ = (bitField0_ & ~0x00000100);
                eligibleInstrumentBuilder_ = 
                  com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                     getEligibleInstrumentFieldBuilder() : null;
              } else {
                eligibleInstrumentBuilder_.addAllMessages(other.eligibleInstrument_);
              }
            }
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

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

        // optional .LineItem item = 3;
        private com.akdeniz.googleplaycrawler.GooglePlay.LineItem item_ = com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> itemBuilder_;
        /**
         * <code>optional .LineItem item = 3;</code>
         */
        public boolean hasItem() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional .LineItem item = 3;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItem getItem() {
          if (itemBuilder_ == null) {
            return item_;
          } else {
            return itemBuilder_.getMessage();
          }
        }
        /**
         * <code>optional .LineItem item = 3;</code>
         */
        public Builder setItem(com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
          if (itemBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            item_ = value;
            onChanged();
          } else {
            itemBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <code>optional .LineItem item = 3;</code>
         */
        public Builder setItem(
            com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder builderForValue) {
          if (itemBuilder_ == null) {
            item_ = builderForValue.build();
            onChanged();
          } else {
            itemBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <code>optional .LineItem item = 3;</code>
         */
        public Builder mergeItem(com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
          if (itemBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001) &&
                item_ != com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance()) {
              item_ =
                com.akdeniz.googleplaycrawler.GooglePlay.LineItem.newBuilder(item_).mergeFrom(value).buildPartial();
            } else {
              item_ = value;
            }
            onChanged();
          } else {
            itemBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <code>optional .LineItem item = 3;</code>
         */
        public Builder clearItem() {
          if (itemBuilder_ == null) {
            item_ = com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance();
            onChanged();
          } else {
            itemBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        /**
         * <code>optional .LineItem item = 3;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder getItemBuilder() {
          bitField0_ |= 0x00000001;
          onChanged();
          return getItemFieldBuilder().getBuilder();
        }
        /**
         * <code>optional .LineItem item = 3;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getItemOrBuilder() {
          if (itemBuilder_ != null) {
            return itemBuilder_.getMessageOrBuilder();
          } else {
            return item_;
          }
        }
        /**
         * <code>optional .LineItem item = 3;</code>
         */
        private com.google.protobuf.SingleFieldBuilder<
            com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
            getItemFieldBuilder() {
          if (itemBuilder_ == null) {
            itemBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder>(
                    item_,
                    getParentForChildren(),
                    isClean());
            item_ = null;
          }
          return itemBuilder_;
        }

        // repeated .LineItem subItem = 4;
        private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> subItem_ =
          java.util.Collections.emptyList();
        private void ensureSubItemIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            subItem_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.LineItem>(subItem_);
            bitField0_ |= 0x00000002;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilder<
            com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> subItemBuilder_;

        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem> getSubItemList() {
          if (subItemBuilder_ == null) {
            return java.util.Collections.unmodifiableList(subItem_);
          } else {
            return subItemBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public int getSubItemCount() {
          if (subItemBuilder_ == null) {
            return subItem_.size();
          } else {
            return subItemBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItem getSubItem(int index) {
          if (subItemBuilder_ == null) {
            return subItem_.get(index);
          } else {
            return subItemBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public Builder setSubItem(
            int index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
          if (subItemBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureSubItemIsMutable();
            subItem_.set(index, value);
            onChanged();
          } else {
            subItemBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public Builder setSubItem(
            int index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder builderForValue) {
          if (subItemBuilder_ == null) {
            ensureSubItemIsMutable();
            subItem_.set(index, builderForValue.build());
            onChanged();
          } else {
            subItemBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public Builder addSubItem(com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
          if (subItemBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureSubItemIsMutable();
            subItem_.add(value);
            onChanged();
          } else {
            subItemBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public Builder addSubItem(
            int index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem value) {
          if (subItemBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureSubItemIsMutable();
            subItem_.add(index, value);
            onChanged();
          } else {
            subItemBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public Builder addSubItem(
            com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder builderForValue) {
          if (subItemBuilder_ == null) {
            ensureSubItemIsMutable();
            subItem_.add(builderForValue.build());
            onChanged();
          } else {
            subItemBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public Builder addSubItem(
            int index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder builderForValue) {
          if (subItemBuilder_ == null) {
            ensureSubItemIsMutable();
            subItem_.add(index, builderForValue.build());
            onChanged();
          } else {
            subItemBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public Builder addAllSubItem(
            java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.LineItem> values) {
          if (subItemBuilder_ == null) {
            ensureSubItemIsMutable();
            super.addAll(values, subItem_);
            onChanged();
          } else {
            subItemBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public Builder clearSubItem() {
          if (subItemBuilder_ == null) {
            subItem_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
            onChanged();
          } else {
            subItemBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public Builder removeSubItem(int index) {
          if (subItemBuilder_ == null) {
            ensureSubItemIsMutable();
            subItem_.remove(index);
            onChanged();
          } else {
            subItemBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder getSubItemBuilder(
            int index) {
          return getSubItemFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder getSubItemOrBuilder(
            int index) {
          if (subItemBuilder_ == null) {
            return subItem_.get(index);  } else {
            return subItemBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
             getSubItemOrBuilderList() {
          if (subItemBuilder_ != null) {
            return subItemBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(subItem_);
          }
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder addSubItemBuilder() {
          return getSubItemFieldBuilder().addBuilder(
              com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance());
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder addSubItemBuilder(
            int index) {
          return getSubItemFieldBuilder().addBuilder(
              index, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance());
        }
        /**
         * <code>repeated .LineItem subItem = 4;</code>
         */
        public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder> 
             getSubItemBuilderList() {
          return getSubItemFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder> 
            getSubItemFieldBuilder() {
          if (subItemBuilder_ == null) {
            subItemBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                com.akdeniz.googleplaycrawler.GooglePlay.LineItem, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder>(
                    subItem_,
                    ((bitField0_ & 0x00000002) == 0x00000002),
                    getParentForChildren(),
                    isClean());
            subItem_ = null;
          }
          return subItemBuilder_;
        }

        // repeated group CheckoutOption = 5 {
        private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption> checkoutOption_ =
          java.util.Collections.emptyList();
        private void ensureCheckoutOptionIsMutable() {
          if (!((bitField0_ & 0x00000004) == 0x00000004)) {
            checkoutOption_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption>(checkoutOption_);
            bitField0_ |= 0x00000004;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilder<
            com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOptionOrBuilder> checkoutOptionBuilder_;

        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption> getCheckoutOptionList() {
          if (checkoutOptionBuilder_ == null) {
            return java.util.Collections.unmodifiableList(checkoutOption_);
          } else {
            return checkoutOptionBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public int getCheckoutOptionCount() {
          if (checkoutOptionBuilder_ == null) {
            return checkoutOption_.size();
          } else {
            return checkoutOptionBuilder_.getCount();
          }
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption getCheckoutOption(int index) {
          if (checkoutOptionBuilder_ == null) {
            return checkoutOption_.get(index);
          } else {
            return checkoutOptionBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public Builder setCheckoutOption(
            int index, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption value) {
          if (checkoutOptionBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureCheckoutOptionIsMutable();
            checkoutOption_.set(index, value);
            onChanged();
          } else {
            checkoutOptionBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public Builder setCheckoutOption(
            int index, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.Builder builderForValue) {
          if (checkoutOptionBuilder_ == null) {
            ensureCheckoutOptionIsMutable();
            checkoutOption_.set(index, builderForValue.build());
            onChanged();
          } else {
            checkoutOptionBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public Builder addCheckoutOption(com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption value) {
          if (checkoutOptionBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureCheckoutOptionIsMutable();
            checkoutOption_.add(value);
            onChanged();
          } else {
            checkoutOptionBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public Builder addCheckoutOption(
            int index, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption value) {
          if (checkoutOptionBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureCheckoutOptionIsMutable();
            checkoutOption_.add(index, value);
            onChanged();
          } else {
            checkoutOptionBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public Builder addCheckoutOption(
            com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.Builder builderForValue) {
          if (checkoutOptionBuilder_ == null) {
            ensureCheckoutOptionIsMutable();
            checkoutOption_.add(builderForValue.build());
            onChanged();
          } else {
            checkoutOptionBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public Builder addCheckoutOption(
            int index, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.Builder builderForValue) {
          if (checkoutOptionBuilder_ == null) {
            ensureCheckoutOptionIsMutable();
            checkoutOption_.add(index, builderForValue.build());
            onChanged();
          } else {
            checkoutOptionBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public Builder addAllCheckoutOption(
            java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption> values) {
          if (checkoutOptionBuilder_ == null) {
            ensureCheckoutOptionIsMutable();
            super.addAll(values, checkoutOption_);
            onChanged();
          } else {
            checkoutOptionBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public Builder clearCheckoutOption() {
          if (checkoutOptionBuilder_ == null) {
            checkoutOption_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000004);
            onChanged();
          } else {
            checkoutOptionBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public Builder removeCheckoutOption(int index) {
          if (checkoutOptionBuilder_ == null) {
            ensureCheckoutOptionIsMutable();
            checkoutOption_.remove(index);
            onChanged();
          } else {
            checkoutOptionBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.Builder getCheckoutOptionBuilder(
            int index) {
          return getCheckoutOptionFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOptionOrBuilder getCheckoutOptionOrBuilder(
            int index) {
          if (checkoutOptionBuilder_ == null) {
            return checkoutOption_.get(index);  } else {
            return checkoutOptionBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOptionOrBuilder> 
             getCheckoutOptionOrBuilderList() {
          if (checkoutOptionBuilder_ != null) {
            return checkoutOptionBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(checkoutOption_);
          }
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.Builder addCheckoutOptionBuilder() {
          return getCheckoutOptionFieldBuilder().addBuilder(
              com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.getDefaultInstance());
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.Builder addCheckoutOptionBuilder(
            int index) {
          return getCheckoutOptionFieldBuilder().addBuilder(
              index, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.getDefaultInstance());
        }
        /**
         * <code>repeated group CheckoutOption = 5 { ... }</code>
         */
        public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.Builder> 
             getCheckoutOptionBuilderList() {
          return getCheckoutOptionFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOptionOrBuilder> 
            getCheckoutOptionFieldBuilder() {
          if (checkoutOptionBuilder_ == null) {
            checkoutOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOption.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.CheckoutOptionOrBuilder>(
                    checkoutOption_,
                    ((bitField0_ & 0x00000004) == 0x00000004),
                    getParentForChildren(),
                    isClean());
            checkoutOption_ = null;
          }
          return checkoutOptionBuilder_;
        }

        // optional string deprecatedCheckoutUrl = 10;
        private java.lang.Object deprecatedCheckoutUrl_ = "";
        /**
         * <code>optional string deprecatedCheckoutUrl = 10;</code>
         */
        public boolean hasDeprecatedCheckoutUrl() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional string deprecatedCheckoutUrl = 10;</code>
         */
        public java.lang.String getDeprecatedCheckoutUrl() {
          java.lang.Object ref = deprecatedCheckoutUrl_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            deprecatedCheckoutUrl_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string deprecatedCheckoutUrl = 10;</code>
         */
        public com.google.protobuf.ByteString
            getDeprecatedCheckoutUrlBytes() {
          java.lang.Object ref = deprecatedCheckoutUrl_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            deprecatedCheckoutUrl_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string deprecatedCheckoutUrl = 10;</code>
         */
        public Builder setDeprecatedCheckoutUrl(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
          deprecatedCheckoutUrl_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string deprecatedCheckoutUrl = 10;</code>
         */
        public Builder clearDeprecatedCheckoutUrl() {
          bitField0_ = (bitField0_ & ~0x00000008);
          deprecatedCheckoutUrl_ = getDefaultInstance().getDeprecatedCheckoutUrl();
          onChanged();
          return this;
        }
        /**
         * <code>optional string deprecatedCheckoutUrl = 10;</code>
         */
        public Builder setDeprecatedCheckoutUrlBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
          deprecatedCheckoutUrl_ = value;
          onChanged();
          return this;
        }

        // optional string addInstrumentUrl = 11;
        private java.lang.Object addInstrumentUrl_ = "";
        /**
         * <code>optional string addInstrumentUrl = 11;</code>
         */
        public boolean hasAddInstrumentUrl() {
          return ((bitField0_ & 0x00000010) == 0x00000010);
        }
        /**
         * <code>optional string addInstrumentUrl = 11;</code>
         */
        public java.lang.String getAddInstrumentUrl() {
          java.lang.Object ref = addInstrumentUrl_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            addInstrumentUrl_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string addInstrumentUrl = 11;</code>
         */
        public com.google.protobuf.ByteString
            getAddInstrumentUrlBytes() {
          java.lang.Object ref = addInstrumentUrl_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            addInstrumentUrl_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string addInstrumentUrl = 11;</code>
         */
        public Builder setAddInstrumentUrl(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
          addInstrumentUrl_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string addInstrumentUrl = 11;</code>
         */
        public Builder clearAddInstrumentUrl() {
          bitField0_ = (bitField0_ & ~0x00000010);
          addInstrumentUrl_ = getDefaultInstance().getAddInstrumentUrl();
          onChanged();
          return this;
        }
        /**
         * <code>optional string addInstrumentUrl = 11;</code>
         */
        public Builder setAddInstrumentUrlBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
          addInstrumentUrl_ = value;
          onChanged();
          return this;
        }

        // repeated string footerHtml = 20;
        private com.google.protobuf.LazyStringList footerHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureFooterHtmlIsMutable() {
          if (!((bitField0_ & 0x00000020) == 0x00000020)) {
            footerHtml_ = new com.google.protobuf.LazyStringArrayList(footerHtml_);
            bitField0_ |= 0x00000020;
           }
        }
        /**
         * <code>repeated string footerHtml = 20;</code>
         */
        public java.util.List<java.lang.String>
            getFooterHtmlList() {
          return java.util.Collections.unmodifiableList(footerHtml_);
        }
        /**
         * <code>repeated string footerHtml = 20;</code>
         */
        public int getFooterHtmlCount() {
          return footerHtml_.size();
        }
        /**
         * <code>repeated string footerHtml = 20;</code>
         */
        public java.lang.String getFooterHtml(int index) {
          return footerHtml_.get(index);
        }
        /**
         * <code>repeated string footerHtml = 20;</code>
         */
        public com.google.protobuf.ByteString
            getFooterHtmlBytes(int index) {
          return footerHtml_.getByteString(index);
        }
        /**
         * <code>repeated string footerHtml = 20;</code>
         */
        public Builder setFooterHtml(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFooterHtmlIsMutable();
          footerHtml_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string footerHtml = 20;</code>
         */
        public Builder addFooterHtml(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFooterHtmlIsMutable();
          footerHtml_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string footerHtml = 20;</code>
         */
        public Builder addAllFooterHtml(
            java.lang.Iterable<java.lang.String> values) {
          ensureFooterHtmlIsMutable();
          super.addAll(values, footerHtml_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string footerHtml = 20;</code>
         */
        public Builder clearFooterHtml() {
          footerHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string footerHtml = 20;</code>
         */
        public Builder addFooterHtmlBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFooterHtmlIsMutable();
          footerHtml_.add(value);
          onChanged();
          return this;
        }

        // repeated int32 eligibleInstrumentFamily = 31;
        private java.util.List<java.lang.Integer> eligibleInstrumentFamily_ = java.util.Collections.emptyList();
        private void ensureEligibleInstrumentFamilyIsMutable() {
          if (!((bitField0_ & 0x00000040) == 0x00000040)) {
            eligibleInstrumentFamily_ = new java.util.ArrayList<java.lang.Integer>(eligibleInstrumentFamily_);
            bitField0_ |= 0x00000040;
           }
        }
        /**
         * <code>repeated int32 eligibleInstrumentFamily = 31;</code>
         */
        public java.util.List<java.lang.Integer>
            getEligibleInstrumentFamilyList() {
          return java.util.Collections.unmodifiableList(eligibleInstrumentFamily_);
        }
        /**
         * <code>repeated int32 eligibleInstrumentFamily = 31;</code>
         */
        public int getEligibleInstrumentFamilyCount() {
          return eligibleInstrumentFamily_.size();
        }
        /**
         * <code>repeated int32 eligibleInstrumentFamily = 31;</code>
         */
        public int getEligibleInstrumentFamily(int index) {
          return eligibleInstrumentFamily_.get(index);
        }
        /**
         * <code>repeated int32 eligibleInstrumentFamily = 31;</code>
         */
        public Builder setEligibleInstrumentFamily(
            int index, int value) {
          ensureEligibleInstrumentFamilyIsMutable();
          eligibleInstrumentFamily_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 eligibleInstrumentFamily = 31;</code>
         */
        public Builder addEligibleInstrumentFamily(int value) {
          ensureEligibleInstrumentFamilyIsMutable();
          eligibleInstrumentFamily_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 eligibleInstrumentFamily = 31;</code>
         */
        public Builder addAllEligibleInstrumentFamily(
            java.lang.Iterable<? extends java.lang.Integer> values) {
          ensureEligibleInstrumentFamilyIsMutable();
          super.addAll(values, eligibleInstrumentFamily_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated int32 eligibleInstrumentFamily = 31;</code>
         */
        public Builder clearEligibleInstrumentFamily() {
          eligibleInstrumentFamily_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
          return this;
        }

        // repeated string footnoteHtml = 36;
        private com.google.protobuf.LazyStringList footnoteHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        private void ensureFootnoteHtmlIsMutable() {
          if (!((bitField0_ & 0x00000080) == 0x00000080)) {
            footnoteHtml_ = new com.google.protobuf.LazyStringArrayList(footnoteHtml_);
            bitField0_ |= 0x00000080;
           }
        }
        /**
         * <code>repeated string footnoteHtml = 36;</code>
         */
        public java.util.List<java.lang.String>
            getFootnoteHtmlList() {
          return java.util.Collections.unmodifiableList(footnoteHtml_);
        }
        /**
         * <code>repeated string footnoteHtml = 36;</code>
         */
        public int getFootnoteHtmlCount() {
          return footnoteHtml_.size();
        }
        /**
         * <code>repeated string footnoteHtml = 36;</code>
         */
        public java.lang.String getFootnoteHtml(int index) {
          return footnoteHtml_.get(index);
        }
        /**
         * <code>repeated string footnoteHtml = 36;</code>
         */
        public com.google.protobuf.ByteString
            getFootnoteHtmlBytes(int index) {
          return footnoteHtml_.getByteString(index);
        }
        /**
         * <code>repeated string footnoteHtml = 36;</code>
         */
        public Builder setFootnoteHtml(
            int index, java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFootnoteHtmlIsMutable();
          footnoteHtml_.set(index, value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string footnoteHtml = 36;</code>
         */
        public Builder addFootnoteHtml(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFootnoteHtmlIsMutable();
          footnoteHtml_.add(value);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string footnoteHtml = 36;</code>
         */
        public Builder addAllFootnoteHtml(
            java.lang.Iterable<java.lang.String> values) {
          ensureFootnoteHtmlIsMutable();
          super.addAll(values, footnoteHtml_);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string footnoteHtml = 36;</code>
         */
        public Builder clearFootnoteHtml() {
          footnoteHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
          bitField0_ = (bitField0_ & ~0x00000080);
          onChanged();
          return this;
        }
        /**
         * <code>repeated string footnoteHtml = 36;</code>
         */
        public Builder addFootnoteHtmlBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  ensureFootnoteHtmlIsMutable();
          footnoteHtml_.add(value);
          onChanged();
          return this;
        }

        // repeated .Instrument eligibleInstrument = 44;
        private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Instrument> eligibleInstrument_ =
          java.util.Collections.emptyList();
        private void ensureEligibleInstrumentIsMutable() {
          if (!((bitField0_ & 0x00000100) == 0x00000100)) {
            eligibleInstrument_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Instrument>(eligibleInstrument_);
            bitField0_ |= 0x00000100;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilder<
            com.akdeniz.googleplaycrawler.GooglePlay.Instrument, com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder> eligibleInstrumentBuilder_;

        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Instrument> getEligibleInstrumentList() {
          if (eligibleInstrumentBuilder_ == null) {
            return java.util.Collections.unmodifiableList(eligibleInstrument_);
          } else {
            return eligibleInstrumentBuilder_.getMessageList();
          }
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public int getEligibleInstrumentCount() {
          if (eligibleInstrumentBuilder_ == null) {
            return eligibleInstrument_.size();
          } else {
            return eligibleInstrumentBuilder_.getCount();
          }
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.Instrument getEligibleInstrument(int index) {
          if (eligibleInstrumentBuilder_ == null) {
            return eligibleInstrument_.get(index);
          } else {
            return eligibleInstrumentBuilder_.getMessage(index);
          }
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public Builder setEligibleInstrument(
            int index, com.akdeniz.googleplaycrawler.GooglePlay.Instrument value) {
          if (eligibleInstrumentBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEligibleInstrumentIsMutable();
            eligibleInstrument_.set(index, value);
            onChanged();
          } else {
            eligibleInstrumentBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public Builder setEligibleInstrument(
            int index, com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder builderForValue) {
          if (eligibleInstrumentBuilder_ == null) {
            ensureEligibleInstrumentIsMutable();
            eligibleInstrument_.set(index, builderForValue.build());
            onChanged();
          } else {
            eligibleInstrumentBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public Builder addEligibleInstrument(com.akdeniz.googleplaycrawler.GooglePlay.Instrument value) {
          if (eligibleInstrumentBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEligibleInstrumentIsMutable();
            eligibleInstrument_.add(value);
            onChanged();
          } else {
            eligibleInstrumentBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public Builder addEligibleInstrument(
            int index, com.akdeniz.googleplaycrawler.GooglePlay.Instrument value) {
          if (eligibleInstrumentBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureEligibleInstrumentIsMutable();
            eligibleInstrument_.add(index, value);
            onChanged();
          } else {
            eligibleInstrumentBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public Builder addEligibleInstrument(
            com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder builderForValue) {
          if (eligibleInstrumentBuilder_ == null) {
            ensureEligibleInstrumentIsMutable();
            eligibleInstrument_.add(builderForValue.build());
            onChanged();
          } else {
            eligibleInstrumentBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public Builder addEligibleInstrument(
            int index, com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder builderForValue) {
          if (eligibleInstrumentBuilder_ == null) {
            ensureEligibleInstrumentIsMutable();
            eligibleInstrument_.add(index, builderForValue.build());
            onChanged();
          } else {
            eligibleInstrumentBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public Builder addAllEligibleInstrument(
            java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Instrument> values) {
          if (eligibleInstrumentBuilder_ == null) {
            ensureEligibleInstrumentIsMutable();
            super.addAll(values, eligibleInstrument_);
            onChanged();
          } else {
            eligibleInstrumentBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public Builder clearEligibleInstrument() {
          if (eligibleInstrumentBuilder_ == null) {
            eligibleInstrument_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000100);
            onChanged();
          } else {
            eligibleInstrumentBuilder_.clear();
          }
          return this;
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public Builder removeEligibleInstrument(int index) {
          if (eligibleInstrumentBuilder_ == null) {
            ensureEligibleInstrumentIsMutable();
            eligibleInstrument_.remove(index);
            onChanged();
          } else {
            eligibleInstrumentBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder getEligibleInstrumentBuilder(
            int index) {
          return getEligibleInstrumentFieldBuilder().getBuilder(index);
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder getEligibleInstrumentOrBuilder(
            int index) {
          if (eligibleInstrumentBuilder_ == null) {
            return eligibleInstrument_.get(index);  } else {
            return eligibleInstrumentBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder> 
             getEligibleInstrumentOrBuilderList() {
          if (eligibleInstrumentBuilder_ != null) {
            return eligibleInstrumentBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(eligibleInstrument_);
          }
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder addEligibleInstrumentBuilder() {
          return getEligibleInstrumentFieldBuilder().addBuilder(
              com.akdeniz.googleplaycrawler.GooglePlay.Instrument.getDefaultInstance());
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder addEligibleInstrumentBuilder(
            int index) {
          return getEligibleInstrumentFieldBuilder().addBuilder(
              index, com.akdeniz.googleplaycrawler.GooglePlay.Instrument.getDefaultInstance());
        }
        /**
         * <code>repeated .Instrument eligibleInstrument = 44;</code>
         */
        public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder> 
             getEligibleInstrumentBuilderList() {
          return getEligibleInstrumentFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilder<
            com.akdeniz.googleplaycrawler.GooglePlay.Instrument, com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder> 
            getEligibleInstrumentFieldBuilder() {
          if (eligibleInstrumentBuilder_ == null) {
            eligibleInstrumentBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                com.akdeniz.googleplaycrawler.GooglePlay.Instrument, com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder>(
                    eligibleInstrument_,
                    ((bitField0_ & 0x00000100) == 0x00000100),
                    getParentForChildren(),
                    isClean());
            eligibleInstrument_ = null;
          }
          return eligibleInstrumentBuilder_;
        }

        // @@protoc_insertion_point(builder_scope:BuyResponse.CheckoutInfo)
      }

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

      // @@protoc_insertion_point(class_scope:BuyResponse.CheckoutInfo)
    }

    private int bitField0_;
    // optional .PurchaseNotificationResponse purchaseResponse = 1;
    public static final int PURCHASERESPONSE_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse purchaseResponse_;
    /**
     * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
     */
    public boolean hasPurchaseResponse() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse getPurchaseResponse() {
      return purchaseResponse_;
    }
    /**
     * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponseOrBuilder getPurchaseResponseOrBuilder() {
      return purchaseResponse_;
    }

    // optional group CheckoutInfo = 2 {
    public static final int CHECKOUTINFO_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo checkoutInfo_;
    /**
     * <code>optional group CheckoutInfo = 2 { ... }</code>
     */
    public boolean hasCheckoutInfo() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional group CheckoutInfo = 2 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo getCheckoutInfo() {
      return checkoutInfo_;
    }
    /**
     * <code>optional group CheckoutInfo = 2 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfoOrBuilder getCheckoutInfoOrBuilder() {
      return checkoutInfo_;
    }

    // optional string continueViaUrl = 8;
    public static final int CONTINUEVIAURL_FIELD_NUMBER = 8;
    private java.lang.Object continueViaUrl_;
    /**
     * <code>optional string continueViaUrl = 8;</code>
     */
    public boolean hasContinueViaUrl() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string continueViaUrl = 8;</code>
     */
    public java.lang.String getContinueViaUrl() {
      java.lang.Object ref = continueViaUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          continueViaUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string continueViaUrl = 8;</code>
     */
    public com.google.protobuf.ByteString
        getContinueViaUrlBytes() {
      java.lang.Object ref = continueViaUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        continueViaUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string purchaseStatusUrl = 9;
    public static final int PURCHASESTATUSURL_FIELD_NUMBER = 9;
    private java.lang.Object purchaseStatusUrl_;
    /**
     * <code>optional string purchaseStatusUrl = 9;</code>
     */
    public boolean hasPurchaseStatusUrl() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string purchaseStatusUrl = 9;</code>
     */
    public java.lang.String getPurchaseStatusUrl() {
      java.lang.Object ref = purchaseStatusUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          purchaseStatusUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string purchaseStatusUrl = 9;</code>
     */
    public com.google.protobuf.ByteString
        getPurchaseStatusUrlBytes() {
      java.lang.Object ref = purchaseStatusUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        purchaseStatusUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string checkoutServiceId = 12;
    public static final int CHECKOUTSERVICEID_FIELD_NUMBER = 12;
    private java.lang.Object checkoutServiceId_;
    /**
     * <code>optional string checkoutServiceId = 12;</code>
     */
    public boolean hasCheckoutServiceId() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string checkoutServiceId = 12;</code>
     */
    public java.lang.String getCheckoutServiceId() {
      java.lang.Object ref = checkoutServiceId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          checkoutServiceId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string checkoutServiceId = 12;</code>
     */
    public com.google.protobuf.ByteString
        getCheckoutServiceIdBytes() {
      java.lang.Object ref = checkoutServiceId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        checkoutServiceId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool checkoutTokenRequired = 13;
    public static final int CHECKOUTTOKENREQUIRED_FIELD_NUMBER = 13;
    private boolean checkoutTokenRequired_;
    /**
     * <code>optional bool checkoutTokenRequired = 13;</code>
     */
    public boolean hasCheckoutTokenRequired() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional bool checkoutTokenRequired = 13;</code>
     */
    public boolean getCheckoutTokenRequired() {
      return checkoutTokenRequired_;
    }

    // optional string baseCheckoutUrl = 14;
    public static final int BASECHECKOUTURL_FIELD_NUMBER = 14;
    private java.lang.Object baseCheckoutUrl_;
    /**
     * <code>optional string baseCheckoutUrl = 14;</code>
     */
    public boolean hasBaseCheckoutUrl() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional string baseCheckoutUrl = 14;</code>
     */
    public java.lang.String getBaseCheckoutUrl() {
      java.lang.Object ref = baseCheckoutUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          baseCheckoutUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string baseCheckoutUrl = 14;</code>
     */
    public com.google.protobuf.ByteString
        getBaseCheckoutUrlBytes() {
      java.lang.Object ref = baseCheckoutUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        baseCheckoutUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated string tosCheckboxHtml = 37;
    public static final int TOSCHECKBOXHTML_FIELD_NUMBER = 37;
    private com.google.protobuf.LazyStringList tosCheckboxHtml_;
    /**
     * <code>repeated string tosCheckboxHtml = 37;</code>
     */
    public java.util.List<java.lang.String>
        getTosCheckboxHtmlList() {
      return tosCheckboxHtml_;
    }
    /**
     * <code>repeated string tosCheckboxHtml = 37;</code>
     */
    public int getTosCheckboxHtmlCount() {
      return tosCheckboxHtml_.size();
    }
    /**
     * <code>repeated string tosCheckboxHtml = 37;</code>
     */
    public java.lang.String getTosCheckboxHtml(int index) {
      return tosCheckboxHtml_.get(index);
    }
    /**
     * <code>repeated string tosCheckboxHtml = 37;</code>
     */
    public com.google.protobuf.ByteString
        getTosCheckboxHtmlBytes(int index) {
      return tosCheckboxHtml_.getByteString(index);
    }

    // optional int32 iabPermissionError = 38;
    public static final int IABPERMISSIONERROR_FIELD_NUMBER = 38;
    private int iabPermissionError_;
    /**
     * <code>optional int32 iabPermissionError = 38;</code>
     */
    public boolean hasIabPermissionError() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional int32 iabPermissionError = 38;</code>
     */
    public int getIabPermissionError() {
      return iabPermissionError_;
    }

    // optional .PurchaseStatusResponse purchaseStatusResponse = 39;
    public static final int PURCHASESTATUSRESPONSE_FIELD_NUMBER = 39;
    private com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse purchaseStatusResponse_;
    /**
     * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
     */
    public boolean hasPurchaseStatusResponse() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse getPurchaseStatusResponse() {
      return purchaseStatusResponse_;
    }
    /**
     * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponseOrBuilder getPurchaseStatusResponseOrBuilder() {
      return purchaseStatusResponse_;
    }

    // optional string purchaseCookie = 46;
    public static final int PURCHASECOOKIE_FIELD_NUMBER = 46;
    private java.lang.Object purchaseCookie_;
    /**
     * <code>optional string purchaseCookie = 46;</code>
     */
    public boolean hasPurchaseCookie() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional string purchaseCookie = 46;</code>
     */
    public java.lang.String getPurchaseCookie() {
      java.lang.Object ref = purchaseCookie_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          purchaseCookie_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string purchaseCookie = 46;</code>
     */
    public com.google.protobuf.ByteString
        getPurchaseCookieBytes() {
      java.lang.Object ref = purchaseCookie_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        purchaseCookie_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .Challenge challenge = 49;
    public static final int CHALLENGE_FIELD_NUMBER = 49;
    private com.akdeniz.googleplaycrawler.GooglePlay.Challenge challenge_;
    /**
     * <code>optional .Challenge challenge = 49;</code>
     */
    public boolean hasChallenge() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional .Challenge challenge = 49;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Challenge getChallenge() {
      return challenge_;
    }
    /**
     * <code>optional .Challenge challenge = 49;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ChallengeOrBuilder getChallengeOrBuilder() {
      return challenge_;
    }

    private void initFields() {
      purchaseResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.getDefaultInstance();
      checkoutInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.getDefaultInstance();
      continueViaUrl_ = "";
      purchaseStatusUrl_ = "";
      checkoutServiceId_ = "";
      checkoutTokenRequired_ = false;
      baseCheckoutUrl_ = "";
      tosCheckboxHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      iabPermissionError_ = 0;
      purchaseStatusResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.getDefaultInstance();
      purchaseCookie_ = "";
      challenge_ = com.akdeniz.googleplaycrawler.GooglePlay.Challenge.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, purchaseResponse_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeGroup(2, checkoutInfo_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(8, getContinueViaUrlBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(9, getPurchaseStatusUrlBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(12, getCheckoutServiceIdBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(13, checkoutTokenRequired_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(14, getBaseCheckoutUrlBytes());
      }
      for (int i = 0; i < tosCheckboxHtml_.size(); i++) {
        output.writeBytes(37, tosCheckboxHtml_.getByteString(i));
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeInt32(38, iabPermissionError_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(39, purchaseStatusResponse_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBytes(46, getPurchaseCookieBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeMessage(49, challenge_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, purchaseResponse_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeGroupSize(2, checkoutInfo_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getContinueViaUrlBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(9, getPurchaseStatusUrlBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(12, getCheckoutServiceIdBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(13, checkoutTokenRequired_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(14, getBaseCheckoutUrlBytes());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < tosCheckboxHtml_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(tosCheckboxHtml_.getByteString(i));
        }
        size += dataSize;
        size += 2 * getTosCheckboxHtmlList().size();
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(38, iabPermissionError_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(39, purchaseStatusResponse_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(46, getPurchaseCookieBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(49, challenge_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code BuyResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.BuyResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        if (purchaseResponseBuilder_ == null) {
          purchaseResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.getDefaultInstance();
        } else {
          purchaseResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (checkoutInfoBuilder_ == null) {
          checkoutInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.getDefaultInstance();
        } else {
          checkoutInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        continueViaUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        purchaseStatusUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        checkoutServiceId_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        checkoutTokenRequired_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        baseCheckoutUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        tosCheckboxHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000080);
        iabPermissionError_ = 0;
        bitField0_ = (bitField0_ & ~0x00000100);
        if (purchaseStatusResponseBuilder_ == null) {
          purchaseStatusResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.getDefaultInstance();
        } else {
          purchaseStatusResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        purchaseCookie_ = "";
        bitField0_ = (bitField0_ & ~0x00000400);
        if (challengeBuilder_ == null) {
          challenge_ = com.akdeniz.googleplaycrawler.GooglePlay.Challenge.getDefaultInstance();
        } else {
          challengeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BuyResponse_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse build() {
        com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse result = new com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (purchaseResponseBuilder_ == null) {
          result.purchaseResponse_ = purchaseResponse_;
        } else {
          result.purchaseResponse_ = purchaseResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (checkoutInfoBuilder_ == null) {
          result.checkoutInfo_ = checkoutInfo_;
        } else {
          result.checkoutInfo_ = checkoutInfoBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.continueViaUrl_ = continueViaUrl_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.purchaseStatusUrl_ = purchaseStatusUrl_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.checkoutServiceId_ = checkoutServiceId_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.checkoutTokenRequired_ = checkoutTokenRequired_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.baseCheckoutUrl_ = baseCheckoutUrl_;
        if (((bitField0_ & 0x00000080) == 0x00000080)) {
          tosCheckboxHtml_ = new com.google.protobuf.UnmodifiableLazyStringList(
              tosCheckboxHtml_);
          bitField0_ = (bitField0_ & ~0x00000080);
        }
        result.tosCheckboxHtml_ = tosCheckboxHtml_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000080;
        }
        result.iabPermissionError_ = iabPermissionError_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000100;
        }
        if (purchaseStatusResponseBuilder_ == null) {
          result.purchaseStatusResponse_ = purchaseStatusResponse_;
        } else {
          result.purchaseStatusResponse_ = purchaseStatusResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000200;
        }
        result.purchaseCookie_ = purchaseCookie_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000400;
        }
        if (challengeBuilder_ == null) {
          result.challenge_ = challenge_;
        } else {
          result.challenge_ = challengeBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.getDefaultInstance()) return this;
        if (other.hasPurchaseResponse()) {
          mergePurchaseResponse(other.getPurchaseResponse());
        }
        if (other.hasCheckoutInfo()) {
          mergeCheckoutInfo(other.getCheckoutInfo());
        }
        if (other.hasContinueViaUrl()) {
          bitField0_ |= 0x00000004;
          continueViaUrl_ = other.continueViaUrl_;
          onChanged();
        }
        if (other.hasPurchaseStatusUrl()) {
          bitField0_ |= 0x00000008;
          purchaseStatusUrl_ = other.purchaseStatusUrl_;
          onChanged();
        }
        if (other.hasCheckoutServiceId()) {
          bitField0_ |= 0x00000010;
          checkoutServiceId_ = other.checkoutServiceId_;
          onChanged();
        }
        if (other.hasCheckoutTokenRequired()) {
          setCheckoutTokenRequired(other.getCheckoutTokenRequired());
        }
        if (other.hasBaseCheckoutUrl()) {
          bitField0_ |= 0x00000040;
          baseCheckoutUrl_ = other.baseCheckoutUrl_;
          onChanged();
        }
        if (!other.tosCheckboxHtml_.isEmpty()) {
          if (tosCheckboxHtml_.isEmpty()) {
            tosCheckboxHtml_ = other.tosCheckboxHtml_;
            bitField0_ = (bitField0_ & ~0x00000080);
          } else {
            ensureTosCheckboxHtmlIsMutable();
            tosCheckboxHtml_.addAll(other.tosCheckboxHtml_);
          }
          onChanged();
        }
        if (other.hasIabPermissionError()) {
          setIabPermissionError(other.getIabPermissionError());
        }
        if (other.hasPurchaseStatusResponse()) {
          mergePurchaseStatusResponse(other.getPurchaseStatusResponse());
        }
        if (other.hasPurchaseCookie()) {
          bitField0_ |= 0x00000400;
          purchaseCookie_ = other.purchaseCookie_;
          onChanged();
        }
        if (other.hasChallenge()) {
          mergeChallenge(other.getChallenge());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional .PurchaseNotificationResponse purchaseResponse = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse purchaseResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponseOrBuilder> purchaseResponseBuilder_;
      /**
       * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
       */
      public boolean hasPurchaseResponse() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse getPurchaseResponse() {
        if (purchaseResponseBuilder_ == null) {
          return purchaseResponse_;
        } else {
          return purchaseResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
       */
      public Builder setPurchaseResponse(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse value) {
        if (purchaseResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          purchaseResponse_ = value;
          onChanged();
        } else {
          purchaseResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
       */
      public Builder setPurchaseResponse(
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.Builder builderForValue) {
        if (purchaseResponseBuilder_ == null) {
          purchaseResponse_ = builderForValue.build();
          onChanged();
        } else {
          purchaseResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
       */
      public Builder mergePurchaseResponse(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse value) {
        if (purchaseResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              purchaseResponse_ != com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.getDefaultInstance()) {
            purchaseResponse_ =
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.newBuilder(purchaseResponse_).mergeFrom(value).buildPartial();
          } else {
            purchaseResponse_ = value;
          }
          onChanged();
        } else {
          purchaseResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
       */
      public Builder clearPurchaseResponse() {
        if (purchaseResponseBuilder_ == null) {
          purchaseResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.getDefaultInstance();
          onChanged();
        } else {
          purchaseResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.Builder getPurchaseResponseBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getPurchaseResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponseOrBuilder getPurchaseResponseOrBuilder() {
        if (purchaseResponseBuilder_ != null) {
          return purchaseResponseBuilder_.getMessageOrBuilder();
        } else {
          return purchaseResponse_;
        }
      }
      /**
       * <code>optional .PurchaseNotificationResponse purchaseResponse = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponseOrBuilder> 
          getPurchaseResponseFieldBuilder() {
        if (purchaseResponseBuilder_ == null) {
          purchaseResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponseOrBuilder>(
                  purchaseResponse_,
                  getParentForChildren(),
                  isClean());
          purchaseResponse_ = null;
        }
        return purchaseResponseBuilder_;
      }

      // optional group CheckoutInfo = 2 {
      private com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo checkoutInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfoOrBuilder> checkoutInfoBuilder_;
      /**
       * <code>optional group CheckoutInfo = 2 { ... }</code>
       */
      public boolean hasCheckoutInfo() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional group CheckoutInfo = 2 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo getCheckoutInfo() {
        if (checkoutInfoBuilder_ == null) {
          return checkoutInfo_;
        } else {
          return checkoutInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional group CheckoutInfo = 2 { ... }</code>
       */
      public Builder setCheckoutInfo(com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo value) {
        if (checkoutInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          checkoutInfo_ = value;
          onChanged();
        } else {
          checkoutInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional group CheckoutInfo = 2 { ... }</code>
       */
      public Builder setCheckoutInfo(
          com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.Builder builderForValue) {
        if (checkoutInfoBuilder_ == null) {
          checkoutInfo_ = builderForValue.build();
          onChanged();
        } else {
          checkoutInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional group CheckoutInfo = 2 { ... }</code>
       */
      public Builder mergeCheckoutInfo(com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo value) {
        if (checkoutInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              checkoutInfo_ != com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.getDefaultInstance()) {
            checkoutInfo_ =
              com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.newBuilder(checkoutInfo_).mergeFrom(value).buildPartial();
          } else {
            checkoutInfo_ = value;
          }
          onChanged();
        } else {
          checkoutInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional group CheckoutInfo = 2 { ... }</code>
       */
      public Builder clearCheckoutInfo() {
        if (checkoutInfoBuilder_ == null) {
          checkoutInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.getDefaultInstance();
          onChanged();
        } else {
          checkoutInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional group CheckoutInfo = 2 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.Builder getCheckoutInfoBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getCheckoutInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional group CheckoutInfo = 2 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfoOrBuilder getCheckoutInfoOrBuilder() {
        if (checkoutInfoBuilder_ != null) {
          return checkoutInfoBuilder_.getMessageOrBuilder();
        } else {
          return checkoutInfo_;
        }
      }
      /**
       * <code>optional group CheckoutInfo = 2 { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfoOrBuilder> 
          getCheckoutInfoFieldBuilder() {
        if (checkoutInfoBuilder_ == null) {
          checkoutInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.CheckoutInfoOrBuilder>(
                  checkoutInfo_,
                  getParentForChildren(),
                  isClean());
          checkoutInfo_ = null;
        }
        return checkoutInfoBuilder_;
      }

      // optional string continueViaUrl = 8;
      private java.lang.Object continueViaUrl_ = "";
      /**
       * <code>optional string continueViaUrl = 8;</code>
       */
      public boolean hasContinueViaUrl() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string continueViaUrl = 8;</code>
       */
      public java.lang.String getContinueViaUrl() {
        java.lang.Object ref = continueViaUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          continueViaUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string continueViaUrl = 8;</code>
       */
      public com.google.protobuf.ByteString
          getContinueViaUrlBytes() {
        java.lang.Object ref = continueViaUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          continueViaUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string continueViaUrl = 8;</code>
       */
      public Builder setContinueViaUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        continueViaUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string continueViaUrl = 8;</code>
       */
      public Builder clearContinueViaUrl() {
        bitField0_ = (bitField0_ & ~0x00000004);
        continueViaUrl_ = getDefaultInstance().getContinueViaUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string continueViaUrl = 8;</code>
       */
      public Builder setContinueViaUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        continueViaUrl_ = value;
        onChanged();
        return this;
      }

      // optional string purchaseStatusUrl = 9;
      private java.lang.Object purchaseStatusUrl_ = "";
      /**
       * <code>optional string purchaseStatusUrl = 9;</code>
       */
      public boolean hasPurchaseStatusUrl() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string purchaseStatusUrl = 9;</code>
       */
      public java.lang.String getPurchaseStatusUrl() {
        java.lang.Object ref = purchaseStatusUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          purchaseStatusUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string purchaseStatusUrl = 9;</code>
       */
      public com.google.protobuf.ByteString
          getPurchaseStatusUrlBytes() {
        java.lang.Object ref = purchaseStatusUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          purchaseStatusUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string purchaseStatusUrl = 9;</code>
       */
      public Builder setPurchaseStatusUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        purchaseStatusUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string purchaseStatusUrl = 9;</code>
       */
      public Builder clearPurchaseStatusUrl() {
        bitField0_ = (bitField0_ & ~0x00000008);
        purchaseStatusUrl_ = getDefaultInstance().getPurchaseStatusUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string purchaseStatusUrl = 9;</code>
       */
      public Builder setPurchaseStatusUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        purchaseStatusUrl_ = value;
        onChanged();
        return this;
      }

      // optional string checkoutServiceId = 12;
      private java.lang.Object checkoutServiceId_ = "";
      /**
       * <code>optional string checkoutServiceId = 12;</code>
       */
      public boolean hasCheckoutServiceId() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string checkoutServiceId = 12;</code>
       */
      public java.lang.String getCheckoutServiceId() {
        java.lang.Object ref = checkoutServiceId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          checkoutServiceId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string checkoutServiceId = 12;</code>
       */
      public com.google.protobuf.ByteString
          getCheckoutServiceIdBytes() {
        java.lang.Object ref = checkoutServiceId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          checkoutServiceId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string checkoutServiceId = 12;</code>
       */
      public Builder setCheckoutServiceId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        checkoutServiceId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string checkoutServiceId = 12;</code>
       */
      public Builder clearCheckoutServiceId() {
        bitField0_ = (bitField0_ & ~0x00000010);
        checkoutServiceId_ = getDefaultInstance().getCheckoutServiceId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string checkoutServiceId = 12;</code>
       */
      public Builder setCheckoutServiceIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        checkoutServiceId_ = value;
        onChanged();
        return this;
      }

      // optional bool checkoutTokenRequired = 13;
      private boolean checkoutTokenRequired_ ;
      /**
       * <code>optional bool checkoutTokenRequired = 13;</code>
       */
      public boolean hasCheckoutTokenRequired() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bool checkoutTokenRequired = 13;</code>
       */
      public boolean getCheckoutTokenRequired() {
        return checkoutTokenRequired_;
      }
      /**
       * <code>optional bool checkoutTokenRequired = 13;</code>
       */
      public Builder setCheckoutTokenRequired(boolean value) {
        bitField0_ |= 0x00000020;
        checkoutTokenRequired_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool checkoutTokenRequired = 13;</code>
       */
      public Builder clearCheckoutTokenRequired() {
        bitField0_ = (bitField0_ & ~0x00000020);
        checkoutTokenRequired_ = false;
        onChanged();
        return this;
      }

      // optional string baseCheckoutUrl = 14;
      private java.lang.Object baseCheckoutUrl_ = "";
      /**
       * <code>optional string baseCheckoutUrl = 14;</code>
       */
      public boolean hasBaseCheckoutUrl() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string baseCheckoutUrl = 14;</code>
       */
      public java.lang.String getBaseCheckoutUrl() {
        java.lang.Object ref = baseCheckoutUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          baseCheckoutUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string baseCheckoutUrl = 14;</code>
       */
      public com.google.protobuf.ByteString
          getBaseCheckoutUrlBytes() {
        java.lang.Object ref = baseCheckoutUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          baseCheckoutUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string baseCheckoutUrl = 14;</code>
       */
      public Builder setBaseCheckoutUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        baseCheckoutUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string baseCheckoutUrl = 14;</code>
       */
      public Builder clearBaseCheckoutUrl() {
        bitField0_ = (bitField0_ & ~0x00000040);
        baseCheckoutUrl_ = getDefaultInstance().getBaseCheckoutUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string baseCheckoutUrl = 14;</code>
       */
      public Builder setBaseCheckoutUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        baseCheckoutUrl_ = value;
        onChanged();
        return this;
      }

      // repeated string tosCheckboxHtml = 37;
      private com.google.protobuf.LazyStringList tosCheckboxHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureTosCheckboxHtmlIsMutable() {
        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
          tosCheckboxHtml_ = new com.google.protobuf.LazyStringArrayList(tosCheckboxHtml_);
          bitField0_ |= 0x00000080;
         }
      }
      /**
       * <code>repeated string tosCheckboxHtml = 37;</code>
       */
      public java.util.List<java.lang.String>
          getTosCheckboxHtmlList() {
        return java.util.Collections.unmodifiableList(tosCheckboxHtml_);
      }
      /**
       * <code>repeated string tosCheckboxHtml = 37;</code>
       */
      public int getTosCheckboxHtmlCount() {
        return tosCheckboxHtml_.size();
      }
      /**
       * <code>repeated string tosCheckboxHtml = 37;</code>
       */
      public java.lang.String getTosCheckboxHtml(int index) {
        return tosCheckboxHtml_.get(index);
      }
      /**
       * <code>repeated string tosCheckboxHtml = 37;</code>
       */
      public com.google.protobuf.ByteString
          getTosCheckboxHtmlBytes(int index) {
        return tosCheckboxHtml_.getByteString(index);
      }
      /**
       * <code>repeated string tosCheckboxHtml = 37;</code>
       */
      public Builder setTosCheckboxHtml(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTosCheckboxHtmlIsMutable();
        tosCheckboxHtml_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string tosCheckboxHtml = 37;</code>
       */
      public Builder addTosCheckboxHtml(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTosCheckboxHtmlIsMutable();
        tosCheckboxHtml_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string tosCheckboxHtml = 37;</code>
       */
      public Builder addAllTosCheckboxHtml(
          java.lang.Iterable<java.lang.String> values) {
        ensureTosCheckboxHtmlIsMutable();
        super.addAll(values, tosCheckboxHtml_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string tosCheckboxHtml = 37;</code>
       */
      public Builder clearTosCheckboxHtml() {
        tosCheckboxHtml_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000080);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string tosCheckboxHtml = 37;</code>
       */
      public Builder addTosCheckboxHtmlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureTosCheckboxHtmlIsMutable();
        tosCheckboxHtml_.add(value);
        onChanged();
        return this;
      }

      // optional int32 iabPermissionError = 38;
      private int iabPermissionError_ ;
      /**
       * <code>optional int32 iabPermissionError = 38;</code>
       */
      public boolean hasIabPermissionError() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional int32 iabPermissionError = 38;</code>
       */
      public int getIabPermissionError() {
        return iabPermissionError_;
      }
      /**
       * <code>optional int32 iabPermissionError = 38;</code>
       */
      public Builder setIabPermissionError(int value) {
        bitField0_ |= 0x00000100;
        iabPermissionError_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 iabPermissionError = 38;</code>
       */
      public Builder clearIabPermissionError() {
        bitField0_ = (bitField0_ & ~0x00000100);
        iabPermissionError_ = 0;
        onChanged();
        return this;
      }

      // optional .PurchaseStatusResponse purchaseStatusResponse = 39;
      private com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse purchaseStatusResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponseOrBuilder> purchaseStatusResponseBuilder_;
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
       */
      public boolean hasPurchaseStatusResponse() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse getPurchaseStatusResponse() {
        if (purchaseStatusResponseBuilder_ == null) {
          return purchaseStatusResponse_;
        } else {
          return purchaseStatusResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
       */
      public Builder setPurchaseStatusResponse(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse value) {
        if (purchaseStatusResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          purchaseStatusResponse_ = value;
          onChanged();
        } else {
          purchaseStatusResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
       */
      public Builder setPurchaseStatusResponse(
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.Builder builderForValue) {
        if (purchaseStatusResponseBuilder_ == null) {
          purchaseStatusResponse_ = builderForValue.build();
          onChanged();
        } else {
          purchaseStatusResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
       */
      public Builder mergePurchaseStatusResponse(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse value) {
        if (purchaseStatusResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200) &&
              purchaseStatusResponse_ != com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.getDefaultInstance()) {
            purchaseStatusResponse_ =
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.newBuilder(purchaseStatusResponse_).mergeFrom(value).buildPartial();
          } else {
            purchaseStatusResponse_ = value;
          }
          onChanged();
        } else {
          purchaseStatusResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
       */
      public Builder clearPurchaseStatusResponse() {
        if (purchaseStatusResponseBuilder_ == null) {
          purchaseStatusResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.getDefaultInstance();
          onChanged();
        } else {
          purchaseStatusResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.Builder getPurchaseStatusResponseBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getPurchaseStatusResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponseOrBuilder getPurchaseStatusResponseOrBuilder() {
        if (purchaseStatusResponseBuilder_ != null) {
          return purchaseStatusResponseBuilder_.getMessageOrBuilder();
        } else {
          return purchaseStatusResponse_;
        }
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 39;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponseOrBuilder> 
          getPurchaseStatusResponseFieldBuilder() {
        if (purchaseStatusResponseBuilder_ == null) {
          purchaseStatusResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponseOrBuilder>(
                  purchaseStatusResponse_,
                  getParentForChildren(),
                  isClean());
          purchaseStatusResponse_ = null;
        }
        return purchaseStatusResponseBuilder_;
      }

      // optional string purchaseCookie = 46;
      private java.lang.Object purchaseCookie_ = "";
      /**
       * <code>optional string purchaseCookie = 46;</code>
       */
      public boolean hasPurchaseCookie() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional string purchaseCookie = 46;</code>
       */
      public java.lang.String getPurchaseCookie() {
        java.lang.Object ref = purchaseCookie_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          purchaseCookie_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string purchaseCookie = 46;</code>
       */
      public com.google.protobuf.ByteString
          getPurchaseCookieBytes() {
        java.lang.Object ref = purchaseCookie_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          purchaseCookie_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string purchaseCookie = 46;</code>
       */
      public Builder setPurchaseCookie(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        purchaseCookie_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string purchaseCookie = 46;</code>
       */
      public Builder clearPurchaseCookie() {
        bitField0_ = (bitField0_ & ~0x00000400);
        purchaseCookie_ = getDefaultInstance().getPurchaseCookie();
        onChanged();
        return this;
      }
      /**
       * <code>optional string purchaseCookie = 46;</code>
       */
      public Builder setPurchaseCookieBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        purchaseCookie_ = value;
        onChanged();
        return this;
      }

      // optional .Challenge challenge = 49;
      private com.akdeniz.googleplaycrawler.GooglePlay.Challenge challenge_ = com.akdeniz.googleplaycrawler.GooglePlay.Challenge.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Challenge, com.akdeniz.googleplaycrawler.GooglePlay.Challenge.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ChallengeOrBuilder> challengeBuilder_;
      /**
       * <code>optional .Challenge challenge = 49;</code>
       */
      public boolean hasChallenge() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional .Challenge challenge = 49;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Challenge getChallenge() {
        if (challengeBuilder_ == null) {
          return challenge_;
        } else {
          return challengeBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Challenge challenge = 49;</code>
       */
      public Builder setChallenge(com.akdeniz.googleplaycrawler.GooglePlay.Challenge value) {
        if (challengeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          challenge_ = value;
          onChanged();
        } else {
          challengeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .Challenge challenge = 49;</code>
       */
      public Builder setChallenge(
          com.akdeniz.googleplaycrawler.GooglePlay.Challenge.Builder builderForValue) {
        if (challengeBuilder_ == null) {
          challenge_ = builderForValue.build();
          onChanged();
        } else {
          challengeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .Challenge challenge = 49;</code>
       */
      public Builder mergeChallenge(com.akdeniz.googleplaycrawler.GooglePlay.Challenge value) {
        if (challengeBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800) &&
              challenge_ != com.akdeniz.googleplaycrawler.GooglePlay.Challenge.getDefaultInstance()) {
            challenge_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Challenge.newBuilder(challenge_).mergeFrom(value).buildPartial();
          } else {
            challenge_ = value;
          }
          onChanged();
        } else {
          challengeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .Challenge challenge = 49;</code>
       */
      public Builder clearChallenge() {
        if (challengeBuilder_ == null) {
          challenge_ = com.akdeniz.googleplaycrawler.GooglePlay.Challenge.getDefaultInstance();
          onChanged();
        } else {
          challengeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }
      /**
       * <code>optional .Challenge challenge = 49;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Challenge.Builder getChallengeBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getChallengeFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Challenge challenge = 49;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ChallengeOrBuilder getChallengeOrBuilder() {
        if (challengeBuilder_ != null) {
          return challengeBuilder_.getMessageOrBuilder();
        } else {
          return challenge_;
        }
      }
      /**
       * <code>optional .Challenge challenge = 49;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Challenge, com.akdeniz.googleplaycrawler.GooglePlay.Challenge.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ChallengeOrBuilder> 
          getChallengeFieldBuilder() {
        if (challengeBuilder_ == null) {
          challengeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Challenge, com.akdeniz.googleplaycrawler.GooglePlay.Challenge.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ChallengeOrBuilder>(
                  challenge_,
                  getParentForChildren(),
                  isClean());
          challenge_ = null;
        }
        return challengeBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:BuyResponse)
    }

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

    // @@protoc_insertion_point(class_scope:BuyResponse)
  }

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

    // optional .AndroidAppDeliveryData appDeliveryData = 2;
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
     */
    boolean hasAppDeliveryData();
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData getAppDeliveryData();
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder getAppDeliveryDataOrBuilder();
  }
  /**
   * Protobuf type {@code DeliveryResponse}
   */
  public static final class DeliveryResponse extends
      com.google.protobuf.GeneratedMessage
      implements DeliveryResponseOrBuilder {
    // Use DeliveryResponse.newBuilder() to construct.
    private DeliveryResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DeliveryResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public DeliveryResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

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

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DeliveryResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.Builder.class);
    }

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

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

    private int bitField0_;
    // optional .AndroidAppDeliveryData appDeliveryData = 2;
    public static final int APPDELIVERYDATA_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData appDeliveryData_;
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
     */
    public boolean hasAppDeliveryData() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData getAppDeliveryData() {
      return appDeliveryData_;
    }
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder getAppDeliveryDataOrBuilder() {
      return appDeliveryData_;
    }

    private void initFields() {
      appDeliveryData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

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

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

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

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code DeliveryResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DeliveryResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DeliveryResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        if (appDeliveryDataBuilder_ == null) {
          appDeliveryData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance();
        } else {
          appDeliveryDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DeliveryResponse_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse build() {
        com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse result = new com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (appDeliveryDataBuilder_ == null) {
          result.appDeliveryData_ = appDeliveryData_;
        } else {
          result.appDeliveryData_ = appDeliveryDataBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.getDefaultInstance()) return this;
        if (other.hasAppDeliveryData()) {
          mergeAppDeliveryData(other.getAppDeliveryData());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional .AndroidAppDeliveryData appDeliveryData = 2;
      private com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData appDeliveryData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder> appDeliveryDataBuilder_;
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
       */
      public boolean hasAppDeliveryData() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData getAppDeliveryData() {
        if (appDeliveryDataBuilder_ == null) {
          return appDeliveryData_;
        } else {
          return appDeliveryDataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
       */
      public Builder setAppDeliveryData(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData value) {
        if (appDeliveryDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          appDeliveryData_ = value;
          onChanged();
        } else {
          appDeliveryDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
       */
      public Builder setAppDeliveryData(
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder builderForValue) {
        if (appDeliveryDataBuilder_ == null) {
          appDeliveryData_ = builderForValue.build();
          onChanged();
        } else {
          appDeliveryDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
       */
      public Builder mergeAppDeliveryData(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData value) {
        if (appDeliveryDataBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              appDeliveryData_ != com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance()) {
            appDeliveryData_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.newBuilder(appDeliveryData_).mergeFrom(value).buildPartial();
          } else {
            appDeliveryData_ = value;
          }
          onChanged();
        } else {
          appDeliveryDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
       */
      public Builder clearAppDeliveryData() {
        if (appDeliveryDataBuilder_ == null) {
          appDeliveryData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance();
          onChanged();
        } else {
          appDeliveryDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder getAppDeliveryDataBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getAppDeliveryDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder getAppDeliveryDataOrBuilder() {
        if (appDeliveryDataBuilder_ != null) {
          return appDeliveryDataBuilder_.getMessageOrBuilder();
        } else {
          return appDeliveryData_;
        }
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder> 
          getAppDeliveryDataFieldBuilder() {
        if (appDeliveryDataBuilder_ == null) {
          appDeliveryDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder>(
                  appDeliveryData_,
                  getParentForChildren(),
                  isClean());
          appDeliveryData_ = null;
        }
        return appDeliveryDataBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:DeliveryResponse)
    }

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

    // @@protoc_insertion_point(class_scope:DeliveryResponse)
  }

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

    // optional .AddressChallenge addressChallenge = 1;
    /**
     * <code>optional .AddressChallenge addressChallenge = 1;</code>
     */
    boolean hasAddressChallenge();
    /**
     * <code>optional .AddressChallenge addressChallenge = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge getAddressChallenge();
    /**
     * <code>optional .AddressChallenge addressChallenge = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AddressChallengeOrBuilder getAddressChallengeOrBuilder();

    // optional .AuthenticationChallenge authenticationChallenge = 2;
    /**
     * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
     */
    boolean hasAuthenticationChallenge();
    /**
     * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge getAuthenticationChallenge();
    /**
     * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallengeOrBuilder getAuthenticationChallengeOrBuilder();
  }
  /**
   * Protobuf type {@code Challenge}
   */
  public static final class Challenge extends
      com.google.protobuf.GeneratedMessage
      implements ChallengeOrBuilder {
    // Use Challenge.newBuilder() to construct.
    private Challenge(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Challenge(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public Challenge getDefaultInstanceForType() {
      return defaultInstance;
    }

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

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Challenge_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Challenge.class, com.akdeniz.googleplaycrawler.GooglePlay.Challenge.Builder.class);
    }

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

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

    private int bitField0_;
    // optional .AddressChallenge addressChallenge = 1;
    public static final int ADDRESSCHALLENGE_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge addressChallenge_;
    /**
     * <code>optional .AddressChallenge addressChallenge = 1;</code>
     */
    public boolean hasAddressChallenge() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .AddressChallenge addressChallenge = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge getAddressChallenge() {
      return addressChallenge_;
    }
    /**
     * <code>optional .AddressChallenge addressChallenge = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AddressChallengeOrBuilder getAddressChallengeOrBuilder() {
      return addressChallenge_;
    }

    // optional .AuthenticationChallenge authenticationChallenge = 2;
    public static final int AUTHENTICATIONCHALLENGE_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge authenticationChallenge_;
    /**
     * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
     */
    public boolean hasAuthenticationChallenge() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge getAuthenticationChallenge() {
      return authenticationChallenge_;
    }
    /**
     * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallengeOrBuilder getAuthenticationChallengeOrBuilder() {
      return authenticationChallenge_;
    }

    private void initFields() {
      addressChallenge_ = com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.getDefaultInstance();
      authenticationChallenge_ = com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

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

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

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

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.Challenge parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Challenge parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Challenge parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Challenge parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Challenge parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Challenge parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Challenge parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Challenge parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Challenge parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Challenge parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Challenge prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Challenge}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.ChallengeOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Challenge_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Challenge_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Challenge.class, com.akdeniz.googleplaycrawler.GooglePlay.Challenge.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Challenge.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        if (addressChallengeBuilder_ == null) {
          addressChallenge_ = com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.getDefaultInstance();
        } else {
          addressChallengeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (authenticationChallengeBuilder_ == null) {
          authenticationChallenge_ = com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.getDefaultInstance();
        } else {
          authenticationChallengeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Challenge_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Challenge getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Challenge.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Challenge build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Challenge result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Challenge buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Challenge result = new com.akdeniz.googleplaycrawler.GooglePlay.Challenge(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (addressChallengeBuilder_ == null) {
          result.addressChallenge_ = addressChallenge_;
        } else {
          result.addressChallenge_ = addressChallengeBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (authenticationChallengeBuilder_ == null) {
          result.authenticationChallenge_ = authenticationChallenge_;
        } else {
          result.authenticationChallenge_ = authenticationChallengeBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Challenge) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Challenge)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Challenge other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Challenge.getDefaultInstance()) return this;
        if (other.hasAddressChallenge()) {
          mergeAddressChallenge(other.getAddressChallenge());
        }
        if (other.hasAuthenticationChallenge()) {
          mergeAuthenticationChallenge(other.getAuthenticationChallenge());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional .AddressChallenge addressChallenge = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge addressChallenge_ = com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge, com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AddressChallengeOrBuilder> addressChallengeBuilder_;
      /**
       * <code>optional .AddressChallenge addressChallenge = 1;</code>
       */
      public boolean hasAddressChallenge() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .AddressChallenge addressChallenge = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge getAddressChallenge() {
        if (addressChallengeBuilder_ == null) {
          return addressChallenge_;
        } else {
          return addressChallengeBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AddressChallenge addressChallenge = 1;</code>
       */
      public Builder setAddressChallenge(com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge value) {
        if (addressChallengeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          addressChallenge_ = value;
          onChanged();
        } else {
          addressChallengeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AddressChallenge addressChallenge = 1;</code>
       */
      public Builder setAddressChallenge(
          com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.Builder builderForValue) {
        if (addressChallengeBuilder_ == null) {
          addressChallenge_ = builderForValue.build();
          onChanged();
        } else {
          addressChallengeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AddressChallenge addressChallenge = 1;</code>
       */
      public Builder mergeAddressChallenge(com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge value) {
        if (addressChallengeBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              addressChallenge_ != com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.getDefaultInstance()) {
            addressChallenge_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.newBuilder(addressChallenge_).mergeFrom(value).buildPartial();
          } else {
            addressChallenge_ = value;
          }
          onChanged();
        } else {
          addressChallengeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AddressChallenge addressChallenge = 1;</code>
       */
      public Builder clearAddressChallenge() {
        if (addressChallengeBuilder_ == null) {
          addressChallenge_ = com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.getDefaultInstance();
          onChanged();
        } else {
          addressChallengeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .AddressChallenge addressChallenge = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.Builder getAddressChallengeBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getAddressChallengeFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AddressChallenge addressChallenge = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AddressChallengeOrBuilder getAddressChallengeOrBuilder() {
        if (addressChallengeBuilder_ != null) {
          return addressChallengeBuilder_.getMessageOrBuilder();
        } else {
          return addressChallenge_;
        }
      }
      /**
       * <code>optional .AddressChallenge addressChallenge = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge, com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AddressChallengeOrBuilder> 
          getAddressChallengeFieldBuilder() {
        if (addressChallengeBuilder_ == null) {
          addressChallengeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge, com.akdeniz.googleplaycrawler.GooglePlay.AddressChallenge.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AddressChallengeOrBuilder>(
                  addressChallenge_,
                  getParentForChildren(),
                  isClean());
          addressChallenge_ = null;
        }
        return addressChallengeBuilder_;
      }

      // optional .AuthenticationChallenge authenticationChallenge = 2;
      private com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge authenticationChallenge_ = com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge, com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallengeOrBuilder> authenticationChallengeBuilder_;
      /**
       * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
       */
      public boolean hasAuthenticationChallenge() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge getAuthenticationChallenge() {
        if (authenticationChallengeBuilder_ == null) {
          return authenticationChallenge_;
        } else {
          return authenticationChallengeBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
       */
      public Builder setAuthenticationChallenge(com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge value) {
        if (authenticationChallengeBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          authenticationChallenge_ = value;
          onChanged();
        } else {
          authenticationChallengeBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
       */
      public Builder setAuthenticationChallenge(
          com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.Builder builderForValue) {
        if (authenticationChallengeBuilder_ == null) {
          authenticationChallenge_ = builderForValue.build();
          onChanged();
        } else {
          authenticationChallengeBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
       */
      public Builder mergeAuthenticationChallenge(com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge value) {
        if (authenticationChallengeBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              authenticationChallenge_ != com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.getDefaultInstance()) {
            authenticationChallenge_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.newBuilder(authenticationChallenge_).mergeFrom(value).buildPartial();
          } else {
            authenticationChallenge_ = value;
          }
          onChanged();
        } else {
          authenticationChallengeBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
       */
      public Builder clearAuthenticationChallenge() {
        if (authenticationChallengeBuilder_ == null) {
          authenticationChallenge_ = com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.getDefaultInstance();
          onChanged();
        } else {
          authenticationChallengeBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.Builder getAuthenticationChallengeBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getAuthenticationChallengeFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallengeOrBuilder getAuthenticationChallengeOrBuilder() {
        if (authenticationChallengeBuilder_ != null) {
          return authenticationChallengeBuilder_.getMessageOrBuilder();
        } else {
          return authenticationChallenge_;
        }
      }
      /**
       * <code>optional .AuthenticationChallenge authenticationChallenge = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge, com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallengeOrBuilder> 
          getAuthenticationChallengeFieldBuilder() {
        if (authenticationChallengeBuilder_ == null) {
          authenticationChallengeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge, com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallenge.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AuthenticationChallengeOrBuilder>(
                  authenticationChallenge_,
                  getParentForChildren(),
                  isClean());
          authenticationChallenge_ = null;
        }
        return authenticationChallengeBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Challenge)
    }

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

    // @@protoc_insertion_point(class_scope:Challenge)
  }

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

    // optional string description = 1;
    /**
     * <code>optional string description = 1;</code>
     */
    boolean hasDescription();
    /**
     * <code>optional string description = 1;</code>
     */
    java.lang.String getDescription();
    /**
     * <code>optional string description = 1;</code>
     */
    com.google.protobuf.ByteString
        getDescriptionBytes();

    // optional bool checked = 2;
    /**
     * <code>optional bool checked = 2;</code>
     */
    boolean hasChecked();
    /**
     * <code>optional bool checked = 2;</code>
     */
    boolean getChecked();

    // optional bool required = 3;
    /**
     * <code>optional bool required = 3;</code>
     */
    boolean hasRequired();
    /**
     * <code>optional bool required = 3;</code>
     */
    boolean getRequired();
  }
  /**
   * Protobuf type {@code FormCheckbox}
   */
  public static final class FormCheckbox extends
      com.google.protobuf.GeneratedMessage
      implements FormCheckboxOrBuilder {
    // Use FormCheckbox.newBuilder() to construct.
    private FormCheckbox(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private FormCheckbox(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public FormCheckbox getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private FormCheckbox(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              description_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              checked_ = input.readBool();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              required_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FormCheckbox_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FormCheckbox_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.class, com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string description = 1;
    public static final int DESCRIPTION_FIELD_NUMBER = 1;
    private java.lang.Object description_;
    /**
     * <code>optional string description = 1;</code>
     */
    public boolean hasDescription() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string description = 1;</code>
     */
    public java.lang.String getDescription() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          description_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string description = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDescriptionBytes() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        description_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool checked = 2;
    public static final int CHECKED_FIELD_NUMBER = 2;
    private boolean checked_;
    /**
     * <code>optional bool checked = 2;</code>
     */
    public boolean hasChecked() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bool checked = 2;</code>
     */
    public boolean getChecked() {
      return checked_;
    }

    // optional bool required = 3;
    public static final int REQUIRED_FIELD_NUMBER = 3;
    private boolean required_;
    /**
     * <code>optional bool required = 3;</code>
     */
    public boolean hasRequired() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool required = 3;</code>
     */
    public boolean getRequired() {
      return required_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getDescriptionBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, checked_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, required_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getDescriptionBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, checked_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, required_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code FormCheckbox}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.FormCheckboxOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FormCheckbox_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FormCheckbox_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.class, com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        description_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        checked_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        required_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FormCheckbox_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox build() {
        com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox result = new com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.description_ = description_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.checked_ = checked_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.required_ = required_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.FormCheckbox.getDefaultInstance()) return this;
        if (other.hasDescription()) {
          bitField0_ |= 0x00000001;
          description_ = other.description_;
          onChanged();
        }
        if (other.hasChecked()) {
          setChecked(other.getChecked());
        }
        if (other.hasRequired()) {
          setRequired(other.getRequired());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string description = 1;
      private java.lang.Object description_ = "";
      /**
       * <code>optional string description = 1;</code>
       */
      public boolean hasDescription() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string description = 1;</code>
       */
      public java.lang.String getDescription() {
        java.lang.Object ref = description_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          description_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string description = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDescriptionBytes() {
        java.lang.Object ref = description_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          description_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string description = 1;</code>
       */
      public Builder setDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        description_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string description = 1;</code>
       */
      public Builder clearDescription() {
        bitField0_ = (bitField0_ & ~0x00000001);
        description_ = getDefaultInstance().getDescription();
        onChanged();
        return this;
      }
      /**
       * <code>optional string description = 1;</code>
       */
      public Builder setDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        description_ = value;
        onChanged();
        return this;
      }

      // optional bool checked = 2;
      private boolean checked_ ;
      /**
       * <code>optional bool checked = 2;</code>
       */
      public boolean hasChecked() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool checked = 2;</code>
       */
      public boolean getChecked() {
        return checked_;
      }
      /**
       * <code>optional bool checked = 2;</code>
       */
      public Builder setChecked(boolean value) {
        bitField0_ |= 0x00000002;
        checked_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool checked = 2;</code>
       */
      public Builder clearChecked() {
        bitField0_ = (bitField0_ & ~0x00000002);
        checked_ = false;
        onChanged();
        return this;
      }

      // optional bool required = 3;
      private boolean required_ ;
      /**
       * <code>optional bool required = 3;</code>
       */
      public boolean hasRequired() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool required = 3;</code>
       */
      public boolean getRequired() {
        return required_;
      }
      /**
       * <code>optional bool required = 3;</code>
       */
      public Builder setRequired(boolean value) {
        bitField0_ |= 0x00000004;
        required_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool required = 3;</code>
       */
      public Builder clearRequired() {
        bitField0_ = (bitField0_ & ~0x00000004);
        required_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:FormCheckbox)
    }

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

    // @@protoc_insertion_point(class_scope:FormCheckbox)
  }

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

    // optional string name = 1;
    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // optional string description = 2;
    /**
     * <code>optional string description = 2;</code>
     */
    boolean hasDescription();
    /**
     * <code>optional string description = 2;</code>
     */
    java.lang.String getDescription();
    /**
     * <code>optional string description = 2;</code>
     */
    com.google.protobuf.ByteString
        getDescriptionBytes();

    // optional .Offer offer = 3;
    /**
     * <code>optional .Offer offer = 3;</code>
     */
    boolean hasOffer();
    /**
     * <code>optional .Offer offer = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Offer getOffer();
    /**
     * <code>optional .Offer offer = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getOfferOrBuilder();

    // optional .Money amount = 4;
    /**
     * <code>optional .Money amount = 4;</code>
     */
    boolean hasAmount();
    /**
     * <code>optional .Money amount = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Money getAmount();
    /**
     * <code>optional .Money amount = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.MoneyOrBuilder getAmountOrBuilder();
  }
  /**
   * Protobuf type {@code LineItem}
   */
  public static final class LineItem extends
      com.google.protobuf.GeneratedMessage
      implements LineItemOrBuilder {
    // Use LineItem.newBuilder() to construct.
    private LineItem(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private LineItem(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public LineItem getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private LineItem(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              name_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              description_ = input.readBytes();
              break;
            }
            case 26: {
              com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = offer_.toBuilder();
              }
              offer_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Offer.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(offer_);
                offer_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 34: {
              com.akdeniz.googleplaycrawler.GooglePlay.Money.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = amount_.toBuilder();
              }
              amount_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Money.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(amount_);
                amount_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LineItem_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LineItem_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.LineItem.class, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string description = 2;
    public static final int DESCRIPTION_FIELD_NUMBER = 2;
    private java.lang.Object description_;
    /**
     * <code>optional string description = 2;</code>
     */
    public boolean hasDescription() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string description = 2;</code>
     */
    public java.lang.String getDescription() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          description_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string description = 2;</code>
     */
    public com.google.protobuf.ByteString
        getDescriptionBytes() {
      java.lang.Object ref = description_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        description_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .Offer offer = 3;
    public static final int OFFER_FIELD_NUMBER = 3;
    private com.akdeniz.googleplaycrawler.GooglePlay.Offer offer_;
    /**
     * <code>optional .Offer offer = 3;</code>
     */
    public boolean hasOffer() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .Offer offer = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Offer getOffer() {
      return offer_;
    }
    /**
     * <code>optional .Offer offer = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getOfferOrBuilder() {
      return offer_;
    }

    // optional .Money amount = 4;
    public static final int AMOUNT_FIELD_NUMBER = 4;
    private com.akdeniz.googleplaycrawler.GooglePlay.Money amount_;
    /**
     * <code>optional .Money amount = 4;</code>
     */
    public boolean hasAmount() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .Money amount = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Money getAmount() {
      return amount_;
    }
    /**
     * <code>optional .Money amount = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.MoneyOrBuilder getAmountOrBuilder() {
      return amount_;
    }

    private void initFields() {
      name_ = "";
      description_ = "";
      offer_ = com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance();
      amount_ = com.akdeniz.googleplaycrawler.GooglePlay.Money.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getDescriptionBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, offer_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, amount_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getDescriptionBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, offer_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, amount_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.LineItem parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LineItem parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LineItem parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LineItem parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LineItem parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LineItem parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LineItem parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LineItem parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LineItem parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LineItem parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.LineItem prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code LineItem}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.LineItemOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LineItem_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LineItem_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.LineItem.class, com.akdeniz.googleplaycrawler.GooglePlay.LineItem.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.LineItem.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        description_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (offerBuilder_ == null) {
          offer_ = com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance();
        } else {
          offerBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (amountBuilder_ == null) {
          amount_ = com.akdeniz.googleplaycrawler.GooglePlay.Money.getDefaultInstance();
        } else {
          amountBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LineItem_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LineItem getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LineItem build() {
        com.akdeniz.googleplaycrawler.GooglePlay.LineItem result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LineItem buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.LineItem result = new com.akdeniz.googleplaycrawler.GooglePlay.LineItem(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.description_ = description_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (offerBuilder_ == null) {
          result.offer_ = offer_;
        } else {
          result.offer_ = offerBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (amountBuilder_ == null) {
          result.amount_ = amount_;
        } else {
          result.amount_ = amountBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.LineItem) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.LineItem)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.LineItem other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.LineItem.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasDescription()) {
          bitField0_ |= 0x00000002;
          description_ = other.description_;
          onChanged();
        }
        if (other.hasOffer()) {
          mergeOffer(other.getOffer());
        }
        if (other.hasAmount()) {
          mergeAmount(other.getAmount());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string name = 1;
      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      // optional string description = 2;
      private java.lang.Object description_ = "";
      /**
       * <code>optional string description = 2;</code>
       */
      public boolean hasDescription() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string description = 2;</code>
       */
      public java.lang.String getDescription() {
        java.lang.Object ref = description_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          description_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string description = 2;</code>
       */
      public com.google.protobuf.ByteString
          getDescriptionBytes() {
        java.lang.Object ref = description_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          description_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string description = 2;</code>
       */
      public Builder setDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        description_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string description = 2;</code>
       */
      public Builder clearDescription() {
        bitField0_ = (bitField0_ & ~0x00000002);
        description_ = getDefaultInstance().getDescription();
        onChanged();
        return this;
      }
      /**
       * <code>optional string description = 2;</code>
       */
      public Builder setDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        description_ = value;
        onChanged();
        return this;
      }

      // optional .Offer offer = 3;
      private com.akdeniz.googleplaycrawler.GooglePlay.Offer offer_ = com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> offerBuilder_;
      /**
       * <code>optional .Offer offer = 3;</code>
       */
      public boolean hasOffer() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .Offer offer = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer getOffer() {
        if (offerBuilder_ == null) {
          return offer_;
        } else {
          return offerBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Offer offer = 3;</code>
       */
      public Builder setOffer(com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (offerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          offer_ = value;
          onChanged();
        } else {
          offerBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Offer offer = 3;</code>
       */
      public Builder setOffer(
          com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder builderForValue) {
        if (offerBuilder_ == null) {
          offer_ = builderForValue.build();
          onChanged();
        } else {
          offerBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Offer offer = 3;</code>
       */
      public Builder mergeOffer(com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (offerBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              offer_ != com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance()) {
            offer_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Offer.newBuilder(offer_).mergeFrom(value).buildPartial();
          } else {
            offer_ = value;
          }
          onChanged();
        } else {
          offerBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Offer offer = 3;</code>
       */
      public Builder clearOffer() {
        if (offerBuilder_ == null) {
          offer_ = com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance();
          onChanged();
        } else {
          offerBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .Offer offer = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder getOfferBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getOfferFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Offer offer = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getOfferOrBuilder() {
        if (offerBuilder_ != null) {
          return offerBuilder_.getMessageOrBuilder();
        } else {
          return offer_;
        }
      }
      /**
       * <code>optional .Offer offer = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
          getOfferFieldBuilder() {
        if (offerBuilder_ == null) {
          offerBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder>(
                  offer_,
                  getParentForChildren(),
                  isClean());
          offer_ = null;
        }
        return offerBuilder_;
      }

      // optional .Money amount = 4;
      private com.akdeniz.googleplaycrawler.GooglePlay.Money amount_ = com.akdeniz.googleplaycrawler.GooglePlay.Money.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Money, com.akdeniz.googleplaycrawler.GooglePlay.Money.Builder, com.akdeniz.googleplaycrawler.GooglePlay.MoneyOrBuilder> amountBuilder_;
      /**
       * <code>optional .Money amount = 4;</code>
       */
      public boolean hasAmount() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .Money amount = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Money getAmount() {
        if (amountBuilder_ == null) {
          return amount_;
        } else {
          return amountBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Money amount = 4;</code>
       */
      public Builder setAmount(com.akdeniz.googleplaycrawler.GooglePlay.Money value) {
        if (amountBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          amount_ = value;
          onChanged();
        } else {
          amountBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .Money amount = 4;</code>
       */
      public Builder setAmount(
          com.akdeniz.googleplaycrawler.GooglePlay.Money.Builder builderForValue) {
        if (amountBuilder_ == null) {
          amount_ = builderForValue.build();
          onChanged();
        } else {
          amountBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .Money amount = 4;</code>
       */
      public Builder mergeAmount(com.akdeniz.googleplaycrawler.GooglePlay.Money value) {
        if (amountBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              amount_ != com.akdeniz.googleplaycrawler.GooglePlay.Money.getDefaultInstance()) {
            amount_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Money.newBuilder(amount_).mergeFrom(value).buildPartial();
          } else {
            amount_ = value;
          }
          onChanged();
        } else {
          amountBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .Money amount = 4;</code>
       */
      public Builder clearAmount() {
        if (amountBuilder_ == null) {
          amount_ = com.akdeniz.googleplaycrawler.GooglePlay.Money.getDefaultInstance();
          onChanged();
        } else {
          amountBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .Money amount = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Money.Builder getAmountBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getAmountFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Money amount = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.MoneyOrBuilder getAmountOrBuilder() {
        if (amountBuilder_ != null) {
          return amountBuilder_.getMessageOrBuilder();
        } else {
          return amount_;
        }
      }
      /**
       * <code>optional .Money amount = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Money, com.akdeniz.googleplaycrawler.GooglePlay.Money.Builder, com.akdeniz.googleplaycrawler.GooglePlay.MoneyOrBuilder> 
          getAmountFieldBuilder() {
        if (amountBuilder_ == null) {
          amountBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Money, com.akdeniz.googleplaycrawler.GooglePlay.Money.Builder, com.akdeniz.googleplaycrawler.GooglePlay.MoneyOrBuilder>(
                  amount_,
                  getParentForChildren(),
                  isClean());
          amount_ = null;
        }
        return amountBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:LineItem)
    }

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

    // @@protoc_insertion_point(class_scope:LineItem)
  }

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

    // optional int64 micros = 1;
    /**
     * <code>optional int64 micros = 1;</code>
     */
    boolean hasMicros();
    /**
     * <code>optional int64 micros = 1;</code>
     */
    long getMicros();

    // optional string currencyCode = 2;
    /**
     * <code>optional string currencyCode = 2;</code>
     */
    boolean hasCurrencyCode();
    /**
     * <code>optional string currencyCode = 2;</code>
     */
    java.lang.String getCurrencyCode();
    /**
     * <code>optional string currencyCode = 2;</code>
     */
    com.google.protobuf.ByteString
        getCurrencyCodeBytes();

    // optional string formattedAmount = 3;
    /**
     * <code>optional string formattedAmount = 3;</code>
     */
    boolean hasFormattedAmount();
    /**
     * <code>optional string formattedAmount = 3;</code>
     */
    java.lang.String getFormattedAmount();
    /**
     * <code>optional string formattedAmount = 3;</code>
     */
    com.google.protobuf.ByteString
        getFormattedAmountBytes();
  }
  /**
   * Protobuf type {@code Money}
   */
  public static final class Money extends
      com.google.protobuf.GeneratedMessage
      implements MoneyOrBuilder {
    // Use Money.newBuilder() to construct.
    private Money(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Money(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public Money getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Money(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              micros_ = input.readInt64();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              currencyCode_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              formattedAmount_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Money_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Money_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Money.class, com.akdeniz.googleplaycrawler.GooglePlay.Money.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int64 micros = 1;
    public static final int MICROS_FIELD_NUMBER = 1;
    private long micros_;
    /**
     * <code>optional int64 micros = 1;</code>
     */
    public boolean hasMicros() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 micros = 1;</code>
     */
    public long getMicros() {
      return micros_;
    }

    // optional string currencyCode = 2;
    public static final int CURRENCYCODE_FIELD_NUMBER = 2;
    private java.lang.Object currencyCode_;
    /**
     * <code>optional string currencyCode = 2;</code>
     */
    public boolean hasCurrencyCode() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string currencyCode = 2;</code>
     */
    public java.lang.String getCurrencyCode() {
      java.lang.Object ref = currencyCode_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          currencyCode_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string currencyCode = 2;</code>
     */
    public com.google.protobuf.ByteString
        getCurrencyCodeBytes() {
      java.lang.Object ref = currencyCode_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        currencyCode_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string formattedAmount = 3;
    public static final int FORMATTEDAMOUNT_FIELD_NUMBER = 3;
    private java.lang.Object formattedAmount_;
    /**
     * <code>optional string formattedAmount = 3;</code>
     */
    public boolean hasFormattedAmount() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string formattedAmount = 3;</code>
     */
    public java.lang.String getFormattedAmount() {
      java.lang.Object ref = formattedAmount_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          formattedAmount_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string formattedAmount = 3;</code>
     */
    public com.google.protobuf.ByteString
        getFormattedAmountBytes() {
      java.lang.Object ref = formattedAmount_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        formattedAmount_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, micros_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getCurrencyCodeBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getFormattedAmountBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, micros_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getCurrencyCodeBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getFormattedAmountBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.Money parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Money parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Money parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Money parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Money parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Money parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Money parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Money parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Money parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Money parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Money prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Money}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.MoneyOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Money_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Money_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Money.class, com.akdeniz.googleplaycrawler.GooglePlay.Money.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Money.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        micros_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        currencyCode_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        formattedAmount_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Money_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Money getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Money.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Money build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Money result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Money buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Money result = new com.akdeniz.googleplaycrawler.GooglePlay.Money(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.micros_ = micros_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.currencyCode_ = currencyCode_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.formattedAmount_ = formattedAmount_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Money) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Money)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Money other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Money.getDefaultInstance()) return this;
        if (other.hasMicros()) {
          setMicros(other.getMicros());
        }
        if (other.hasCurrencyCode()) {
          bitField0_ |= 0x00000002;
          currencyCode_ = other.currencyCode_;
          onChanged();
        }
        if (other.hasFormattedAmount()) {
          bitField0_ |= 0x00000004;
          formattedAmount_ = other.formattedAmount_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int64 micros = 1;
      private long micros_ ;
      /**
       * <code>optional int64 micros = 1;</code>
       */
      public boolean hasMicros() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 micros = 1;</code>
       */
      public long getMicros() {
        return micros_;
      }
      /**
       * <code>optional int64 micros = 1;</code>
       */
      public Builder setMicros(long value) {
        bitField0_ |= 0x00000001;
        micros_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 micros = 1;</code>
       */
      public Builder clearMicros() {
        bitField0_ = (bitField0_ & ~0x00000001);
        micros_ = 0L;
        onChanged();
        return this;
      }

      // optional string currencyCode = 2;
      private java.lang.Object currencyCode_ = "";
      /**
       * <code>optional string currencyCode = 2;</code>
       */
      public boolean hasCurrencyCode() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string currencyCode = 2;</code>
       */
      public java.lang.String getCurrencyCode() {
        java.lang.Object ref = currencyCode_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          currencyCode_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string currencyCode = 2;</code>
       */
      public com.google.protobuf.ByteString
          getCurrencyCodeBytes() {
        java.lang.Object ref = currencyCode_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          currencyCode_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string currencyCode = 2;</code>
       */
      public Builder setCurrencyCode(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        currencyCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string currencyCode = 2;</code>
       */
      public Builder clearCurrencyCode() {
        bitField0_ = (bitField0_ & ~0x00000002);
        currencyCode_ = getDefaultInstance().getCurrencyCode();
        onChanged();
        return this;
      }
      /**
       * <code>optional string currencyCode = 2;</code>
       */
      public Builder setCurrencyCodeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        currencyCode_ = value;
        onChanged();
        return this;
      }

      // optional string formattedAmount = 3;
      private java.lang.Object formattedAmount_ = "";
      /**
       * <code>optional string formattedAmount = 3;</code>
       */
      public boolean hasFormattedAmount() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string formattedAmount = 3;</code>
       */
      public java.lang.String getFormattedAmount() {
        java.lang.Object ref = formattedAmount_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          formattedAmount_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string formattedAmount = 3;</code>
       */
      public com.google.protobuf.ByteString
          getFormattedAmountBytes() {
        java.lang.Object ref = formattedAmount_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          formattedAmount_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string formattedAmount = 3;</code>
       */
      public Builder setFormattedAmount(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        formattedAmount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string formattedAmount = 3;</code>
       */
      public Builder clearFormattedAmount() {
        bitField0_ = (bitField0_ & ~0x00000004);
        formattedAmount_ = getDefaultInstance().getFormattedAmount();
        onChanged();
        return this;
      }
      /**
       * <code>optional string formattedAmount = 3;</code>
       */
      public Builder setFormattedAmountBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        formattedAmount_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Money)
    }

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

    // @@protoc_insertion_point(class_scope:Money)
  }

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

    // optional int32 status = 1;
    /**
     * <code>optional int32 status = 1;</code>
     */
    boolean hasStatus();
    /**
     * <code>optional int32 status = 1;</code>
     */
    int getStatus();

    // optional .DebugInfo debugInfo = 2;
    /**
     * <code>optional .DebugInfo debugInfo = 2;</code>
     */
    boolean hasDebugInfo();
    /**
     * <code>optional .DebugInfo debugInfo = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo getDebugInfo();
    /**
     * <code>optional .DebugInfo debugInfo = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DebugInfoOrBuilder getDebugInfoOrBuilder();

    // optional string localizedErrorMessage = 3;
    /**
     * <code>optional string localizedErrorMessage = 3;</code>
     */
    boolean hasLocalizedErrorMessage();
    /**
     * <code>optional string localizedErrorMessage = 3;</code>
     */
    java.lang.String getLocalizedErrorMessage();
    /**
     * <code>optional string localizedErrorMessage = 3;</code>
     */
    com.google.protobuf.ByteString
        getLocalizedErrorMessageBytes();

    // optional string purchaseId = 4;
    /**
     * <code>optional string purchaseId = 4;</code>
     */
    boolean hasPurchaseId();
    /**
     * <code>optional string purchaseId = 4;</code>
     */
    java.lang.String getPurchaseId();
    /**
     * <code>optional string purchaseId = 4;</code>
     */
    com.google.protobuf.ByteString
        getPurchaseIdBytes();
  }
  /**
   * Protobuf type {@code PurchaseNotificationResponse}
   */
  public static final class PurchaseNotificationResponse extends
      com.google.protobuf.GeneratedMessage
      implements PurchaseNotificationResponseOrBuilder {
    // Use PurchaseNotificationResponse.newBuilder() to construct.
    private PurchaseNotificationResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PurchaseNotificationResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public PurchaseNotificationResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private PurchaseNotificationResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              status_ = input.readInt32();
              break;
            }
            case 18: {
              com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = debugInfo_.toBuilder();
              }
              debugInfo_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(debugInfo_);
                debugInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              localizedErrorMessage_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              purchaseId_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseNotificationResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseNotificationResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 status = 1;
    public static final int STATUS_FIELD_NUMBER = 1;
    private int status_;
    /**
     * <code>optional int32 status = 1;</code>
     */
    public boolean hasStatus() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 status = 1;</code>
     */
    public int getStatus() {
      return status_;
    }

    // optional .DebugInfo debugInfo = 2;
    public static final int DEBUGINFO_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo debugInfo_;
    /**
     * <code>optional .DebugInfo debugInfo = 2;</code>
     */
    public boolean hasDebugInfo() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .DebugInfo debugInfo = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo getDebugInfo() {
      return debugInfo_;
    }
    /**
     * <code>optional .DebugInfo debugInfo = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfoOrBuilder getDebugInfoOrBuilder() {
      return debugInfo_;
    }

    // optional string localizedErrorMessage = 3;
    public static final int LOCALIZEDERRORMESSAGE_FIELD_NUMBER = 3;
    private java.lang.Object localizedErrorMessage_;
    /**
     * <code>optional string localizedErrorMessage = 3;</code>
     */
    public boolean hasLocalizedErrorMessage() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string localizedErrorMessage = 3;</code>
     */
    public java.lang.String getLocalizedErrorMessage() {
      java.lang.Object ref = localizedErrorMessage_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          localizedErrorMessage_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string localizedErrorMessage = 3;</code>
     */
    public com.google.protobuf.ByteString
        getLocalizedErrorMessageBytes() {
      java.lang.Object ref = localizedErrorMessage_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        localizedErrorMessage_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string purchaseId = 4;
    public static final int PURCHASEID_FIELD_NUMBER = 4;
    private java.lang.Object purchaseId_;
    /**
     * <code>optional string purchaseId = 4;</code>
     */
    public boolean hasPurchaseId() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string purchaseId = 4;</code>
     */
    public java.lang.String getPurchaseId() {
      java.lang.Object ref = purchaseId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          purchaseId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string purchaseId = 4;</code>
     */
    public com.google.protobuf.ByteString
        getPurchaseIdBytes() {
      java.lang.Object ref = purchaseId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        purchaseId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      status_ = 0;
      debugInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.getDefaultInstance();
      localizedErrorMessage_ = "";
      purchaseId_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, status_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, debugInfo_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getLocalizedErrorMessageBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getPurchaseIdBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, status_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, debugInfo_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getLocalizedErrorMessageBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getPurchaseIdBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code PurchaseNotificationResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseNotificationResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseNotificationResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        status_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (debugInfoBuilder_ == null) {
          debugInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.getDefaultInstance();
        } else {
          debugInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        localizedErrorMessage_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        purchaseId_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseNotificationResponse_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse build() {
        com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse result = new com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.status_ = status_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (debugInfoBuilder_ == null) {
          result.debugInfo_ = debugInfo_;
        } else {
          result.debugInfo_ = debugInfoBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.localizedErrorMessage_ = localizedErrorMessage_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.purchaseId_ = purchaseId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.PurchaseNotificationResponse.getDefaultInstance()) return this;
        if (other.hasStatus()) {
          setStatus(other.getStatus());
        }
        if (other.hasDebugInfo()) {
          mergeDebugInfo(other.getDebugInfo());
        }
        if (other.hasLocalizedErrorMessage()) {
          bitField0_ |= 0x00000004;
          localizedErrorMessage_ = other.localizedErrorMessage_;
          onChanged();
        }
        if (other.hasPurchaseId()) {
          bitField0_ |= 0x00000008;
          purchaseId_ = other.purchaseId_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 status = 1;
      private int status_ ;
      /**
       * <code>optional int32 status = 1;</code>
       */
      public boolean hasStatus() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 status = 1;</code>
       */
      public int getStatus() {
        return status_;
      }
      /**
       * <code>optional int32 status = 1;</code>
       */
      public Builder setStatus(int value) {
        bitField0_ |= 0x00000001;
        status_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 status = 1;</code>
       */
      public Builder clearStatus() {
        bitField0_ = (bitField0_ & ~0x00000001);
        status_ = 0;
        onChanged();
        return this;
      }

      // optional .DebugInfo debugInfo = 2;
      private com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo debugInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfoOrBuilder> debugInfoBuilder_;
      /**
       * <code>optional .DebugInfo debugInfo = 2;</code>
       */
      public boolean hasDebugInfo() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .DebugInfo debugInfo = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo getDebugInfo() {
        if (debugInfoBuilder_ == null) {
          return debugInfo_;
        } else {
          return debugInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .DebugInfo debugInfo = 2;</code>
       */
      public Builder setDebugInfo(com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo value) {
        if (debugInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          debugInfo_ = value;
          onChanged();
        } else {
          debugInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .DebugInfo debugInfo = 2;</code>
       */
      public Builder setDebugInfo(
          com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Builder builderForValue) {
        if (debugInfoBuilder_ == null) {
          debugInfo_ = builderForValue.build();
          onChanged();
        } else {
          debugInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .DebugInfo debugInfo = 2;</code>
       */
      public Builder mergeDebugInfo(com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo value) {
        if (debugInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              debugInfo_ != com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.getDefaultInstance()) {
            debugInfo_ =
              com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.newBuilder(debugInfo_).mergeFrom(value).buildPartial();
          } else {
            debugInfo_ = value;
          }
          onChanged();
        } else {
          debugInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .DebugInfo debugInfo = 2;</code>
       */
      public Builder clearDebugInfo() {
        if (debugInfoBuilder_ == null) {
          debugInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.getDefaultInstance();
          onChanged();
        } else {
          debugInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .DebugInfo debugInfo = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Builder getDebugInfoBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getDebugInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .DebugInfo debugInfo = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfoOrBuilder getDebugInfoOrBuilder() {
        if (debugInfoBuilder_ != null) {
          return debugInfoBuilder_.getMessageOrBuilder();
        } else {
          return debugInfo_;
        }
      }
      /**
       * <code>optional .DebugInfo debugInfo = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfoOrBuilder> 
          getDebugInfoFieldBuilder() {
        if (debugInfoBuilder_ == null) {
          debugInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfoOrBuilder>(
                  debugInfo_,
                  getParentForChildren(),
                  isClean());
          debugInfo_ = null;
        }
        return debugInfoBuilder_;
      }

      // optional string localizedErrorMessage = 3;
      private java.lang.Object localizedErrorMessage_ = "";
      /**
       * <code>optional string localizedErrorMessage = 3;</code>
       */
      public boolean hasLocalizedErrorMessage() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string localizedErrorMessage = 3;</code>
       */
      public java.lang.String getLocalizedErrorMessage() {
        java.lang.Object ref = localizedErrorMessage_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          localizedErrorMessage_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string localizedErrorMessage = 3;</code>
       */
      public com.google.protobuf.ByteString
          getLocalizedErrorMessageBytes() {
        java.lang.Object ref = localizedErrorMessage_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          localizedErrorMessage_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string localizedErrorMessage = 3;</code>
       */
      public Builder setLocalizedErrorMessage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        localizedErrorMessage_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string localizedErrorMessage = 3;</code>
       */
      public Builder clearLocalizedErrorMessage() {
        bitField0_ = (bitField0_ & ~0x00000004);
        localizedErrorMessage_ = getDefaultInstance().getLocalizedErrorMessage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string localizedErrorMessage = 3;</code>
       */
      public Builder setLocalizedErrorMessageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        localizedErrorMessage_ = value;
        onChanged();
        return this;
      }

      // optional string purchaseId = 4;
      private java.lang.Object purchaseId_ = "";
      /**
       * <code>optional string purchaseId = 4;</code>
       */
      public boolean hasPurchaseId() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string purchaseId = 4;</code>
       */
      public java.lang.String getPurchaseId() {
        java.lang.Object ref = purchaseId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          purchaseId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string purchaseId = 4;</code>
       */
      public com.google.protobuf.ByteString
          getPurchaseIdBytes() {
        java.lang.Object ref = purchaseId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          purchaseId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string purchaseId = 4;</code>
       */
      public Builder setPurchaseId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        purchaseId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string purchaseId = 4;</code>
       */
      public Builder clearPurchaseId() {
        bitField0_ = (bitField0_ & ~0x00000008);
        purchaseId_ = getDefaultInstance().getPurchaseId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string purchaseId = 4;</code>
       */
      public Builder setPurchaseIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        purchaseId_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:PurchaseNotificationResponse)
    }

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

    // @@protoc_insertion_point(class_scope:PurchaseNotificationResponse)
  }

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

    // optional int32 status = 1;
    /**
     * <code>optional int32 status = 1;</code>
     */
    boolean hasStatus();
    /**
     * <code>optional int32 status = 1;</code>
     */
    int getStatus();

    // optional string statusMsg = 2;
    /**
     * <code>optional string statusMsg = 2;</code>
     */
    boolean hasStatusMsg();
    /**
     * <code>optional string statusMsg = 2;</code>
     */
    java.lang.String getStatusMsg();
    /**
     * <code>optional string statusMsg = 2;</code>
     */
    com.google.protobuf.ByteString
        getStatusMsgBytes();

    // optional string statusTitle = 3;
    /**
     * <code>optional string statusTitle = 3;</code>
     */
    boolean hasStatusTitle();
    /**
     * <code>optional string statusTitle = 3;</code>
     */
    java.lang.String getStatusTitle();
    /**
     * <code>optional string statusTitle = 3;</code>
     */
    com.google.protobuf.ByteString
        getStatusTitleBytes();

    // optional string briefMessage = 4;
    /**
     * <code>optional string briefMessage = 4;</code>
     */
    boolean hasBriefMessage();
    /**
     * <code>optional string briefMessage = 4;</code>
     */
    java.lang.String getBriefMessage();
    /**
     * <code>optional string briefMessage = 4;</code>
     */
    com.google.protobuf.ByteString
        getBriefMessageBytes();

    // optional string infoUrl = 5;
    /**
     * <code>optional string infoUrl = 5;</code>
     */
    boolean hasInfoUrl();
    /**
     * <code>optional string infoUrl = 5;</code>
     */
    java.lang.String getInfoUrl();
    /**
     * <code>optional string infoUrl = 5;</code>
     */
    com.google.protobuf.ByteString
        getInfoUrlBytes();

    // optional .LibraryUpdate libraryUpdate = 6;
    /**
     * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
     */
    boolean hasLibraryUpdate();
    /**
     * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate getLibraryUpdate();
    /**
     * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdateOrBuilder getLibraryUpdateOrBuilder();

    // optional .Instrument rejectedInstrument = 7;
    /**
     * <code>optional .Instrument rejectedInstrument = 7;</code>
     */
    boolean hasRejectedInstrument();
    /**
     * <code>optional .Instrument rejectedInstrument = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Instrument getRejectedInstrument();
    /**
     * <code>optional .Instrument rejectedInstrument = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder getRejectedInstrumentOrBuilder();

    // optional .AndroidAppDeliveryData appDeliveryData = 8;
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
     */
    boolean hasAppDeliveryData();
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData getAppDeliveryData();
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder getAppDeliveryDataOrBuilder();
  }
  /**
   * Protobuf type {@code PurchaseStatusResponse}
   */
  public static final class PurchaseStatusResponse extends
      com.google.protobuf.GeneratedMessage
      implements PurchaseStatusResponseOrBuilder {
    // Use PurchaseStatusResponse.newBuilder() to construct.
    private PurchaseStatusResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PurchaseStatusResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public PurchaseStatusResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private PurchaseStatusResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              status_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              statusMsg_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              statusTitle_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              briefMessage_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              infoUrl_ = input.readBytes();
              break;
            }
            case 50: {
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = libraryUpdate_.toBuilder();
              }
              libraryUpdate_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(libraryUpdate_);
                libraryUpdate_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 58: {
              com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = rejectedInstrument_.toBuilder();
              }
              rejectedInstrument_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Instrument.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(rejectedInstrument_);
                rejectedInstrument_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 66: {
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = appDeliveryData_.toBuilder();
              }
              appDeliveryData_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(appDeliveryData_);
                appDeliveryData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseStatusResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseStatusResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 status = 1;
    public static final int STATUS_FIELD_NUMBER = 1;
    private int status_;
    /**
     * <code>optional int32 status = 1;</code>
     */
    public boolean hasStatus() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 status = 1;</code>
     */
    public int getStatus() {
      return status_;
    }

    // optional string statusMsg = 2;
    public static final int STATUSMSG_FIELD_NUMBER = 2;
    private java.lang.Object statusMsg_;
    /**
     * <code>optional string statusMsg = 2;</code>
     */
    public boolean hasStatusMsg() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string statusMsg = 2;</code>
     */
    public java.lang.String getStatusMsg() {
      java.lang.Object ref = statusMsg_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          statusMsg_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string statusMsg = 2;</code>
     */
    public com.google.protobuf.ByteString
        getStatusMsgBytes() {
      java.lang.Object ref = statusMsg_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        statusMsg_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string statusTitle = 3;
    public static final int STATUSTITLE_FIELD_NUMBER = 3;
    private java.lang.Object statusTitle_;
    /**
     * <code>optional string statusTitle = 3;</code>
     */
    public boolean hasStatusTitle() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string statusTitle = 3;</code>
     */
    public java.lang.String getStatusTitle() {
      java.lang.Object ref = statusTitle_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          statusTitle_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string statusTitle = 3;</code>
     */
    public com.google.protobuf.ByteString
        getStatusTitleBytes() {
      java.lang.Object ref = statusTitle_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        statusTitle_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string briefMessage = 4;
    public static final int BRIEFMESSAGE_FIELD_NUMBER = 4;
    private java.lang.Object briefMessage_;
    /**
     * <code>optional string briefMessage = 4;</code>
     */
    public boolean hasBriefMessage() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string briefMessage = 4;</code>
     */
    public java.lang.String getBriefMessage() {
      java.lang.Object ref = briefMessage_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          briefMessage_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string briefMessage = 4;</code>
     */
    public com.google.protobuf.ByteString
        getBriefMessageBytes() {
      java.lang.Object ref = briefMessage_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        briefMessage_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string infoUrl = 5;
    public static final int INFOURL_FIELD_NUMBER = 5;
    private java.lang.Object infoUrl_;
    /**
     * <code>optional string infoUrl = 5;</code>
     */
    public boolean hasInfoUrl() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string infoUrl = 5;</code>
     */
    public java.lang.String getInfoUrl() {
      java.lang.Object ref = infoUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          infoUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string infoUrl = 5;</code>
     */
    public com.google.protobuf.ByteString
        getInfoUrlBytes() {
      java.lang.Object ref = infoUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        infoUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .LibraryUpdate libraryUpdate = 6;
    public static final int LIBRARYUPDATE_FIELD_NUMBER = 6;
    private com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate libraryUpdate_;
    /**
     * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
     */
    public boolean hasLibraryUpdate() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate getLibraryUpdate() {
      return libraryUpdate_;
    }
    /**
     * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdateOrBuilder getLibraryUpdateOrBuilder() {
      return libraryUpdate_;
    }

    // optional .Instrument rejectedInstrument = 7;
    public static final int REJECTEDINSTRUMENT_FIELD_NUMBER = 7;
    private com.akdeniz.googleplaycrawler.GooglePlay.Instrument rejectedInstrument_;
    /**
     * <code>optional .Instrument rejectedInstrument = 7;</code>
     */
    public boolean hasRejectedInstrument() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .Instrument rejectedInstrument = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Instrument getRejectedInstrument() {
      return rejectedInstrument_;
    }
    /**
     * <code>optional .Instrument rejectedInstrument = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder getRejectedInstrumentOrBuilder() {
      return rejectedInstrument_;
    }

    // optional .AndroidAppDeliveryData appDeliveryData = 8;
    public static final int APPDELIVERYDATA_FIELD_NUMBER = 8;
    private com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData appDeliveryData_;
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
     */
    public boolean hasAppDeliveryData() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData getAppDeliveryData() {
      return appDeliveryData_;
    }
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder getAppDeliveryDataOrBuilder() {
      return appDeliveryData_;
    }

    private void initFields() {
      status_ = 0;
      statusMsg_ = "";
      statusTitle_ = "";
      briefMessage_ = "";
      infoUrl_ = "";
      libraryUpdate_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.getDefaultInstance();
      rejectedInstrument_ = com.akdeniz.googleplaycrawler.GooglePlay.Instrument.getDefaultInstance();
      appDeliveryData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, status_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getStatusMsgBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getStatusTitleBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getBriefMessageBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getInfoUrlBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(6, libraryUpdate_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(7, rejectedInstrument_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(8, appDeliveryData_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, status_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getStatusMsgBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getStatusTitleBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getBriefMessageBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getInfoUrlBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, libraryUpdate_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, rejectedInstrument_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, appDeliveryData_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code PurchaseStatusResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseStatusResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseStatusResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        status_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        statusMsg_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        statusTitle_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        briefMessage_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        infoUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        if (libraryUpdateBuilder_ == null) {
          libraryUpdate_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.getDefaultInstance();
        } else {
          libraryUpdateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (rejectedInstrumentBuilder_ == null) {
          rejectedInstrument_ = com.akdeniz.googleplaycrawler.GooglePlay.Instrument.getDefaultInstance();
        } else {
          rejectedInstrumentBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (appDeliveryDataBuilder_ == null) {
          appDeliveryData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance();
        } else {
          appDeliveryDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseStatusResponse_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse build() {
        com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse result = new com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.status_ = status_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.statusMsg_ = statusMsg_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.statusTitle_ = statusTitle_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.briefMessage_ = briefMessage_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.infoUrl_ = infoUrl_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (libraryUpdateBuilder_ == null) {
          result.libraryUpdate_ = libraryUpdate_;
        } else {
          result.libraryUpdate_ = libraryUpdateBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (rejectedInstrumentBuilder_ == null) {
          result.rejectedInstrument_ = rejectedInstrument_;
        } else {
          result.rejectedInstrument_ = rejectedInstrumentBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (appDeliveryDataBuilder_ == null) {
          result.appDeliveryData_ = appDeliveryData_;
        } else {
          result.appDeliveryData_ = appDeliveryDataBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.getDefaultInstance()) return this;
        if (other.hasStatus()) {
          setStatus(other.getStatus());
        }
        if (other.hasStatusMsg()) {
          bitField0_ |= 0x00000002;
          statusMsg_ = other.statusMsg_;
          onChanged();
        }
        if (other.hasStatusTitle()) {
          bitField0_ |= 0x00000004;
          statusTitle_ = other.statusTitle_;
          onChanged();
        }
        if (other.hasBriefMessage()) {
          bitField0_ |= 0x00000008;
          briefMessage_ = other.briefMessage_;
          onChanged();
        }
        if (other.hasInfoUrl()) {
          bitField0_ |= 0x00000010;
          infoUrl_ = other.infoUrl_;
          onChanged();
        }
        if (other.hasLibraryUpdate()) {
          mergeLibraryUpdate(other.getLibraryUpdate());
        }
        if (other.hasRejectedInstrument()) {
          mergeRejectedInstrument(other.getRejectedInstrument());
        }
        if (other.hasAppDeliveryData()) {
          mergeAppDeliveryData(other.getAppDeliveryData());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 status = 1;
      private int status_ ;
      /**
       * <code>optional int32 status = 1;</code>
       */
      public boolean hasStatus() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 status = 1;</code>
       */
      public int getStatus() {
        return status_;
      }
      /**
       * <code>optional int32 status = 1;</code>
       */
      public Builder setStatus(int value) {
        bitField0_ |= 0x00000001;
        status_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 status = 1;</code>
       */
      public Builder clearStatus() {
        bitField0_ = (bitField0_ & ~0x00000001);
        status_ = 0;
        onChanged();
        return this;
      }

      // optional string statusMsg = 2;
      private java.lang.Object statusMsg_ = "";
      /**
       * <code>optional string statusMsg = 2;</code>
       */
      public boolean hasStatusMsg() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string statusMsg = 2;</code>
       */
      public java.lang.String getStatusMsg() {
        java.lang.Object ref = statusMsg_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          statusMsg_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string statusMsg = 2;</code>
       */
      public com.google.protobuf.ByteString
          getStatusMsgBytes() {
        java.lang.Object ref = statusMsg_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          statusMsg_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string statusMsg = 2;</code>
       */
      public Builder setStatusMsg(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        statusMsg_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string statusMsg = 2;</code>
       */
      public Builder clearStatusMsg() {
        bitField0_ = (bitField0_ & ~0x00000002);
        statusMsg_ = getDefaultInstance().getStatusMsg();
        onChanged();
        return this;
      }
      /**
       * <code>optional string statusMsg = 2;</code>
       */
      public Builder setStatusMsgBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        statusMsg_ = value;
        onChanged();
        return this;
      }

      // optional string statusTitle = 3;
      private java.lang.Object statusTitle_ = "";
      /**
       * <code>optional string statusTitle = 3;</code>
       */
      public boolean hasStatusTitle() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string statusTitle = 3;</code>
       */
      public java.lang.String getStatusTitle() {
        java.lang.Object ref = statusTitle_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          statusTitle_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string statusTitle = 3;</code>
       */
      public com.google.protobuf.ByteString
          getStatusTitleBytes() {
        java.lang.Object ref = statusTitle_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          statusTitle_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string statusTitle = 3;</code>
       */
      public Builder setStatusTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        statusTitle_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string statusTitle = 3;</code>
       */
      public Builder clearStatusTitle() {
        bitField0_ = (bitField0_ & ~0x00000004);
        statusTitle_ = getDefaultInstance().getStatusTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string statusTitle = 3;</code>
       */
      public Builder setStatusTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        statusTitle_ = value;
        onChanged();
        return this;
      }

      // optional string briefMessage = 4;
      private java.lang.Object briefMessage_ = "";
      /**
       * <code>optional string briefMessage = 4;</code>
       */
      public boolean hasBriefMessage() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string briefMessage = 4;</code>
       */
      public java.lang.String getBriefMessage() {
        java.lang.Object ref = briefMessage_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          briefMessage_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string briefMessage = 4;</code>
       */
      public com.google.protobuf.ByteString
          getBriefMessageBytes() {
        java.lang.Object ref = briefMessage_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          briefMessage_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string briefMessage = 4;</code>
       */
      public Builder setBriefMessage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        briefMessage_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string briefMessage = 4;</code>
       */
      public Builder clearBriefMessage() {
        bitField0_ = (bitField0_ & ~0x00000008);
        briefMessage_ = getDefaultInstance().getBriefMessage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string briefMessage = 4;</code>
       */
      public Builder setBriefMessageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        briefMessage_ = value;
        onChanged();
        return this;
      }

      // optional string infoUrl = 5;
      private java.lang.Object infoUrl_ = "";
      /**
       * <code>optional string infoUrl = 5;</code>
       */
      public boolean hasInfoUrl() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string infoUrl = 5;</code>
       */
      public java.lang.String getInfoUrl() {
        java.lang.Object ref = infoUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          infoUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string infoUrl = 5;</code>
       */
      public com.google.protobuf.ByteString
          getInfoUrlBytes() {
        java.lang.Object ref = infoUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          infoUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string infoUrl = 5;</code>
       */
      public Builder setInfoUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        infoUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string infoUrl = 5;</code>
       */
      public Builder clearInfoUrl() {
        bitField0_ = (bitField0_ & ~0x00000010);
        infoUrl_ = getDefaultInstance().getInfoUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string infoUrl = 5;</code>
       */
      public Builder setInfoUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        infoUrl_ = value;
        onChanged();
        return this;
      }

      // optional .LibraryUpdate libraryUpdate = 6;
      private com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate libraryUpdate_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate, com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdateOrBuilder> libraryUpdateBuilder_;
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
       */
      public boolean hasLibraryUpdate() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate getLibraryUpdate() {
        if (libraryUpdateBuilder_ == null) {
          return libraryUpdate_;
        } else {
          return libraryUpdateBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
       */
      public Builder setLibraryUpdate(com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate value) {
        if (libraryUpdateBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          libraryUpdate_ = value;
          onChanged();
        } else {
          libraryUpdateBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
       */
      public Builder setLibraryUpdate(
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.Builder builderForValue) {
        if (libraryUpdateBuilder_ == null) {
          libraryUpdate_ = builderForValue.build();
          onChanged();
        } else {
          libraryUpdateBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
       */
      public Builder mergeLibraryUpdate(com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate value) {
        if (libraryUpdateBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              libraryUpdate_ != com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.getDefaultInstance()) {
            libraryUpdate_ =
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.newBuilder(libraryUpdate_).mergeFrom(value).buildPartial();
          } else {
            libraryUpdate_ = value;
          }
          onChanged();
        } else {
          libraryUpdateBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
       */
      public Builder clearLibraryUpdate() {
        if (libraryUpdateBuilder_ == null) {
          libraryUpdate_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.getDefaultInstance();
          onChanged();
        } else {
          libraryUpdateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.Builder getLibraryUpdateBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getLibraryUpdateFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdateOrBuilder getLibraryUpdateOrBuilder() {
        if (libraryUpdateBuilder_ != null) {
          return libraryUpdateBuilder_.getMessageOrBuilder();
        } else {
          return libraryUpdate_;
        }
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate, com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdateOrBuilder> 
          getLibraryUpdateFieldBuilder() {
        if (libraryUpdateBuilder_ == null) {
          libraryUpdateBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate, com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdateOrBuilder>(
                  libraryUpdate_,
                  getParentForChildren(),
                  isClean());
          libraryUpdate_ = null;
        }
        return libraryUpdateBuilder_;
      }

      // optional .Instrument rejectedInstrument = 7;
      private com.akdeniz.googleplaycrawler.GooglePlay.Instrument rejectedInstrument_ = com.akdeniz.googleplaycrawler.GooglePlay.Instrument.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Instrument, com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder> rejectedInstrumentBuilder_;
      /**
       * <code>optional .Instrument rejectedInstrument = 7;</code>
       */
      public boolean hasRejectedInstrument() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .Instrument rejectedInstrument = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Instrument getRejectedInstrument() {
        if (rejectedInstrumentBuilder_ == null) {
          return rejectedInstrument_;
        } else {
          return rejectedInstrumentBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Instrument rejectedInstrument = 7;</code>
       */
      public Builder setRejectedInstrument(com.akdeniz.googleplaycrawler.GooglePlay.Instrument value) {
        if (rejectedInstrumentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          rejectedInstrument_ = value;
          onChanged();
        } else {
          rejectedInstrumentBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .Instrument rejectedInstrument = 7;</code>
       */
      public Builder setRejectedInstrument(
          com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder builderForValue) {
        if (rejectedInstrumentBuilder_ == null) {
          rejectedInstrument_ = builderForValue.build();
          onChanged();
        } else {
          rejectedInstrumentBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .Instrument rejectedInstrument = 7;</code>
       */
      public Builder mergeRejectedInstrument(com.akdeniz.googleplaycrawler.GooglePlay.Instrument value) {
        if (rejectedInstrumentBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              rejectedInstrument_ != com.akdeniz.googleplaycrawler.GooglePlay.Instrument.getDefaultInstance()) {
            rejectedInstrument_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Instrument.newBuilder(rejectedInstrument_).mergeFrom(value).buildPartial();
          } else {
            rejectedInstrument_ = value;
          }
          onChanged();
        } else {
          rejectedInstrumentBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .Instrument rejectedInstrument = 7;</code>
       */
      public Builder clearRejectedInstrument() {
        if (rejectedInstrumentBuilder_ == null) {
          rejectedInstrument_ = com.akdeniz.googleplaycrawler.GooglePlay.Instrument.getDefaultInstance();
          onChanged();
        } else {
          rejectedInstrumentBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .Instrument rejectedInstrument = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder getRejectedInstrumentBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getRejectedInstrumentFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Instrument rejectedInstrument = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder getRejectedInstrumentOrBuilder() {
        if (rejectedInstrumentBuilder_ != null) {
          return rejectedInstrumentBuilder_.getMessageOrBuilder();
        } else {
          return rejectedInstrument_;
        }
      }
      /**
       * <code>optional .Instrument rejectedInstrument = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Instrument, com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder> 
          getRejectedInstrumentFieldBuilder() {
        if (rejectedInstrumentBuilder_ == null) {
          rejectedInstrumentBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Instrument, com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder>(
                  rejectedInstrument_,
                  getParentForChildren(),
                  isClean());
          rejectedInstrument_ = null;
        }
        return rejectedInstrumentBuilder_;
      }

      // optional .AndroidAppDeliveryData appDeliveryData = 8;
      private com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData appDeliveryData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder> appDeliveryDataBuilder_;
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public boolean hasAppDeliveryData() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData getAppDeliveryData() {
        if (appDeliveryDataBuilder_ == null) {
          return appDeliveryData_;
        } else {
          return appDeliveryDataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public Builder setAppDeliveryData(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData value) {
        if (appDeliveryDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          appDeliveryData_ = value;
          onChanged();
        } else {
          appDeliveryDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public Builder setAppDeliveryData(
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder builderForValue) {
        if (appDeliveryDataBuilder_ == null) {
          appDeliveryData_ = builderForValue.build();
          onChanged();
        } else {
          appDeliveryDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public Builder mergeAppDeliveryData(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData value) {
        if (appDeliveryDataBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              appDeliveryData_ != com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance()) {
            appDeliveryData_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.newBuilder(appDeliveryData_).mergeFrom(value).buildPartial();
          } else {
            appDeliveryData_ = value;
          }
          onChanged();
        } else {
          appDeliveryDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public Builder clearAppDeliveryData() {
        if (appDeliveryDataBuilder_ == null) {
          appDeliveryData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance();
          onChanged();
        } else {
          appDeliveryDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder getAppDeliveryDataBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getAppDeliveryDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder getAppDeliveryDataOrBuilder() {
        if (appDeliveryDataBuilder_ != null) {
          return appDeliveryDataBuilder_.getMessageOrBuilder();
        } else {
          return appDeliveryData_;
        }
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder> 
          getAppDeliveryDataFieldBuilder() {
        if (appDeliveryDataBuilder_ == null) {
          appDeliveryDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder>(
                  appDeliveryData_,
                  getParentForChildren(),
                  isClean());
          appDeliveryData_ = null;
        }
        return appDeliveryDataBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:PurchaseStatusResponse)
    }

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

    // @@protoc_insertion_point(class_scope:PurchaseStatusResponse)
  }

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

    // optional string backendDocid = 1;
    /**
     * <code>optional string backendDocid = 1;</code>
     */
    boolean hasBackendDocid();
    /**
     * <code>optional string backendDocid = 1;</code>
     */
    java.lang.String getBackendDocid();
    /**
     * <code>optional string backendDocid = 1;</code>
     */
    com.google.protobuf.ByteString
        getBackendDocidBytes();

    // optional int32 type = 2;
    /**
     * <code>optional int32 type = 2;</code>
     */
    boolean hasType();
    /**
     * <code>optional int32 type = 2;</code>
     */
    int getType();

    // optional int32 backend = 3;
    /**
     * <code>optional int32 backend = 3;</code>
     */
    boolean hasBackend();
    /**
     * <code>optional int32 backend = 3;</code>
     */
    int getBackend();
  }
  /**
   * Protobuf type {@code Docid}
   */
  public static final class Docid extends
      com.google.protobuf.GeneratedMessage
      implements DocidOrBuilder {
    // Use Docid.newBuilder() to construct.
    private Docid(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Docid(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public Docid getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Docid(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              backendDocid_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              type_ = input.readInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              backend_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Docid_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Docid_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Docid.class, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string backendDocid = 1;
    public static final int BACKENDDOCID_FIELD_NUMBER = 1;
    private java.lang.Object backendDocid_;
    /**
     * <code>optional string backendDocid = 1;</code>
     */
    public boolean hasBackendDocid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string backendDocid = 1;</code>
     */
    public java.lang.String getBackendDocid() {
      java.lang.Object ref = backendDocid_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          backendDocid_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string backendDocid = 1;</code>
     */
    public com.google.protobuf.ByteString
        getBackendDocidBytes() {
      java.lang.Object ref = backendDocid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        backendDocid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 type = 2;
    public static final int TYPE_FIELD_NUMBER = 2;
    private int type_;
    /**
     * <code>optional int32 type = 2;</code>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 type = 2;</code>
     */
    public int getType() {
      return type_;
    }

    // optional int32 backend = 3;
    public static final int BACKEND_FIELD_NUMBER = 3;
    private int backend_;
    /**
     * <code>optional int32 backend = 3;</code>
     */
    public boolean hasBackend() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int32 backend = 3;</code>
     */
    public int getBackend() {
      return backend_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getBackendDocidBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, type_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(3, backend_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getBackendDocidBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, type_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, backend_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.Docid parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Docid parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Docid parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Docid parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Docid parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Docid parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Docid parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Docid parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Docid parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Docid parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Docid prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Docid}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Docid_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Docid_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Docid.class, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Docid.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        backendDocid_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        backend_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Docid_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Docid getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Docid build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Docid result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Docid buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Docid result = new com.akdeniz.googleplaycrawler.GooglePlay.Docid(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.backendDocid_ = backendDocid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.backend_ = backend_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Docid) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Docid)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Docid other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance()) return this;
        if (other.hasBackendDocid()) {
          bitField0_ |= 0x00000001;
          backendDocid_ = other.backendDocid_;
          onChanged();
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasBackend()) {
          setBackend(other.getBackend());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string backendDocid = 1;
      private java.lang.Object backendDocid_ = "";
      /**
       * <code>optional string backendDocid = 1;</code>
       */
      public boolean hasBackendDocid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string backendDocid = 1;</code>
       */
      public java.lang.String getBackendDocid() {
        java.lang.Object ref = backendDocid_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          backendDocid_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string backendDocid = 1;</code>
       */
      public com.google.protobuf.ByteString
          getBackendDocidBytes() {
        java.lang.Object ref = backendDocid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          backendDocid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string backendDocid = 1;</code>
       */
      public Builder setBackendDocid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        backendDocid_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string backendDocid = 1;</code>
       */
      public Builder clearBackendDocid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        backendDocid_ = getDefaultInstance().getBackendDocid();
        onChanged();
        return this;
      }
      /**
       * <code>optional string backendDocid = 1;</code>
       */
      public Builder setBackendDocidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        backendDocid_ = value;
        onChanged();
        return this;
      }

      // optional int32 type = 2;
      private int type_ ;
      /**
       * <code>optional int32 type = 2;</code>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 type = 2;</code>
       */
      public int getType() {
        return type_;
      }
      /**
       * <code>optional int32 type = 2;</code>
       */
      public Builder setType(int value) {
        bitField0_ |= 0x00000002;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 type = 2;</code>
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        type_ = 0;
        onChanged();
        return this;
      }

      // optional int32 backend = 3;
      private int backend_ ;
      /**
       * <code>optional int32 backend = 3;</code>
       */
      public boolean hasBackend() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int32 backend = 3;</code>
       */
      public int getBackend() {
        return backend_;
      }
      /**
       * <code>optional int32 backend = 3;</code>
       */
      public Builder setBackend(int value) {
        bitField0_ |= 0x00000004;
        backend_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 backend = 3;</code>
       */
      public Builder clearBackend() {
        bitField0_ = (bitField0_ & ~0x00000004);
        backend_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Docid)
    }

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

    // @@protoc_insertion_point(class_scope:Docid)
  }

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

    // optional fixed64 androidId = 1;
    /**
     * <code>optional fixed64 androidId = 1;</code>
     */
    boolean hasAndroidId();
    /**
     * <code>optional fixed64 androidId = 1;</code>
     */
    long getAndroidId();

    // optional int32 version = 2;
    /**
     * <code>optional int32 version = 2;</code>
     */
    boolean hasVersion();
    /**
     * <code>optional int32 version = 2;</code>
     */
    int getVersion();

    // optional bool bundled = 3;
    /**
     * <code>optional bool bundled = 3;</code>
     */
    boolean hasBundled();
    /**
     * <code>optional bool bundled = 3;</code>
     */
    boolean getBundled();
  }
  /**
   * Protobuf type {@code Install}
   */
  public static final class Install extends
      com.google.protobuf.GeneratedMessage
      implements InstallOrBuilder {
    // Use Install.newBuilder() to construct.
    private Install(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Install(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public Install getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Install(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 9: {
              bitField0_ |= 0x00000001;
              androidId_ = input.readFixed64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              version_ = input.readInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              bundled_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Install_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Install_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Install.class, com.akdeniz.googleplaycrawler.GooglePlay.Install.Builder.class);
    }

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

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

    private int bitField0_;
    // optional fixed64 androidId = 1;
    public static final int ANDROIDID_FIELD_NUMBER = 1;
    private long androidId_;
    /**
     * <code>optional fixed64 androidId = 1;</code>
     */
    public boolean hasAndroidId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional fixed64 androidId = 1;</code>
     */
    public long getAndroidId() {
      return androidId_;
    }

    // optional int32 version = 2;
    public static final int VERSION_FIELD_NUMBER = 2;
    private int version_;
    /**
     * <code>optional int32 version = 2;</code>
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 version = 2;</code>
     */
    public int getVersion() {
      return version_;
    }

    // optional bool bundled = 3;
    public static final int BUNDLED_FIELD_NUMBER = 3;
    private boolean bundled_;
    /**
     * <code>optional bool bundled = 3;</code>
     */
    public boolean hasBundled() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool bundled = 3;</code>
     */
    public boolean getBundled() {
      return bundled_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeFixed64(1, androidId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, version_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, bundled_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed64Size(1, androidId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, version_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, bundled_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.Install parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Install parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Install parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Install parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Install parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Install parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Install parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Install parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Install parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Install parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Install prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Install}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.InstallOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Install_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Install_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Install.class, com.akdeniz.googleplaycrawler.GooglePlay.Install.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Install.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        androidId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        version_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        bundled_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Install_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Install getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Install.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Install build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Install result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Install buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Install result = new com.akdeniz.googleplaycrawler.GooglePlay.Install(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.androidId_ = androidId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.version_ = version_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.bundled_ = bundled_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Install) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Install)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Install other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Install.getDefaultInstance()) return this;
        if (other.hasAndroidId()) {
          setAndroidId(other.getAndroidId());
        }
        if (other.hasVersion()) {
          setVersion(other.getVersion());
        }
        if (other.hasBundled()) {
          setBundled(other.getBundled());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional fixed64 androidId = 1;
      private long androidId_ ;
      /**
       * <code>optional fixed64 androidId = 1;</code>
       */
      public boolean hasAndroidId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional fixed64 androidId = 1;</code>
       */
      public long getAndroidId() {
        return androidId_;
      }
      /**
       * <code>optional fixed64 androidId = 1;</code>
       */
      public Builder setAndroidId(long value) {
        bitField0_ |= 0x00000001;
        androidId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed64 androidId = 1;</code>
       */
      public Builder clearAndroidId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        androidId_ = 0L;
        onChanged();
        return this;
      }

      // optional int32 version = 2;
      private int version_ ;
      /**
       * <code>optional int32 version = 2;</code>
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 version = 2;</code>
       */
      public int getVersion() {
        return version_;
      }
      /**
       * <code>optional int32 version = 2;</code>
       */
      public Builder setVersion(int value) {
        bitField0_ |= 0x00000002;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 version = 2;</code>
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000002);
        version_ = 0;
        onChanged();
        return this;
      }

      // optional bool bundled = 3;
      private boolean bundled_ ;
      /**
       * <code>optional bool bundled = 3;</code>
       */
      public boolean hasBundled() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool bundled = 3;</code>
       */
      public boolean getBundled() {
        return bundled_;
      }
      /**
       * <code>optional bool bundled = 3;</code>
       */
      public Builder setBundled(boolean value) {
        bitField0_ |= 0x00000004;
        bundled_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool bundled = 3;</code>
       */
      public Builder clearBundled() {
        bitField0_ = (bitField0_ & ~0x00000004);
        bundled_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Install)
    }

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

    // @@protoc_insertion_point(class_scope:Install)
  }

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

    // optional int64 micros = 1;
    /**
     * <code>optional int64 micros = 1;</code>
     */
    boolean hasMicros();
    /**
     * <code>optional int64 micros = 1;</code>
     */
    long getMicros();

    // optional string currencyCode = 2;
    /**
     * <code>optional string currencyCode = 2;</code>
     */
    boolean hasCurrencyCode();
    /**
     * <code>optional string currencyCode = 2;</code>
     */
    java.lang.String getCurrencyCode();
    /**
     * <code>optional string currencyCode = 2;</code>
     */
    com.google.protobuf.ByteString
        getCurrencyCodeBytes();

    // optional string formattedAmount = 3;
    /**
     * <code>optional string formattedAmount = 3;</code>
     */
    boolean hasFormattedAmount();
    /**
     * <code>optional string formattedAmount = 3;</code>
     */
    java.lang.String getFormattedAmount();
    /**
     * <code>optional string formattedAmount = 3;</code>
     */
    com.google.protobuf.ByteString
        getFormattedAmountBytes();

    // repeated .Offer convertedPrice = 4;
    /**
     * <code>repeated .Offer convertedPrice = 4;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> 
        getConvertedPriceList();
    /**
     * <code>repeated .Offer convertedPrice = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Offer getConvertedPrice(int index);
    /**
     * <code>repeated .Offer convertedPrice = 4;</code>
     */
    int getConvertedPriceCount();
    /**
     * <code>repeated .Offer convertedPrice = 4;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
        getConvertedPriceOrBuilderList();
    /**
     * <code>repeated .Offer convertedPrice = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getConvertedPriceOrBuilder(
        int index);

    // optional bool checkoutFlowRequired = 5;
    /**
     * <code>optional bool checkoutFlowRequired = 5;</code>
     */
    boolean hasCheckoutFlowRequired();
    /**
     * <code>optional bool checkoutFlowRequired = 5;</code>
     */
    boolean getCheckoutFlowRequired();

    // optional int64 fullPriceMicros = 6;
    /**
     * <code>optional int64 fullPriceMicros = 6;</code>
     */
    boolean hasFullPriceMicros();
    /**
     * <code>optional int64 fullPriceMicros = 6;</code>
     */
    long getFullPriceMicros();

    // optional string formattedFullAmount = 7;
    /**
     * <code>optional string formattedFullAmount = 7;</code>
     */
    boolean hasFormattedFullAmount();
    /**
     * <code>optional string formattedFullAmount = 7;</code>
     */
    java.lang.String getFormattedFullAmount();
    /**
     * <code>optional string formattedFullAmount = 7;</code>
     */
    com.google.protobuf.ByteString
        getFormattedFullAmountBytes();

    // optional int32 offerType = 8;
    /**
     * <code>optional int32 offerType = 8;</code>
     */
    boolean hasOfferType();
    /**
     * <code>optional int32 offerType = 8;</code>
     */
    int getOfferType();

    // optional .RentalTerms rentalTerms = 9;
    /**
     * <code>optional .RentalTerms rentalTerms = 9;</code>
     */
    boolean hasRentalTerms();
    /**
     * <code>optional .RentalTerms rentalTerms = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms getRentalTerms();
    /**
     * <code>optional .RentalTerms rentalTerms = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.RentalTermsOrBuilder getRentalTermsOrBuilder();

    // optional int64 onSaleDate = 10;
    /**
     * <code>optional int64 onSaleDate = 10;</code>
     */
    boolean hasOnSaleDate();
    /**
     * <code>optional int64 onSaleDate = 10;</code>
     */
    long getOnSaleDate();

    // repeated string promotionLabel = 11;
    /**
     * <code>repeated string promotionLabel = 11;</code>
     */
    java.util.List<java.lang.String>
    getPromotionLabelList();
    /**
     * <code>repeated string promotionLabel = 11;</code>
     */
    int getPromotionLabelCount();
    /**
     * <code>repeated string promotionLabel = 11;</code>
     */
    java.lang.String getPromotionLabel(int index);
    /**
     * <code>repeated string promotionLabel = 11;</code>
     */
    com.google.protobuf.ByteString
        getPromotionLabelBytes(int index);

    // optional .SubscriptionTerms subscriptionTerms = 12;
    /**
     * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
     */
    boolean hasSubscriptionTerms();
    /**
     * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms getSubscriptionTerms();
    /**
     * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTermsOrBuilder getSubscriptionTermsOrBuilder();

    // optional string formattedName = 13;
    /**
     * <code>optional string formattedName = 13;</code>
     */
    boolean hasFormattedName();
    /**
     * <code>optional string formattedName = 13;</code>
     */
    java.lang.String getFormattedName();
    /**
     * <code>optional string formattedName = 13;</code>
     */
    com.google.protobuf.ByteString
        getFormattedNameBytes();

    // optional string formattedDescription = 14;
    /**
     * <code>optional string formattedDescription = 14;</code>
     */
    boolean hasFormattedDescription();
    /**
     * <code>optional string formattedDescription = 14;</code>
     */
    java.lang.String getFormattedDescription();
    /**
     * <code>optional string formattedDescription = 14;</code>
     */
    com.google.protobuf.ByteString
        getFormattedDescriptionBytes();
  }
  /**
   * Protobuf type {@code Offer}
   */
  public static final class Offer extends
      com.google.protobuf.GeneratedMessage
      implements OfferOrBuilder {
    // Use Offer.newBuilder() to construct.
    private Offer(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Offer(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public Offer getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Offer(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              micros_ = input.readInt64();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              currencyCode_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              formattedAmount_ = input.readBytes();
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                convertedPrice_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Offer>();
                mutable_bitField0_ |= 0x00000008;
              }
              convertedPrice_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Offer.PARSER, extensionRegistry));
              break;
            }
            case 40: {
              bitField0_ |= 0x00000008;
              checkoutFlowRequired_ = input.readBool();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000010;
              fullPriceMicros_ = input.readInt64();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000020;
              formattedFullAmount_ = input.readBytes();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000040;
              offerType_ = input.readInt32();
              break;
            }
            case 74: {
              com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = rentalTerms_.toBuilder();
              }
              rentalTerms_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(rentalTerms_);
                rentalTerms_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 80: {
              bitField0_ |= 0x00000100;
              onSaleDate_ = input.readInt64();
              break;
            }
            case 90: {
              if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
                promotionLabel_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000400;
              }
              promotionLabel_.add(input.readBytes());
              break;
            }
            case 98: {
              com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.Builder subBuilder = null;
              if (((bitField0_ & 0x00000200) == 0x00000200)) {
                subBuilder = subscriptionTerms_.toBuilder();
              }
              subscriptionTerms_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(subscriptionTerms_);
                subscriptionTerms_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000200;
              break;
            }
            case 106: {
              bitField0_ |= 0x00000400;
              formattedName_ = input.readBytes();
              break;
            }
            case 114: {
              bitField0_ |= 0x00000800;
              formattedDescription_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          convertedPrice_ = java.util.Collections.unmodifiableList(convertedPrice_);
        }
        if (((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
          promotionLabel_ = new com.google.protobuf.UnmodifiableLazyStringList(promotionLabel_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Offer_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Offer_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Offer.class, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int64 micros = 1;
    public static final int MICROS_FIELD_NUMBER = 1;
    private long micros_;
    /**
     * <code>optional int64 micros = 1;</code>
     */
    public boolean hasMicros() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 micros = 1;</code>
     */
    public long getMicros() {
      return micros_;
    }

    // optional string currencyCode = 2;
    public static final int CURRENCYCODE_FIELD_NUMBER = 2;
    private java.lang.Object currencyCode_;
    /**
     * <code>optional string currencyCode = 2;</code>
     */
    public boolean hasCurrencyCode() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string currencyCode = 2;</code>
     */
    public java.lang.String getCurrencyCode() {
      java.lang.Object ref = currencyCode_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          currencyCode_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string currencyCode = 2;</code>
     */
    public com.google.protobuf.ByteString
        getCurrencyCodeBytes() {
      java.lang.Object ref = currencyCode_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        currencyCode_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string formattedAmount = 3;
    public static final int FORMATTEDAMOUNT_FIELD_NUMBER = 3;
    private java.lang.Object formattedAmount_;
    /**
     * <code>optional string formattedAmount = 3;</code>
     */
    public boolean hasFormattedAmount() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string formattedAmount = 3;</code>
     */
    public java.lang.String getFormattedAmount() {
      java.lang.Object ref = formattedAmount_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          formattedAmount_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string formattedAmount = 3;</code>
     */
    public com.google.protobuf.ByteString
        getFormattedAmountBytes() {
      java.lang.Object ref = formattedAmount_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        formattedAmount_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated .Offer convertedPrice = 4;
    public static final int CONVERTEDPRICE_FIELD_NUMBER = 4;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> convertedPrice_;
    /**
     * <code>repeated .Offer convertedPrice = 4;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> getConvertedPriceList() {
      return convertedPrice_;
    }
    /**
     * <code>repeated .Offer convertedPrice = 4;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
        getConvertedPriceOrBuilderList() {
      return convertedPrice_;
    }
    /**
     * <code>repeated .Offer convertedPrice = 4;</code>
     */
    public int getConvertedPriceCount() {
      return convertedPrice_.size();
    }
    /**
     * <code>repeated .Offer convertedPrice = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Offer getConvertedPrice(int index) {
      return convertedPrice_.get(index);
    }
    /**
     * <code>repeated .Offer convertedPrice = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getConvertedPriceOrBuilder(
        int index) {
      return convertedPrice_.get(index);
    }

    // optional bool checkoutFlowRequired = 5;
    public static final int CHECKOUTFLOWREQUIRED_FIELD_NUMBER = 5;
    private boolean checkoutFlowRequired_;
    /**
     * <code>optional bool checkoutFlowRequired = 5;</code>
     */
    public boolean hasCheckoutFlowRequired() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool checkoutFlowRequired = 5;</code>
     */
    public boolean getCheckoutFlowRequired() {
      return checkoutFlowRequired_;
    }

    // optional int64 fullPriceMicros = 6;
    public static final int FULLPRICEMICROS_FIELD_NUMBER = 6;
    private long fullPriceMicros_;
    /**
     * <code>optional int64 fullPriceMicros = 6;</code>
     */
    public boolean hasFullPriceMicros() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int64 fullPriceMicros = 6;</code>
     */
    public long getFullPriceMicros() {
      return fullPriceMicros_;
    }

    // optional string formattedFullAmount = 7;
    public static final int FORMATTEDFULLAMOUNT_FIELD_NUMBER = 7;
    private java.lang.Object formattedFullAmount_;
    /**
     * <code>optional string formattedFullAmount = 7;</code>
     */
    public boolean hasFormattedFullAmount() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string formattedFullAmount = 7;</code>
     */
    public java.lang.String getFormattedFullAmount() {
      java.lang.Object ref = formattedFullAmount_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          formattedFullAmount_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string formattedFullAmount = 7;</code>
     */
    public com.google.protobuf.ByteString
        getFormattedFullAmountBytes() {
      java.lang.Object ref = formattedFullAmount_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        formattedFullAmount_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 offerType = 8;
    public static final int OFFERTYPE_FIELD_NUMBER = 8;
    private int offerType_;
    /**
     * <code>optional int32 offerType = 8;</code>
     */
    public boolean hasOfferType() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional int32 offerType = 8;</code>
     */
    public int getOfferType() {
      return offerType_;
    }

    // optional .RentalTerms rentalTerms = 9;
    public static final int RENTALTERMS_FIELD_NUMBER = 9;
    private com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms rentalTerms_;
    /**
     * <code>optional .RentalTerms rentalTerms = 9;</code>
     */
    public boolean hasRentalTerms() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional .RentalTerms rentalTerms = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms getRentalTerms() {
      return rentalTerms_;
    }
    /**
     * <code>optional .RentalTerms rentalTerms = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.RentalTermsOrBuilder getRentalTermsOrBuilder() {
      return rentalTerms_;
    }

    // optional int64 onSaleDate = 10;
    public static final int ONSALEDATE_FIELD_NUMBER = 10;
    private long onSaleDate_;
    /**
     * <code>optional int64 onSaleDate = 10;</code>
     */
    public boolean hasOnSaleDate() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional int64 onSaleDate = 10;</code>
     */
    public long getOnSaleDate() {
      return onSaleDate_;
    }

    // repeated string promotionLabel = 11;
    public static final int PROMOTIONLABEL_FIELD_NUMBER = 11;
    private com.google.protobuf.LazyStringList promotionLabel_;
    /**
     * <code>repeated string promotionLabel = 11;</code>
     */
    public java.util.List<java.lang.String>
        getPromotionLabelList() {
      return promotionLabel_;
    }
    /**
     * <code>repeated string promotionLabel = 11;</code>
     */
    public int getPromotionLabelCount() {
      return promotionLabel_.size();
    }
    /**
     * <code>repeated string promotionLabel = 11;</code>
     */
    public java.lang.String getPromotionLabel(int index) {
      return promotionLabel_.get(index);
    }
    /**
     * <code>repeated string promotionLabel = 11;</code>
     */
    public com.google.protobuf.ByteString
        getPromotionLabelBytes(int index) {
      return promotionLabel_.getByteString(index);
    }

    // optional .SubscriptionTerms subscriptionTerms = 12;
    public static final int SUBSCRIPTIONTERMS_FIELD_NUMBER = 12;
    private com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms subscriptionTerms_;
    /**
     * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
     */
    public boolean hasSubscriptionTerms() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms getSubscriptionTerms() {
      return subscriptionTerms_;
    }
    /**
     * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTermsOrBuilder getSubscriptionTermsOrBuilder() {
      return subscriptionTerms_;
    }

    // optional string formattedName = 13;
    public static final int FORMATTEDNAME_FIELD_NUMBER = 13;
    private java.lang.Object formattedName_;
    /**
     * <code>optional string formattedName = 13;</code>
     */
    public boolean hasFormattedName() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional string formattedName = 13;</code>
     */
    public java.lang.String getFormattedName() {
      java.lang.Object ref = formattedName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          formattedName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string formattedName = 13;</code>
     */
    public com.google.protobuf.ByteString
        getFormattedNameBytes() {
      java.lang.Object ref = formattedName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        formattedName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string formattedDescription = 14;
    public static final int FORMATTEDDESCRIPTION_FIELD_NUMBER = 14;
    private java.lang.Object formattedDescription_;
    /**
     * <code>optional string formattedDescription = 14;</code>
     */
    public boolean hasFormattedDescription() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional string formattedDescription = 14;</code>
     */
    public java.lang.String getFormattedDescription() {
      java.lang.Object ref = formattedDescription_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          formattedDescription_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string formattedDescription = 14;</code>
     */
    public com.google.protobuf.ByteString
        getFormattedDescriptionBytes() {
      java.lang.Object ref = formattedDescription_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        formattedDescription_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      micros_ = 0L;
      currencyCode_ = "";
      formattedAmount_ = "";
      convertedPrice_ = java.util.Collections.emptyList();
      checkoutFlowRequired_ = false;
      fullPriceMicros_ = 0L;
      formattedFullAmount_ = "";
      offerType_ = 0;
      rentalTerms_ = com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.getDefaultInstance();
      onSaleDate_ = 0L;
      promotionLabel_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      subscriptionTerms_ = com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.getDefaultInstance();
      formattedName_ = "";
      formattedDescription_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, micros_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getCurrencyCodeBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getFormattedAmountBytes());
      }
      for (int i = 0; i < convertedPrice_.size(); i++) {
        output.writeMessage(4, convertedPrice_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(5, checkoutFlowRequired_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(6, fullPriceMicros_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(7, getFormattedFullAmountBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt32(8, offerType_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(9, rentalTerms_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeInt64(10, onSaleDate_);
      }
      for (int i = 0; i < promotionLabel_.size(); i++) {
        output.writeBytes(11, promotionLabel_.getByteString(i));
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeMessage(12, subscriptionTerms_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBytes(13, getFormattedNameBytes());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeBytes(14, getFormattedDescriptionBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, micros_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getCurrencyCodeBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getFormattedAmountBytes());
      }
      for (int i = 0; i < convertedPrice_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, convertedPrice_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, checkoutFlowRequired_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(6, fullPriceMicros_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getFormattedFullAmountBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(8, offerType_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, rentalTerms_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(10, onSaleDate_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < promotionLabel_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(promotionLabel_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getPromotionLabelList().size();
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, subscriptionTerms_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(13, getFormattedNameBytes());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(14, getFormattedDescriptionBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.Offer parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Offer parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Offer parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Offer parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Offer parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Offer parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Offer parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Offer parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Offer parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Offer parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Offer prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Offer}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Offer_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Offer_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Offer.class, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Offer.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        micros_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        currencyCode_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        formattedAmount_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        if (convertedPriceBuilder_ == null) {
          convertedPrice_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          convertedPriceBuilder_.clear();
        }
        checkoutFlowRequired_ = false;
        bitField0_ = (bitField0_ & ~0x00000010);
        fullPriceMicros_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000020);
        formattedFullAmount_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        offerType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        if (rentalTermsBuilder_ == null) {
          rentalTerms_ = com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.getDefaultInstance();
        } else {
          rentalTermsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        onSaleDate_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000200);
        promotionLabel_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000400);
        if (subscriptionTermsBuilder_ == null) {
          subscriptionTerms_ = com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.getDefaultInstance();
        } else {
          subscriptionTermsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        formattedName_ = "";
        bitField0_ = (bitField0_ & ~0x00001000);
        formattedDescription_ = "";
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Offer_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Offer getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Offer build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Offer result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Offer buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Offer result = new com.akdeniz.googleplaycrawler.GooglePlay.Offer(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.micros_ = micros_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.currencyCode_ = currencyCode_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.formattedAmount_ = formattedAmount_;
        if (convertedPriceBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            convertedPrice_ = java.util.Collections.unmodifiableList(convertedPrice_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.convertedPrice_ = convertedPrice_;
        } else {
          result.convertedPrice_ = convertedPriceBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        result.checkoutFlowRequired_ = checkoutFlowRequired_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000010;
        }
        result.fullPriceMicros_ = fullPriceMicros_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000020;
        }
        result.formattedFullAmount_ = formattedFullAmount_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000040;
        }
        result.offerType_ = offerType_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000080;
        }
        if (rentalTermsBuilder_ == null) {
          result.rentalTerms_ = rentalTerms_;
        } else {
          result.rentalTerms_ = rentalTermsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000100;
        }
        result.onSaleDate_ = onSaleDate_;
        if (((bitField0_ & 0x00000400) == 0x00000400)) {
          promotionLabel_ = new com.google.protobuf.UnmodifiableLazyStringList(
              promotionLabel_);
          bitField0_ = (bitField0_ & ~0x00000400);
        }
        result.promotionLabel_ = promotionLabel_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000200;
        }
        if (subscriptionTermsBuilder_ == null) {
          result.subscriptionTerms_ = subscriptionTerms_;
        } else {
          result.subscriptionTerms_ = subscriptionTermsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00000400;
        }
        result.formattedName_ = formattedName_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00000800;
        }
        result.formattedDescription_ = formattedDescription_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Offer) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Offer)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Offer other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance()) return this;
        if (other.hasMicros()) {
          setMicros(other.getMicros());
        }
        if (other.hasCurrencyCode()) {
          bitField0_ |= 0x00000002;
          currencyCode_ = other.currencyCode_;
          onChanged();
        }
        if (other.hasFormattedAmount()) {
          bitField0_ |= 0x00000004;
          formattedAmount_ = other.formattedAmount_;
          onChanged();
        }
        if (convertedPriceBuilder_ == null) {
          if (!other.convertedPrice_.isEmpty()) {
            if (convertedPrice_.isEmpty()) {
              convertedPrice_ = other.convertedPrice_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureConvertedPriceIsMutable();
              convertedPrice_.addAll(other.convertedPrice_);
            }
            onChanged();
          }
        } else {
          if (!other.convertedPrice_.isEmpty()) {
            if (convertedPriceBuilder_.isEmpty()) {
              convertedPriceBuilder_.dispose();
              convertedPriceBuilder_ = null;
              convertedPrice_ = other.convertedPrice_;
              bitField0_ = (bitField0_ & ~0x00000008);
              convertedPriceBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getConvertedPriceFieldBuilder() : null;
            } else {
              convertedPriceBuilder_.addAllMessages(other.convertedPrice_);
            }
          }
        }
        if (other.hasCheckoutFlowRequired()) {
          setCheckoutFlowRequired(other.getCheckoutFlowRequired());
        }
        if (other.hasFullPriceMicros()) {
          setFullPriceMicros(other.getFullPriceMicros());
        }
        if (other.hasFormattedFullAmount()) {
          bitField0_ |= 0x00000040;
          formattedFullAmount_ = other.formattedFullAmount_;
          onChanged();
        }
        if (other.hasOfferType()) {
          setOfferType(other.getOfferType());
        }
        if (other.hasRentalTerms()) {
          mergeRentalTerms(other.getRentalTerms());
        }
        if (other.hasOnSaleDate()) {
          setOnSaleDate(other.getOnSaleDate());
        }
        if (!other.promotionLabel_.isEmpty()) {
          if (promotionLabel_.isEmpty()) {
            promotionLabel_ = other.promotionLabel_;
            bitField0_ = (bitField0_ & ~0x00000400);
          } else {
            ensurePromotionLabelIsMutable();
            promotionLabel_.addAll(other.promotionLabel_);
          }
          onChanged();
        }
        if (other.hasSubscriptionTerms()) {
          mergeSubscriptionTerms(other.getSubscriptionTerms());
        }
        if (other.hasFormattedName()) {
          bitField0_ |= 0x00001000;
          formattedName_ = other.formattedName_;
          onChanged();
        }
        if (other.hasFormattedDescription()) {
          bitField0_ |= 0x00002000;
          formattedDescription_ = other.formattedDescription_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int64 micros = 1;
      private long micros_ ;
      /**
       * <code>optional int64 micros = 1;</code>
       */
      public boolean hasMicros() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 micros = 1;</code>
       */
      public long getMicros() {
        return micros_;
      }
      /**
       * <code>optional int64 micros = 1;</code>
       */
      public Builder setMicros(long value) {
        bitField0_ |= 0x00000001;
        micros_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 micros = 1;</code>
       */
      public Builder clearMicros() {
        bitField0_ = (bitField0_ & ~0x00000001);
        micros_ = 0L;
        onChanged();
        return this;
      }

      // optional string currencyCode = 2;
      private java.lang.Object currencyCode_ = "";
      /**
       * <code>optional string currencyCode = 2;</code>
       */
      public boolean hasCurrencyCode() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string currencyCode = 2;</code>
       */
      public java.lang.String getCurrencyCode() {
        java.lang.Object ref = currencyCode_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          currencyCode_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string currencyCode = 2;</code>
       */
      public com.google.protobuf.ByteString
          getCurrencyCodeBytes() {
        java.lang.Object ref = currencyCode_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          currencyCode_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string currencyCode = 2;</code>
       */
      public Builder setCurrencyCode(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        currencyCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string currencyCode = 2;</code>
       */
      public Builder clearCurrencyCode() {
        bitField0_ = (bitField0_ & ~0x00000002);
        currencyCode_ = getDefaultInstance().getCurrencyCode();
        onChanged();
        return this;
      }
      /**
       * <code>optional string currencyCode = 2;</code>
       */
      public Builder setCurrencyCodeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        currencyCode_ = value;
        onChanged();
        return this;
      }

      // optional string formattedAmount = 3;
      private java.lang.Object formattedAmount_ = "";
      /**
       * <code>optional string formattedAmount = 3;</code>
       */
      public boolean hasFormattedAmount() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string formattedAmount = 3;</code>
       */
      public java.lang.String getFormattedAmount() {
        java.lang.Object ref = formattedAmount_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          formattedAmount_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string formattedAmount = 3;</code>
       */
      public com.google.protobuf.ByteString
          getFormattedAmountBytes() {
        java.lang.Object ref = formattedAmount_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          formattedAmount_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string formattedAmount = 3;</code>
       */
      public Builder setFormattedAmount(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        formattedAmount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string formattedAmount = 3;</code>
       */
      public Builder clearFormattedAmount() {
        bitField0_ = (bitField0_ & ~0x00000004);
        formattedAmount_ = getDefaultInstance().getFormattedAmount();
        onChanged();
        return this;
      }
      /**
       * <code>optional string formattedAmount = 3;</code>
       */
      public Builder setFormattedAmountBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        formattedAmount_ = value;
        onChanged();
        return this;
      }

      // repeated .Offer convertedPrice = 4;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> convertedPrice_ =
        java.util.Collections.emptyList();
      private void ensureConvertedPriceIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          convertedPrice_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Offer>(convertedPrice_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> convertedPriceBuilder_;

      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> getConvertedPriceList() {
        if (convertedPriceBuilder_ == null) {
          return java.util.Collections.unmodifiableList(convertedPrice_);
        } else {
          return convertedPriceBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public int getConvertedPriceCount() {
        if (convertedPriceBuilder_ == null) {
          return convertedPrice_.size();
        } else {
          return convertedPriceBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer getConvertedPrice(int index) {
        if (convertedPriceBuilder_ == null) {
          return convertedPrice_.get(index);
        } else {
          return convertedPriceBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public Builder setConvertedPrice(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (convertedPriceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConvertedPriceIsMutable();
          convertedPrice_.set(index, value);
          onChanged();
        } else {
          convertedPriceBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public Builder setConvertedPrice(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder builderForValue) {
        if (convertedPriceBuilder_ == null) {
          ensureConvertedPriceIsMutable();
          convertedPrice_.set(index, builderForValue.build());
          onChanged();
        } else {
          convertedPriceBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public Builder addConvertedPrice(com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (convertedPriceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConvertedPriceIsMutable();
          convertedPrice_.add(value);
          onChanged();
        } else {
          convertedPriceBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public Builder addConvertedPrice(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (convertedPriceBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureConvertedPriceIsMutable();
          convertedPrice_.add(index, value);
          onChanged();
        } else {
          convertedPriceBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public Builder addConvertedPrice(
          com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder builderForValue) {
        if (convertedPriceBuilder_ == null) {
          ensureConvertedPriceIsMutable();
          convertedPrice_.add(builderForValue.build());
          onChanged();
        } else {
          convertedPriceBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public Builder addConvertedPrice(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder builderForValue) {
        if (convertedPriceBuilder_ == null) {
          ensureConvertedPriceIsMutable();
          convertedPrice_.add(index, builderForValue.build());
          onChanged();
        } else {
          convertedPriceBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public Builder addAllConvertedPrice(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Offer> values) {
        if (convertedPriceBuilder_ == null) {
          ensureConvertedPriceIsMutable();
          super.addAll(values, convertedPrice_);
          onChanged();
        } else {
          convertedPriceBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public Builder clearConvertedPrice() {
        if (convertedPriceBuilder_ == null) {
          convertedPrice_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          convertedPriceBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public Builder removeConvertedPrice(int index) {
        if (convertedPriceBuilder_ == null) {
          ensureConvertedPriceIsMutable();
          convertedPrice_.remove(index);
          onChanged();
        } else {
          convertedPriceBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder getConvertedPriceBuilder(
          int index) {
        return getConvertedPriceFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getConvertedPriceOrBuilder(
          int index) {
        if (convertedPriceBuilder_ == null) {
          return convertedPrice_.get(index);  } else {
          return convertedPriceBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
           getConvertedPriceOrBuilderList() {
        if (convertedPriceBuilder_ != null) {
          return convertedPriceBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(convertedPrice_);
        }
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder addConvertedPriceBuilder() {
        return getConvertedPriceFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance());
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder addConvertedPriceBuilder(
          int index) {
        return getConvertedPriceFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance());
      }
      /**
       * <code>repeated .Offer convertedPrice = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder> 
           getConvertedPriceBuilderList() {
        return getConvertedPriceFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
          getConvertedPriceFieldBuilder() {
        if (convertedPriceBuilder_ == null) {
          convertedPriceBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder>(
                  convertedPrice_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          convertedPrice_ = null;
        }
        return convertedPriceBuilder_;
      }

      // optional bool checkoutFlowRequired = 5;
      private boolean checkoutFlowRequired_ ;
      /**
       * <code>optional bool checkoutFlowRequired = 5;</code>
       */
      public boolean hasCheckoutFlowRequired() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bool checkoutFlowRequired = 5;</code>
       */
      public boolean getCheckoutFlowRequired() {
        return checkoutFlowRequired_;
      }
      /**
       * <code>optional bool checkoutFlowRequired = 5;</code>
       */
      public Builder setCheckoutFlowRequired(boolean value) {
        bitField0_ |= 0x00000010;
        checkoutFlowRequired_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool checkoutFlowRequired = 5;</code>
       */
      public Builder clearCheckoutFlowRequired() {
        bitField0_ = (bitField0_ & ~0x00000010);
        checkoutFlowRequired_ = false;
        onChanged();
        return this;
      }

      // optional int64 fullPriceMicros = 6;
      private long fullPriceMicros_ ;
      /**
       * <code>optional int64 fullPriceMicros = 6;</code>
       */
      public boolean hasFullPriceMicros() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int64 fullPriceMicros = 6;</code>
       */
      public long getFullPriceMicros() {
        return fullPriceMicros_;
      }
      /**
       * <code>optional int64 fullPriceMicros = 6;</code>
       */
      public Builder setFullPriceMicros(long value) {
        bitField0_ |= 0x00000020;
        fullPriceMicros_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 fullPriceMicros = 6;</code>
       */
      public Builder clearFullPriceMicros() {
        bitField0_ = (bitField0_ & ~0x00000020);
        fullPriceMicros_ = 0L;
        onChanged();
        return this;
      }

      // optional string formattedFullAmount = 7;
      private java.lang.Object formattedFullAmount_ = "";
      /**
       * <code>optional string formattedFullAmount = 7;</code>
       */
      public boolean hasFormattedFullAmount() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string formattedFullAmount = 7;</code>
       */
      public java.lang.String getFormattedFullAmount() {
        java.lang.Object ref = formattedFullAmount_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          formattedFullAmount_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string formattedFullAmount = 7;</code>
       */
      public com.google.protobuf.ByteString
          getFormattedFullAmountBytes() {
        java.lang.Object ref = formattedFullAmount_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          formattedFullAmount_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string formattedFullAmount = 7;</code>
       */
      public Builder setFormattedFullAmount(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        formattedFullAmount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string formattedFullAmount = 7;</code>
       */
      public Builder clearFormattedFullAmount() {
        bitField0_ = (bitField0_ & ~0x00000040);
        formattedFullAmount_ = getDefaultInstance().getFormattedFullAmount();
        onChanged();
        return this;
      }
      /**
       * <code>optional string formattedFullAmount = 7;</code>
       */
      public Builder setFormattedFullAmountBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        formattedFullAmount_ = value;
        onChanged();
        return this;
      }

      // optional int32 offerType = 8;
      private int offerType_ ;
      /**
       * <code>optional int32 offerType = 8;</code>
       */
      public boolean hasOfferType() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional int32 offerType = 8;</code>
       */
      public int getOfferType() {
        return offerType_;
      }
      /**
       * <code>optional int32 offerType = 8;</code>
       */
      public Builder setOfferType(int value) {
        bitField0_ |= 0x00000080;
        offerType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 offerType = 8;</code>
       */
      public Builder clearOfferType() {
        bitField0_ = (bitField0_ & ~0x00000080);
        offerType_ = 0;
        onChanged();
        return this;
      }

      // optional .RentalTerms rentalTerms = 9;
      private com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms rentalTerms_ = com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms, com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RentalTermsOrBuilder> rentalTermsBuilder_;
      /**
       * <code>optional .RentalTerms rentalTerms = 9;</code>
       */
      public boolean hasRentalTerms() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional .RentalTerms rentalTerms = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms getRentalTerms() {
        if (rentalTermsBuilder_ == null) {
          return rentalTerms_;
        } else {
          return rentalTermsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .RentalTerms rentalTerms = 9;</code>
       */
      public Builder setRentalTerms(com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms value) {
        if (rentalTermsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          rentalTerms_ = value;
          onChanged();
        } else {
          rentalTermsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .RentalTerms rentalTerms = 9;</code>
       */
      public Builder setRentalTerms(
          com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.Builder builderForValue) {
        if (rentalTermsBuilder_ == null) {
          rentalTerms_ = builderForValue.build();
          onChanged();
        } else {
          rentalTermsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .RentalTerms rentalTerms = 9;</code>
       */
      public Builder mergeRentalTerms(com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms value) {
        if (rentalTermsBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              rentalTerms_ != com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.getDefaultInstance()) {
            rentalTerms_ =
              com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.newBuilder(rentalTerms_).mergeFrom(value).buildPartial();
          } else {
            rentalTerms_ = value;
          }
          onChanged();
        } else {
          rentalTermsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .RentalTerms rentalTerms = 9;</code>
       */
      public Builder clearRentalTerms() {
        if (rentalTermsBuilder_ == null) {
          rentalTerms_ = com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.getDefaultInstance();
          onChanged();
        } else {
          rentalTermsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       * <code>optional .RentalTerms rentalTerms = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.Builder getRentalTermsBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getRentalTermsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .RentalTerms rentalTerms = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RentalTermsOrBuilder getRentalTermsOrBuilder() {
        if (rentalTermsBuilder_ != null) {
          return rentalTermsBuilder_.getMessageOrBuilder();
        } else {
          return rentalTerms_;
        }
      }
      /**
       * <code>optional .RentalTerms rentalTerms = 9;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms, com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RentalTermsOrBuilder> 
          getRentalTermsFieldBuilder() {
        if (rentalTermsBuilder_ == null) {
          rentalTermsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms, com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RentalTermsOrBuilder>(
                  rentalTerms_,
                  getParentForChildren(),
                  isClean());
          rentalTerms_ = null;
        }
        return rentalTermsBuilder_;
      }

      // optional int64 onSaleDate = 10;
      private long onSaleDate_ ;
      /**
       * <code>optional int64 onSaleDate = 10;</code>
       */
      public boolean hasOnSaleDate() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional int64 onSaleDate = 10;</code>
       */
      public long getOnSaleDate() {
        return onSaleDate_;
      }
      /**
       * <code>optional int64 onSaleDate = 10;</code>
       */
      public Builder setOnSaleDate(long value) {
        bitField0_ |= 0x00000200;
        onSaleDate_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 onSaleDate = 10;</code>
       */
      public Builder clearOnSaleDate() {
        bitField0_ = (bitField0_ & ~0x00000200);
        onSaleDate_ = 0L;
        onChanged();
        return this;
      }

      // repeated string promotionLabel = 11;
      private com.google.protobuf.LazyStringList promotionLabel_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensurePromotionLabelIsMutable() {
        if (!((bitField0_ & 0x00000400) == 0x00000400)) {
          promotionLabel_ = new com.google.protobuf.LazyStringArrayList(promotionLabel_);
          bitField0_ |= 0x00000400;
         }
      }
      /**
       * <code>repeated string promotionLabel = 11;</code>
       */
      public java.util.List<java.lang.String>
          getPromotionLabelList() {
        return java.util.Collections.unmodifiableList(promotionLabel_);
      }
      /**
       * <code>repeated string promotionLabel = 11;</code>
       */
      public int getPromotionLabelCount() {
        return promotionLabel_.size();
      }
      /**
       * <code>repeated string promotionLabel = 11;</code>
       */
      public java.lang.String getPromotionLabel(int index) {
        return promotionLabel_.get(index);
      }
      /**
       * <code>repeated string promotionLabel = 11;</code>
       */
      public com.google.protobuf.ByteString
          getPromotionLabelBytes(int index) {
        return promotionLabel_.getByteString(index);
      }
      /**
       * <code>repeated string promotionLabel = 11;</code>
       */
      public Builder setPromotionLabel(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensurePromotionLabelIsMutable();
        promotionLabel_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string promotionLabel = 11;</code>
       */
      public Builder addPromotionLabel(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensurePromotionLabelIsMutable();
        promotionLabel_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string promotionLabel = 11;</code>
       */
      public Builder addAllPromotionLabel(
          java.lang.Iterable<java.lang.String> values) {
        ensurePromotionLabelIsMutable();
        super.addAll(values, promotionLabel_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string promotionLabel = 11;</code>
       */
      public Builder clearPromotionLabel() {
        promotionLabel_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000400);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string promotionLabel = 11;</code>
       */
      public Builder addPromotionLabelBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensurePromotionLabelIsMutable();
        promotionLabel_.add(value);
        onChanged();
        return this;
      }

      // optional .SubscriptionTerms subscriptionTerms = 12;
      private com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms subscriptionTerms_ = com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.Builder, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTermsOrBuilder> subscriptionTermsBuilder_;
      /**
       * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
       */
      public boolean hasSubscriptionTerms() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms getSubscriptionTerms() {
        if (subscriptionTermsBuilder_ == null) {
          return subscriptionTerms_;
        } else {
          return subscriptionTermsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
       */
      public Builder setSubscriptionTerms(com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms value) {
        if (subscriptionTermsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          subscriptionTerms_ = value;
          onChanged();
        } else {
          subscriptionTermsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
       */
      public Builder setSubscriptionTerms(
          com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.Builder builderForValue) {
        if (subscriptionTermsBuilder_ == null) {
          subscriptionTerms_ = builderForValue.build();
          onChanged();
        } else {
          subscriptionTermsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
       */
      public Builder mergeSubscriptionTerms(com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms value) {
        if (subscriptionTermsBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800) &&
              subscriptionTerms_ != com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.getDefaultInstance()) {
            subscriptionTerms_ =
              com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.newBuilder(subscriptionTerms_).mergeFrom(value).buildPartial();
          } else {
            subscriptionTerms_ = value;
          }
          onChanged();
        } else {
          subscriptionTermsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
       */
      public Builder clearSubscriptionTerms() {
        if (subscriptionTermsBuilder_ == null) {
          subscriptionTerms_ = com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.getDefaultInstance();
          onChanged();
        } else {
          subscriptionTermsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }
      /**
       * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.Builder getSubscriptionTermsBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getSubscriptionTermsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTermsOrBuilder getSubscriptionTermsOrBuilder() {
        if (subscriptionTermsBuilder_ != null) {
          return subscriptionTermsBuilder_.getMessageOrBuilder();
        } else {
          return subscriptionTerms_;
        }
      }
      /**
       * <code>optional .SubscriptionTerms subscriptionTerms = 12;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.Builder, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTermsOrBuilder> 
          getSubscriptionTermsFieldBuilder() {
        if (subscriptionTermsBuilder_ == null) {
          subscriptionTermsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.Builder, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTermsOrBuilder>(
                  subscriptionTerms_,
                  getParentForChildren(),
                  isClean());
          subscriptionTerms_ = null;
        }
        return subscriptionTermsBuilder_;
      }

      // optional string formattedName = 13;
      private java.lang.Object formattedName_ = "";
      /**
       * <code>optional string formattedName = 13;</code>
       */
      public boolean hasFormattedName() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional string formattedName = 13;</code>
       */
      public java.lang.String getFormattedName() {
        java.lang.Object ref = formattedName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          formattedName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string formattedName = 13;</code>
       */
      public com.google.protobuf.ByteString
          getFormattedNameBytes() {
        java.lang.Object ref = formattedName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          formattedName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string formattedName = 13;</code>
       */
      public Builder setFormattedName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        formattedName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string formattedName = 13;</code>
       */
      public Builder clearFormattedName() {
        bitField0_ = (bitField0_ & ~0x00001000);
        formattedName_ = getDefaultInstance().getFormattedName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string formattedName = 13;</code>
       */
      public Builder setFormattedNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        formattedName_ = value;
        onChanged();
        return this;
      }

      // optional string formattedDescription = 14;
      private java.lang.Object formattedDescription_ = "";
      /**
       * <code>optional string formattedDescription = 14;</code>
       */
      public boolean hasFormattedDescription() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <code>optional string formattedDescription = 14;</code>
       */
      public java.lang.String getFormattedDescription() {
        java.lang.Object ref = formattedDescription_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          formattedDescription_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string formattedDescription = 14;</code>
       */
      public com.google.protobuf.ByteString
          getFormattedDescriptionBytes() {
        java.lang.Object ref = formattedDescription_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          formattedDescription_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string formattedDescription = 14;</code>
       */
      public Builder setFormattedDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00002000;
        formattedDescription_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string formattedDescription = 14;</code>
       */
      public Builder clearFormattedDescription() {
        bitField0_ = (bitField0_ & ~0x00002000);
        formattedDescription_ = getDefaultInstance().getFormattedDescription();
        onChanged();
        return this;
      }
      /**
       * <code>optional string formattedDescription = 14;</code>
       */
      public Builder setFormattedDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00002000;
        formattedDescription_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Offer)
    }

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

    // @@protoc_insertion_point(class_scope:Offer)
  }

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

    // optional int64 initiationTimestampMsec = 1;
    /**
     * <code>optional int64 initiationTimestampMsec = 1;</code>
     */
    boolean hasInitiationTimestampMsec();
    /**
     * <code>optional int64 initiationTimestampMsec = 1;</code>
     */
    long getInitiationTimestampMsec();

    // optional int64 validUntilTimestampMsec = 2;
    /**
     * <code>optional int64 validUntilTimestampMsec = 2;</code>
     */
    boolean hasValidUntilTimestampMsec();
    /**
     * <code>optional int64 validUntilTimestampMsec = 2;</code>
     */
    long getValidUntilTimestampMsec();

    // optional bool autoRenewing = 3;
    /**
     * <code>optional bool autoRenewing = 3;</code>
     */
    boolean hasAutoRenewing();
    /**
     * <code>optional bool autoRenewing = 3;</code>
     */
    boolean getAutoRenewing();

    // optional int64 refundTimeoutTimestampMsec = 4;
    /**
     * <code>optional int64 refundTimeoutTimestampMsec = 4;</code>
     */
    boolean hasRefundTimeoutTimestampMsec();
    /**
     * <code>optional int64 refundTimeoutTimestampMsec = 4;</code>
     */
    long getRefundTimeoutTimestampMsec();

    // optional int64 postDeliveryRefundWindowMsec = 5;
    /**
     * <code>optional int64 postDeliveryRefundWindowMsec = 5;</code>
     */
    boolean hasPostDeliveryRefundWindowMsec();
    /**
     * <code>optional int64 postDeliveryRefundWindowMsec = 5;</code>
     */
    long getPostDeliveryRefundWindowMsec();
  }
  /**
   * Protobuf type {@code OwnershipInfo}
   */
  public static final class OwnershipInfo extends
      com.google.protobuf.GeneratedMessage
      implements OwnershipInfoOrBuilder {
    // Use OwnershipInfo.newBuilder() to construct.
    private OwnershipInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private OwnershipInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public OwnershipInfo getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private OwnershipInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              initiationTimestampMsec_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              validUntilTimestampMsec_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              autoRenewing_ = input.readBool();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              refundTimeoutTimestampMsec_ = input.readInt64();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              postDeliveryRefundWindowMsec_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_OwnershipInfo_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_OwnershipInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.class, com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int64 initiationTimestampMsec = 1;
    public static final int INITIATIONTIMESTAMPMSEC_FIELD_NUMBER = 1;
    private long initiationTimestampMsec_;
    /**
     * <code>optional int64 initiationTimestampMsec = 1;</code>
     */
    public boolean hasInitiationTimestampMsec() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 initiationTimestampMsec = 1;</code>
     */
    public long getInitiationTimestampMsec() {
      return initiationTimestampMsec_;
    }

    // optional int64 validUntilTimestampMsec = 2;
    public static final int VALIDUNTILTIMESTAMPMSEC_FIELD_NUMBER = 2;
    private long validUntilTimestampMsec_;
    /**
     * <code>optional int64 validUntilTimestampMsec = 2;</code>
     */
    public boolean hasValidUntilTimestampMsec() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 validUntilTimestampMsec = 2;</code>
     */
    public long getValidUntilTimestampMsec() {
      return validUntilTimestampMsec_;
    }

    // optional bool autoRenewing = 3;
    public static final int AUTORENEWING_FIELD_NUMBER = 3;
    private boolean autoRenewing_;
    /**
     * <code>optional bool autoRenewing = 3;</code>
     */
    public boolean hasAutoRenewing() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool autoRenewing = 3;</code>
     */
    public boolean getAutoRenewing() {
      return autoRenewing_;
    }

    // optional int64 refundTimeoutTimestampMsec = 4;
    public static final int REFUNDTIMEOUTTIMESTAMPMSEC_FIELD_NUMBER = 4;
    private long refundTimeoutTimestampMsec_;
    /**
     * <code>optional int64 refundTimeoutTimestampMsec = 4;</code>
     */
    public boolean hasRefundTimeoutTimestampMsec() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 refundTimeoutTimestampMsec = 4;</code>
     */
    public long getRefundTimeoutTimestampMsec() {
      return refundTimeoutTimestampMsec_;
    }

    // optional int64 postDeliveryRefundWindowMsec = 5;
    public static final int POSTDELIVERYREFUNDWINDOWMSEC_FIELD_NUMBER = 5;
    private long postDeliveryRefundWindowMsec_;
    /**
     * <code>optional int64 postDeliveryRefundWindowMsec = 5;</code>
     */
    public boolean hasPostDeliveryRefundWindowMsec() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int64 postDeliveryRefundWindowMsec = 5;</code>
     */
    public long getPostDeliveryRefundWindowMsec() {
      return postDeliveryRefundWindowMsec_;
    }

    private void initFields() {
      initiationTimestampMsec_ = 0L;
      validUntilTimestampMsec_ = 0L;
      autoRenewing_ = false;
      refundTimeoutTimestampMsec_ = 0L;
      postDeliveryRefundWindowMsec_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, initiationTimestampMsec_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, validUntilTimestampMsec_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, autoRenewing_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(4, refundTimeoutTimestampMsec_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(5, postDeliveryRefundWindowMsec_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, initiationTimestampMsec_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, validUntilTimestampMsec_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, autoRenewing_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, refundTimeoutTimestampMsec_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, postDeliveryRefundWindowMsec_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code OwnershipInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_OwnershipInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_OwnershipInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.class, com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        initiationTimestampMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        validUntilTimestampMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        autoRenewing_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        refundTimeoutTimestampMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        postDeliveryRefundWindowMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_OwnershipInfo_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo build() {
        com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo result = new com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.initiationTimestampMsec_ = initiationTimestampMsec_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.validUntilTimestampMsec_ = validUntilTimestampMsec_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.autoRenewing_ = autoRenewing_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.refundTimeoutTimestampMsec_ = refundTimeoutTimestampMsec_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.postDeliveryRefundWindowMsec_ = postDeliveryRefundWindowMsec_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.getDefaultInstance()) return this;
        if (other.hasInitiationTimestampMsec()) {
          setInitiationTimestampMsec(other.getInitiationTimestampMsec());
        }
        if (other.hasValidUntilTimestampMsec()) {
          setValidUntilTimestampMsec(other.getValidUntilTimestampMsec());
        }
        if (other.hasAutoRenewing()) {
          setAutoRenewing(other.getAutoRenewing());
        }
        if (other.hasRefundTimeoutTimestampMsec()) {
          setRefundTimeoutTimestampMsec(other.getRefundTimeoutTimestampMsec());
        }
        if (other.hasPostDeliveryRefundWindowMsec()) {
          setPostDeliveryRefundWindowMsec(other.getPostDeliveryRefundWindowMsec());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int64 initiationTimestampMsec = 1;
      private long initiationTimestampMsec_ ;
      /**
       * <code>optional int64 initiationTimestampMsec = 1;</code>
       */
      public boolean hasInitiationTimestampMsec() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 initiationTimestampMsec = 1;</code>
       */
      public long getInitiationTimestampMsec() {
        return initiationTimestampMsec_;
      }
      /**
       * <code>optional int64 initiationTimestampMsec = 1;</code>
       */
      public Builder setInitiationTimestampMsec(long value) {
        bitField0_ |= 0x00000001;
        initiationTimestampMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 initiationTimestampMsec = 1;</code>
       */
      public Builder clearInitiationTimestampMsec() {
        bitField0_ = (bitField0_ & ~0x00000001);
        initiationTimestampMsec_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 validUntilTimestampMsec = 2;
      private long validUntilTimestampMsec_ ;
      /**
       * <code>optional int64 validUntilTimestampMsec = 2;</code>
       */
      public boolean hasValidUntilTimestampMsec() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 validUntilTimestampMsec = 2;</code>
       */
      public long getValidUntilTimestampMsec() {
        return validUntilTimestampMsec_;
      }
      /**
       * <code>optional int64 validUntilTimestampMsec = 2;</code>
       */
      public Builder setValidUntilTimestampMsec(long value) {
        bitField0_ |= 0x00000002;
        validUntilTimestampMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 validUntilTimestampMsec = 2;</code>
       */
      public Builder clearValidUntilTimestampMsec() {
        bitField0_ = (bitField0_ & ~0x00000002);
        validUntilTimestampMsec_ = 0L;
        onChanged();
        return this;
      }

      // optional bool autoRenewing = 3;
      private boolean autoRenewing_ ;
      /**
       * <code>optional bool autoRenewing = 3;</code>
       */
      public boolean hasAutoRenewing() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool autoRenewing = 3;</code>
       */
      public boolean getAutoRenewing() {
        return autoRenewing_;
      }
      /**
       * <code>optional bool autoRenewing = 3;</code>
       */
      public Builder setAutoRenewing(boolean value) {
        bitField0_ |= 0x00000004;
        autoRenewing_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool autoRenewing = 3;</code>
       */
      public Builder clearAutoRenewing() {
        bitField0_ = (bitField0_ & ~0x00000004);
        autoRenewing_ = false;
        onChanged();
        return this;
      }

      // optional int64 refundTimeoutTimestampMsec = 4;
      private long refundTimeoutTimestampMsec_ ;
      /**
       * <code>optional int64 refundTimeoutTimestampMsec = 4;</code>
       */
      public boolean hasRefundTimeoutTimestampMsec() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 refundTimeoutTimestampMsec = 4;</code>
       */
      public long getRefundTimeoutTimestampMsec() {
        return refundTimeoutTimestampMsec_;
      }
      /**
       * <code>optional int64 refundTimeoutTimestampMsec = 4;</code>
       */
      public Builder setRefundTimeoutTimestampMsec(long value) {
        bitField0_ |= 0x00000008;
        refundTimeoutTimestampMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 refundTimeoutTimestampMsec = 4;</code>
       */
      public Builder clearRefundTimeoutTimestampMsec() {
        bitField0_ = (bitField0_ & ~0x00000008);
        refundTimeoutTimestampMsec_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 postDeliveryRefundWindowMsec = 5;
      private long postDeliveryRefundWindowMsec_ ;
      /**
       * <code>optional int64 postDeliveryRefundWindowMsec = 5;</code>
       */
      public boolean hasPostDeliveryRefundWindowMsec() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int64 postDeliveryRefundWindowMsec = 5;</code>
       */
      public long getPostDeliveryRefundWindowMsec() {
        return postDeliveryRefundWindowMsec_;
      }
      /**
       * <code>optional int64 postDeliveryRefundWindowMsec = 5;</code>
       */
      public Builder setPostDeliveryRefundWindowMsec(long value) {
        bitField0_ |= 0x00000010;
        postDeliveryRefundWindowMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 postDeliveryRefundWindowMsec = 5;</code>
       */
      public Builder clearPostDeliveryRefundWindowMsec() {
        bitField0_ = (bitField0_ & ~0x00000010);
        postDeliveryRefundWindowMsec_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:OwnershipInfo)
    }

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

    // @@protoc_insertion_point(class_scope:OwnershipInfo)
  }

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

    // optional int32 grantPeriodSeconds = 1;
    /**
     * <code>optional int32 grantPeriodSeconds = 1;</code>
     */
    boolean hasGrantPeriodSeconds();
    /**
     * <code>optional int32 grantPeriodSeconds = 1;</code>
     */
    int getGrantPeriodSeconds();

    // optional int32 activatePeriodSeconds = 2;
    /**
     * <code>optional int32 activatePeriodSeconds = 2;</code>
     */
    boolean hasActivatePeriodSeconds();
    /**
     * <code>optional int32 activatePeriodSeconds = 2;</code>
     */
    int getActivatePeriodSeconds();
  }
  /**
   * Protobuf type {@code RentalTerms}
   */
  public static final class RentalTerms extends
      com.google.protobuf.GeneratedMessage
      implements RentalTermsOrBuilder {
    // Use RentalTerms.newBuilder() to construct.
    private RentalTerms(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private RentalTerms(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public RentalTerms getDefaultInstanceForType() {
      return defaultInstance;
    }

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

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_RentalTerms_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.class, com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 grantPeriodSeconds = 1;
    public static final int GRANTPERIODSECONDS_FIELD_NUMBER = 1;
    private int grantPeriodSeconds_;
    /**
     * <code>optional int32 grantPeriodSeconds = 1;</code>
     */
    public boolean hasGrantPeriodSeconds() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 grantPeriodSeconds = 1;</code>
     */
    public int getGrantPeriodSeconds() {
      return grantPeriodSeconds_;
    }

    // optional int32 activatePeriodSeconds = 2;
    public static final int ACTIVATEPERIODSECONDS_FIELD_NUMBER = 2;
    private int activatePeriodSeconds_;
    /**
     * <code>optional int32 activatePeriodSeconds = 2;</code>
     */
    public boolean hasActivatePeriodSeconds() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 activatePeriodSeconds = 2;</code>
     */
    public int getActivatePeriodSeconds() {
      return activatePeriodSeconds_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

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

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

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

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RentalTerms}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.RentalTermsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_RentalTerms_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_RentalTerms_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.class, com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        grantPeriodSeconds_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        activatePeriodSeconds_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_RentalTerms_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms build() {
        com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms result = new com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.grantPeriodSeconds_ = grantPeriodSeconds_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.activatePeriodSeconds_ = activatePeriodSeconds_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.RentalTerms.getDefaultInstance()) return this;
        if (other.hasGrantPeriodSeconds()) {
          setGrantPeriodSeconds(other.getGrantPeriodSeconds());
        }
        if (other.hasActivatePeriodSeconds()) {
          setActivatePeriodSeconds(other.getActivatePeriodSeconds());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 grantPeriodSeconds = 1;
      private int grantPeriodSeconds_ ;
      /**
       * <code>optional int32 grantPeriodSeconds = 1;</code>
       */
      public boolean hasGrantPeriodSeconds() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 grantPeriodSeconds = 1;</code>
       */
      public int getGrantPeriodSeconds() {
        return grantPeriodSeconds_;
      }
      /**
       * <code>optional int32 grantPeriodSeconds = 1;</code>
       */
      public Builder setGrantPeriodSeconds(int value) {
        bitField0_ |= 0x00000001;
        grantPeriodSeconds_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 grantPeriodSeconds = 1;</code>
       */
      public Builder clearGrantPeriodSeconds() {
        bitField0_ = (bitField0_ & ~0x00000001);
        grantPeriodSeconds_ = 0;
        onChanged();
        return this;
      }

      // optional int32 activatePeriodSeconds = 2;
      private int activatePeriodSeconds_ ;
      /**
       * <code>optional int32 activatePeriodSeconds = 2;</code>
       */
      public boolean hasActivatePeriodSeconds() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 activatePeriodSeconds = 2;</code>
       */
      public int getActivatePeriodSeconds() {
        return activatePeriodSeconds_;
      }
      /**
       * <code>optional int32 activatePeriodSeconds = 2;</code>
       */
      public Builder setActivatePeriodSeconds(int value) {
        bitField0_ |= 0x00000002;
        activatePeriodSeconds_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 activatePeriodSeconds = 2;</code>
       */
      public Builder clearActivatePeriodSeconds() {
        bitField0_ = (bitField0_ & ~0x00000002);
        activatePeriodSeconds_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:RentalTerms)
    }

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

    // @@protoc_insertion_point(class_scope:RentalTerms)
  }

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

    // optional .TimePeriod recurringPeriod = 1;
    /**
     * <code>optional .TimePeriod recurringPeriod = 1;</code>
     */
    boolean hasRecurringPeriod();
    /**
     * <code>optional .TimePeriod recurringPeriod = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod getRecurringPeriod();
    /**
     * <code>optional .TimePeriod recurringPeriod = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TimePeriodOrBuilder getRecurringPeriodOrBuilder();

    // optional .TimePeriod trialPeriod = 2;
    /**
     * <code>optional .TimePeriod trialPeriod = 2;</code>
     */
    boolean hasTrialPeriod();
    /**
     * <code>optional .TimePeriod trialPeriod = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod getTrialPeriod();
    /**
     * <code>optional .TimePeriod trialPeriod = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TimePeriodOrBuilder getTrialPeriodOrBuilder();
  }
  /**
   * Protobuf type {@code SubscriptionTerms}
   */
  public static final class SubscriptionTerms extends
      com.google.protobuf.GeneratedMessage
      implements SubscriptionTermsOrBuilder {
    // Use SubscriptionTerms.newBuilder() to construct.
    private SubscriptionTerms(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SubscriptionTerms(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public SubscriptionTerms getDefaultInstanceForType() {
      return defaultInstance;
    }

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

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SubscriptionTerms_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.class, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.Builder.class);
    }

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

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

    private int bitField0_;
    // optional .TimePeriod recurringPeriod = 1;
    public static final int RECURRINGPERIOD_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod recurringPeriod_;
    /**
     * <code>optional .TimePeriod recurringPeriod = 1;</code>
     */
    public boolean hasRecurringPeriod() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .TimePeriod recurringPeriod = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod getRecurringPeriod() {
      return recurringPeriod_;
    }
    /**
     * <code>optional .TimePeriod recurringPeriod = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TimePeriodOrBuilder getRecurringPeriodOrBuilder() {
      return recurringPeriod_;
    }

    // optional .TimePeriod trialPeriod = 2;
    public static final int TRIALPERIOD_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod trialPeriod_;
    /**
     * <code>optional .TimePeriod trialPeriod = 2;</code>
     */
    public boolean hasTrialPeriod() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .TimePeriod trialPeriod = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod getTrialPeriod() {
      return trialPeriod_;
    }
    /**
     * <code>optional .TimePeriod trialPeriod = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TimePeriodOrBuilder getTrialPeriodOrBuilder() {
      return trialPeriod_;
    }

    private void initFields() {
      recurringPeriod_ = com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.getDefaultInstance();
      trialPeriod_ = com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

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

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

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

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code SubscriptionTerms}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTermsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SubscriptionTerms_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SubscriptionTerms_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.class, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        if (recurringPeriodBuilder_ == null) {
          recurringPeriod_ = com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.getDefaultInstance();
        } else {
          recurringPeriodBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (trialPeriodBuilder_ == null) {
          trialPeriod_ = com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.getDefaultInstance();
        } else {
          trialPeriodBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SubscriptionTerms_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms build() {
        com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms result = new com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (recurringPeriodBuilder_ == null) {
          result.recurringPeriod_ = recurringPeriod_;
        } else {
          result.recurringPeriod_ = recurringPeriodBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (trialPeriodBuilder_ == null) {
          result.trialPeriod_ = trialPeriod_;
        } else {
          result.trialPeriod_ = trialPeriodBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionTerms.getDefaultInstance()) return this;
        if (other.hasRecurringPeriod()) {
          mergeRecurringPeriod(other.getRecurringPeriod());
        }
        if (other.hasTrialPeriod()) {
          mergeTrialPeriod(other.getTrialPeriod());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional .TimePeriod recurringPeriod = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod recurringPeriod_ = com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod, com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TimePeriodOrBuilder> recurringPeriodBuilder_;
      /**
       * <code>optional .TimePeriod recurringPeriod = 1;</code>
       */
      public boolean hasRecurringPeriod() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .TimePeriod recurringPeriod = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod getRecurringPeriod() {
        if (recurringPeriodBuilder_ == null) {
          return recurringPeriod_;
        } else {
          return recurringPeriodBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .TimePeriod recurringPeriod = 1;</code>
       */
      public Builder setRecurringPeriod(com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod value) {
        if (recurringPeriodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          recurringPeriod_ = value;
          onChanged();
        } else {
          recurringPeriodBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .TimePeriod recurringPeriod = 1;</code>
       */
      public Builder setRecurringPeriod(
          com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.Builder builderForValue) {
        if (recurringPeriodBuilder_ == null) {
          recurringPeriod_ = builderForValue.build();
          onChanged();
        } else {
          recurringPeriodBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .TimePeriod recurringPeriod = 1;</code>
       */
      public Builder mergeRecurringPeriod(com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod value) {
        if (recurringPeriodBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              recurringPeriod_ != com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.getDefaultInstance()) {
            recurringPeriod_ =
              com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.newBuilder(recurringPeriod_).mergeFrom(value).buildPartial();
          } else {
            recurringPeriod_ = value;
          }
          onChanged();
        } else {
          recurringPeriodBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .TimePeriod recurringPeriod = 1;</code>
       */
      public Builder clearRecurringPeriod() {
        if (recurringPeriodBuilder_ == null) {
          recurringPeriod_ = com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.getDefaultInstance();
          onChanged();
        } else {
          recurringPeriodBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .TimePeriod recurringPeriod = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.Builder getRecurringPeriodBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getRecurringPeriodFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .TimePeriod recurringPeriod = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TimePeriodOrBuilder getRecurringPeriodOrBuilder() {
        if (recurringPeriodBuilder_ != null) {
          return recurringPeriodBuilder_.getMessageOrBuilder();
        } else {
          return recurringPeriod_;
        }
      }
      /**
       * <code>optional .TimePeriod recurringPeriod = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod, com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TimePeriodOrBuilder> 
          getRecurringPeriodFieldBuilder() {
        if (recurringPeriodBuilder_ == null) {
          recurringPeriodBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod, com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TimePeriodOrBuilder>(
                  recurringPeriod_,
                  getParentForChildren(),
                  isClean());
          recurringPeriod_ = null;
        }
        return recurringPeriodBuilder_;
      }

      // optional .TimePeriod trialPeriod = 2;
      private com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod trialPeriod_ = com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod, com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TimePeriodOrBuilder> trialPeriodBuilder_;
      /**
       * <code>optional .TimePeriod trialPeriod = 2;</code>
       */
      public boolean hasTrialPeriod() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .TimePeriod trialPeriod = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod getTrialPeriod() {
        if (trialPeriodBuilder_ == null) {
          return trialPeriod_;
        } else {
          return trialPeriodBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .TimePeriod trialPeriod = 2;</code>
       */
      public Builder setTrialPeriod(com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod value) {
        if (trialPeriodBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          trialPeriod_ = value;
          onChanged();
        } else {
          trialPeriodBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .TimePeriod trialPeriod = 2;</code>
       */
      public Builder setTrialPeriod(
          com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.Builder builderForValue) {
        if (trialPeriodBuilder_ == null) {
          trialPeriod_ = builderForValue.build();
          onChanged();
        } else {
          trialPeriodBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .TimePeriod trialPeriod = 2;</code>
       */
      public Builder mergeTrialPeriod(com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod value) {
        if (trialPeriodBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              trialPeriod_ != com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.getDefaultInstance()) {
            trialPeriod_ =
              com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.newBuilder(trialPeriod_).mergeFrom(value).buildPartial();
          } else {
            trialPeriod_ = value;
          }
          onChanged();
        } else {
          trialPeriodBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .TimePeriod trialPeriod = 2;</code>
       */
      public Builder clearTrialPeriod() {
        if (trialPeriodBuilder_ == null) {
          trialPeriod_ = com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.getDefaultInstance();
          onChanged();
        } else {
          trialPeriodBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .TimePeriod trialPeriod = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.Builder getTrialPeriodBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getTrialPeriodFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .TimePeriod trialPeriod = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TimePeriodOrBuilder getTrialPeriodOrBuilder() {
        if (trialPeriodBuilder_ != null) {
          return trialPeriodBuilder_.getMessageOrBuilder();
        } else {
          return trialPeriod_;
        }
      }
      /**
       * <code>optional .TimePeriod trialPeriod = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod, com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TimePeriodOrBuilder> 
          getTrialPeriodFieldBuilder() {
        if (trialPeriodBuilder_ == null) {
          trialPeriodBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod, com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TimePeriodOrBuilder>(
                  trialPeriod_,
                  getParentForChildren(),
                  isClean());
          trialPeriod_ = null;
        }
        return trialPeriodBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:SubscriptionTerms)
    }

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

    // @@protoc_insertion_point(class_scope:SubscriptionTerms)
  }

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

    // optional int32 unit = 1;
    /**
     * <code>optional int32 unit = 1;</code>
     */
    boolean hasUnit();
    /**
     * <code>optional int32 unit = 1;</code>
     */
    int getUnit();

    // optional int32 count = 2;
    /**
     * <code>optional int32 count = 2;</code>
     */
    boolean hasCount();
    /**
     * <code>optional int32 count = 2;</code>
     */
    int getCount();
  }
  /**
   * Protobuf type {@code TimePeriod}
   */
  public static final class TimePeriod extends
      com.google.protobuf.GeneratedMessage
      implements TimePeriodOrBuilder {
    // Use TimePeriod.newBuilder() to construct.
    private TimePeriod(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TimePeriod(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public TimePeriod getDefaultInstanceForType() {
      return defaultInstance;
    }

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

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TimePeriod_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.class, com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 unit = 1;
    public static final int UNIT_FIELD_NUMBER = 1;
    private int unit_;
    /**
     * <code>optional int32 unit = 1;</code>
     */
    public boolean hasUnit() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 unit = 1;</code>
     */
    public int getUnit() {
      return unit_;
    }

    // optional int32 count = 2;
    public static final int COUNT_FIELD_NUMBER = 2;
    private int count_;
    /**
     * <code>optional int32 count = 2;</code>
     */
    public boolean hasCount() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 count = 2;</code>
     */
    public int getCount() {
      return count_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

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

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

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

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code TimePeriod}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.TimePeriodOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TimePeriod_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TimePeriod_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.class, com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        unit_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        count_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TimePeriod_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod build() {
        com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod result = new com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.unit_ = unit_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.count_ = count_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.TimePeriod.getDefaultInstance()) return this;
        if (other.hasUnit()) {
          setUnit(other.getUnit());
        }
        if (other.hasCount()) {
          setCount(other.getCount());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 unit = 1;
      private int unit_ ;
      /**
       * <code>optional int32 unit = 1;</code>
       */
      public boolean hasUnit() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 unit = 1;</code>
       */
      public int getUnit() {
        return unit_;
      }
      /**
       * <code>optional int32 unit = 1;</code>
       */
      public Builder setUnit(int value) {
        bitField0_ |= 0x00000001;
        unit_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 unit = 1;</code>
       */
      public Builder clearUnit() {
        bitField0_ = (bitField0_ & ~0x00000001);
        unit_ = 0;
        onChanged();
        return this;
      }

      // optional int32 count = 2;
      private int count_ ;
      /**
       * <code>optional int32 count = 2;</code>
       */
      public boolean hasCount() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 count = 2;</code>
       */
      public int getCount() {
        return count_;
      }
      /**
       * <code>optional int32 count = 2;</code>
       */
      public Builder setCount(int value) {
        bitField0_ |= 0x00000002;
        count_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 count = 2;</code>
       */
      public Builder clearCount() {
        bitField0_ = (bitField0_ & ~0x00000002);
        count_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:TimePeriod)
    }

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

    // @@protoc_insertion_point(class_scope:TimePeriod)
  }

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

    // optional int32 billingAddressType = 1;
    /**
     * <code>optional int32 billingAddressType = 1;</code>
     */
    boolean hasBillingAddressType();
    /**
     * <code>optional int32 billingAddressType = 1;</code>
     */
    int getBillingAddressType();

    // repeated int32 requiredField = 2;
    /**
     * <code>repeated int32 requiredField = 2;</code>
     */
    java.util.List<java.lang.Integer> getRequiredFieldList();
    /**
     * <code>repeated int32 requiredField = 2;</code>
     */
    int getRequiredFieldCount();
    /**
     * <code>repeated int32 requiredField = 2;</code>
     */
    int getRequiredField(int index);
  }
  /**
   * Protobuf type {@code BillingAddressSpec}
   */
  public static final class BillingAddressSpec extends
      com.google.protobuf.GeneratedMessage
      implements BillingAddressSpecOrBuilder {
    // Use BillingAddressSpec.newBuilder() to construct.
    private BillingAddressSpec(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private BillingAddressSpec(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public BillingAddressSpec getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private BillingAddressSpec(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              billingAddressType_ = input.readInt32();
              break;
            }
            case 16: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                requiredField_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000002;
              }
              requiredField_.add(input.readInt32());
              break;
            }
            case 18: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002) && input.getBytesUntilLimit() > 0) {
                requiredField_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000002;
              }
              while (input.getBytesUntilLimit() > 0) {
                requiredField_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          requiredField_ = java.util.Collections.unmodifiableList(requiredField_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BillingAddressSpec_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BillingAddressSpec_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.class, com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 billingAddressType = 1;
    public static final int BILLINGADDRESSTYPE_FIELD_NUMBER = 1;
    private int billingAddressType_;
    /**
     * <code>optional int32 billingAddressType = 1;</code>
     */
    public boolean hasBillingAddressType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 billingAddressType = 1;</code>
     */
    public int getBillingAddressType() {
      return billingAddressType_;
    }

    // repeated int32 requiredField = 2;
    public static final int REQUIREDFIELD_FIELD_NUMBER = 2;
    private java.util.List<java.lang.Integer> requiredField_;
    /**
     * <code>repeated int32 requiredField = 2;</code>
     */
    public java.util.List<java.lang.Integer>
        getRequiredFieldList() {
      return requiredField_;
    }
    /**
     * <code>repeated int32 requiredField = 2;</code>
     */
    public int getRequiredFieldCount() {
      return requiredField_.size();
    }
    /**
     * <code>repeated int32 requiredField = 2;</code>
     */
    public int getRequiredField(int index) {
      return requiredField_.get(index);
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

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

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, billingAddressType_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < requiredField_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(requiredField_.get(i));
        }
        size += dataSize;
        size += 1 * getRequiredFieldList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code BillingAddressSpec}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpecOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BillingAddressSpec_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BillingAddressSpec_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.class, com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        billingAddressType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        requiredField_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BillingAddressSpec_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec build() {
        com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec result = new com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.billingAddressType_ = billingAddressType_;
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          requiredField_ = java.util.Collections.unmodifiableList(requiredField_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.requiredField_ = requiredField_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.getDefaultInstance()) return this;
        if (other.hasBillingAddressType()) {
          setBillingAddressType(other.getBillingAddressType());
        }
        if (!other.requiredField_.isEmpty()) {
          if (requiredField_.isEmpty()) {
            requiredField_ = other.requiredField_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureRequiredFieldIsMutable();
            requiredField_.addAll(other.requiredField_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 billingAddressType = 1;
      private int billingAddressType_ ;
      /**
       * <code>optional int32 billingAddressType = 1;</code>
       */
      public boolean hasBillingAddressType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 billingAddressType = 1;</code>
       */
      public int getBillingAddressType() {
        return billingAddressType_;
      }
      /**
       * <code>optional int32 billingAddressType = 1;</code>
       */
      public Builder setBillingAddressType(int value) {
        bitField0_ |= 0x00000001;
        billingAddressType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 billingAddressType = 1;</code>
       */
      public Builder clearBillingAddressType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        billingAddressType_ = 0;
        onChanged();
        return this;
      }

      // repeated int32 requiredField = 2;
      private java.util.List<java.lang.Integer> requiredField_ = java.util.Collections.emptyList();
      private void ensureRequiredFieldIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          requiredField_ = new java.util.ArrayList<java.lang.Integer>(requiredField_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated int32 requiredField = 2;</code>
       */
      public java.util.List<java.lang.Integer>
          getRequiredFieldList() {
        return java.util.Collections.unmodifiableList(requiredField_);
      }
      /**
       * <code>repeated int32 requiredField = 2;</code>
       */
      public int getRequiredFieldCount() {
        return requiredField_.size();
      }
      /**
       * <code>repeated int32 requiredField = 2;</code>
       */
      public int getRequiredField(int index) {
        return requiredField_.get(index);
      }
      /**
       * <code>repeated int32 requiredField = 2;</code>
       */
      public Builder setRequiredField(
          int index, int value) {
        ensureRequiredFieldIsMutable();
        requiredField_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 requiredField = 2;</code>
       */
      public Builder addRequiredField(int value) {
        ensureRequiredFieldIsMutable();
        requiredField_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 requiredField = 2;</code>
       */
      public Builder addAllRequiredField(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureRequiredFieldIsMutable();
        super.addAll(values, requiredField_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 requiredField = 2;</code>
       */
      public Builder clearRequiredField() {
        requiredField_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:BillingAddressSpec)
    }

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

    // @@protoc_insertion_point(class_scope:BillingAddressSpec)
  }

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

    // optional string value = 1;
    /**
     * <code>optional string value = 1;</code>
     */
    boolean hasValue();
    /**
     * <code>optional string value = 1;</code>
     */
    java.lang.String getValue();
    /**
     * <code>optional string value = 1;</code>
     */
    com.google.protobuf.ByteString
        getValueBytes();

    // optional int64 expiration = 2;
    /**
     * <code>optional int64 expiration = 2;</code>
     */
    boolean hasExpiration();
    /**
     * <code>optional int64 expiration = 2;</code>
     */
    long getExpiration();
  }
  /**
   * Protobuf type {@code CarrierBillingCredentials}
   */
  public static final class CarrierBillingCredentials extends
      com.google.protobuf.GeneratedMessage
      implements CarrierBillingCredentialsOrBuilder {
    // Use CarrierBillingCredentials.newBuilder() to construct.
    private CarrierBillingCredentials(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private CarrierBillingCredentials(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public CarrierBillingCredentials getDefaultInstanceForType() {
      return defaultInstance;
    }

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

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierBillingCredentials_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.class, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string value = 1;
    public static final int VALUE_FIELD_NUMBER = 1;
    private java.lang.Object value_;
    /**
     * <code>optional string value = 1;</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string value = 1;</code>
     */
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          value_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string value = 1;</code>
     */
    public com.google.protobuf.ByteString
        getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        value_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 expiration = 2;
    public static final int EXPIRATION_FIELD_NUMBER = 2;
    private long expiration_;
    /**
     * <code>optional int64 expiration = 2;</code>
     */
    public boolean hasExpiration() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 expiration = 2;</code>
     */
    public long getExpiration() {
      return expiration_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

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

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

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

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code CarrierBillingCredentials}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentialsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierBillingCredentials_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierBillingCredentials_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.class, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

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

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierBillingCredentials_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials build() {
        com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials result = new com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.value_ = value_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.expiration_ = expiration_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.getDefaultInstance()) return this;
        if (other.hasValue()) {
          bitField0_ |= 0x00000001;
          value_ = other.value_;
          onChanged();
        }
        if (other.hasExpiration()) {
          setExpiration(other.getExpiration());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string value = 1;
      private java.lang.Object value_ = "";
      /**
       * <code>optional string value = 1;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string value = 1;</code>
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          value_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string value = 1;</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string value = 1;</code>
       */
      public Builder setValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 1;</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000001);
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 1;</code>
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        value_ = value;
        onChanged();
        return this;
      }

      // optional int64 expiration = 2;
      private long expiration_ ;
      /**
       * <code>optional int64 expiration = 2;</code>
       */
      public boolean hasExpiration() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 expiration = 2;</code>
       */
      public long getExpiration() {
        return expiration_;
      }
      /**
       * <code>optional int64 expiration = 2;</code>
       */
      public Builder setExpiration(long value) {
        bitField0_ |= 0x00000002;
        expiration_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 expiration = 2;</code>
       */
      public Builder clearExpiration() {
        bitField0_ = (bitField0_ & ~0x00000002);
        expiration_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:CarrierBillingCredentials)
    }

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

    // @@protoc_insertion_point(class_scope:CarrierBillingCredentials)
  }

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

    // optional string instrumentKey = 1;
    /**
     * <code>optional string instrumentKey = 1;</code>
     */
    boolean hasInstrumentKey();
    /**
     * <code>optional string instrumentKey = 1;</code>
     */
    java.lang.String getInstrumentKey();
    /**
     * <code>optional string instrumentKey = 1;</code>
     */
    com.google.protobuf.ByteString
        getInstrumentKeyBytes();

    // optional string accountType = 2;
    /**
     * <code>optional string accountType = 2;</code>
     */
    boolean hasAccountType();
    /**
     * <code>optional string accountType = 2;</code>
     */
    java.lang.String getAccountType();
    /**
     * <code>optional string accountType = 2;</code>
     */
    com.google.protobuf.ByteString
        getAccountTypeBytes();

    // optional string currencyCode = 3;
    /**
     * <code>optional string currencyCode = 3;</code>
     */
    boolean hasCurrencyCode();
    /**
     * <code>optional string currencyCode = 3;</code>
     */
    java.lang.String getCurrencyCode();
    /**
     * <code>optional string currencyCode = 3;</code>
     */
    com.google.protobuf.ByteString
        getCurrencyCodeBytes();

    // optional int64 transactionLimit = 4;
    /**
     * <code>optional int64 transactionLimit = 4;</code>
     */
    boolean hasTransactionLimit();
    /**
     * <code>optional int64 transactionLimit = 4;</code>
     */
    long getTransactionLimit();

    // optional string subscriberIdentifier = 5;
    /**
     * <code>optional string subscriberIdentifier = 5;</code>
     */
    boolean hasSubscriberIdentifier();
    /**
     * <code>optional string subscriberIdentifier = 5;</code>
     */
    java.lang.String getSubscriberIdentifier();
    /**
     * <code>optional string subscriberIdentifier = 5;</code>
     */
    com.google.protobuf.ByteString
        getSubscriberIdentifierBytes();

    // optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;
    /**
     * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
     */
    boolean hasEncryptedSubscriberInfo();
    /**
     * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo getEncryptedSubscriberInfo();
    /**
     * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfoOrBuilder getEncryptedSubscriberInfoOrBuilder();

    // optional .CarrierBillingCredentials credentials = 7;
    /**
     * <code>optional .CarrierBillingCredentials credentials = 7;</code>
     */
    boolean hasCredentials();
    /**
     * <code>optional .CarrierBillingCredentials credentials = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials getCredentials();
    /**
     * <code>optional .CarrierBillingCredentials credentials = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentialsOrBuilder getCredentialsOrBuilder();

    // optional .CarrierTos acceptedCarrierTos = 8;
    /**
     * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
     */
    boolean hasAcceptedCarrierTos();
    /**
     * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos getAcceptedCarrierTos();
    /**
     * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosOrBuilder getAcceptedCarrierTosOrBuilder();
  }
  /**
   * Protobuf type {@code CarrierBillingInstrument}
   */
  public static final class CarrierBillingInstrument extends
      com.google.protobuf.GeneratedMessage
      implements CarrierBillingInstrumentOrBuilder {
    // Use CarrierBillingInstrument.newBuilder() to construct.
    private CarrierBillingInstrument(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private CarrierBillingInstrument(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public CarrierBillingInstrument getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private CarrierBillingInstrument(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              instrumentKey_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              accountType_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              currencyCode_ = input.readBytes();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              transactionLimit_ = input.readInt64();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              subscriberIdentifier_ = input.readBytes();
              break;
            }
            case 50: {
              com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = encryptedSubscriberInfo_.toBuilder();
              }
              encryptedSubscriberInfo_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(encryptedSubscriberInfo_);
                encryptedSubscriberInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 58: {
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = credentials_.toBuilder();
              }
              credentials_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(credentials_);
                credentials_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 66: {
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = acceptedCarrierTos_.toBuilder();
              }
              acceptedCarrierTos_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(acceptedCarrierTos_);
                acceptedCarrierTos_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierBillingInstrument_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierBillingInstrument_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.class, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string instrumentKey = 1;
    public static final int INSTRUMENTKEY_FIELD_NUMBER = 1;
    private java.lang.Object instrumentKey_;
    /**
     * <code>optional string instrumentKey = 1;</code>
     */
    public boolean hasInstrumentKey() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string instrumentKey = 1;</code>
     */
    public java.lang.String getInstrumentKey() {
      java.lang.Object ref = instrumentKey_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          instrumentKey_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string instrumentKey = 1;</code>
     */
    public com.google.protobuf.ByteString
        getInstrumentKeyBytes() {
      java.lang.Object ref = instrumentKey_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        instrumentKey_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string accountType = 2;
    public static final int ACCOUNTTYPE_FIELD_NUMBER = 2;
    private java.lang.Object accountType_;
    /**
     * <code>optional string accountType = 2;</code>
     */
    public boolean hasAccountType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string accountType = 2;</code>
     */
    public java.lang.String getAccountType() {
      java.lang.Object ref = accountType_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          accountType_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string accountType = 2;</code>
     */
    public com.google.protobuf.ByteString
        getAccountTypeBytes() {
      java.lang.Object ref = accountType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        accountType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string currencyCode = 3;
    public static final int CURRENCYCODE_FIELD_NUMBER = 3;
    private java.lang.Object currencyCode_;
    /**
     * <code>optional string currencyCode = 3;</code>
     */
    public boolean hasCurrencyCode() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string currencyCode = 3;</code>
     */
    public java.lang.String getCurrencyCode() {
      java.lang.Object ref = currencyCode_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          currencyCode_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string currencyCode = 3;</code>
     */
    public com.google.protobuf.ByteString
        getCurrencyCodeBytes() {
      java.lang.Object ref = currencyCode_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        currencyCode_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 transactionLimit = 4;
    public static final int TRANSACTIONLIMIT_FIELD_NUMBER = 4;
    private long transactionLimit_;
    /**
     * <code>optional int64 transactionLimit = 4;</code>
     */
    public boolean hasTransactionLimit() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 transactionLimit = 4;</code>
     */
    public long getTransactionLimit() {
      return transactionLimit_;
    }

    // optional string subscriberIdentifier = 5;
    public static final int SUBSCRIBERIDENTIFIER_FIELD_NUMBER = 5;
    private java.lang.Object subscriberIdentifier_;
    /**
     * <code>optional string subscriberIdentifier = 5;</code>
     */
    public boolean hasSubscriberIdentifier() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string subscriberIdentifier = 5;</code>
     */
    public java.lang.String getSubscriberIdentifier() {
      java.lang.Object ref = subscriberIdentifier_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          subscriberIdentifier_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string subscriberIdentifier = 5;</code>
     */
    public com.google.protobuf.ByteString
        getSubscriberIdentifierBytes() {
      java.lang.Object ref = subscriberIdentifier_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        subscriberIdentifier_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;
    public static final int ENCRYPTEDSUBSCRIBERINFO_FIELD_NUMBER = 6;
    private com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo encryptedSubscriberInfo_;
    /**
     * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
     */
    public boolean hasEncryptedSubscriberInfo() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo getEncryptedSubscriberInfo() {
      return encryptedSubscriberInfo_;
    }
    /**
     * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfoOrBuilder getEncryptedSubscriberInfoOrBuilder() {
      return encryptedSubscriberInfo_;
    }

    // optional .CarrierBillingCredentials credentials = 7;
    public static final int CREDENTIALS_FIELD_NUMBER = 7;
    private com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials credentials_;
    /**
     * <code>optional .CarrierBillingCredentials credentials = 7;</code>
     */
    public boolean hasCredentials() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .CarrierBillingCredentials credentials = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials getCredentials() {
      return credentials_;
    }
    /**
     * <code>optional .CarrierBillingCredentials credentials = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentialsOrBuilder getCredentialsOrBuilder() {
      return credentials_;
    }

    // optional .CarrierTos acceptedCarrierTos = 8;
    public static final int ACCEPTEDCARRIERTOS_FIELD_NUMBER = 8;
    private com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos acceptedCarrierTos_;
    /**
     * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
     */
    public boolean hasAcceptedCarrierTos() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos getAcceptedCarrierTos() {
      return acceptedCarrierTos_;
    }
    /**
     * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosOrBuilder getAcceptedCarrierTosOrBuilder() {
      return acceptedCarrierTos_;
    }

    private void initFields() {
      instrumentKey_ = "";
      accountType_ = "";
      currencyCode_ = "";
      transactionLimit_ = 0L;
      subscriberIdentifier_ = "";
      encryptedSubscriberInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.getDefaultInstance();
      credentials_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.getDefaultInstance();
      acceptedCarrierTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getInstrumentKeyBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getAccountTypeBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getCurrencyCodeBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(4, transactionLimit_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getSubscriberIdentifierBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(6, encryptedSubscriberInfo_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(7, credentials_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(8, acceptedCarrierTos_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getInstrumentKeyBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getAccountTypeBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getCurrencyCodeBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, transactionLimit_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getSubscriberIdentifierBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, encryptedSubscriberInfo_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, credentials_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, acceptedCarrierTos_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code CarrierBillingInstrument}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierBillingInstrument_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierBillingInstrument_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.class, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        instrumentKey_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        accountType_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        currencyCode_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        transactionLimit_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        subscriberIdentifier_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        if (encryptedSubscriberInfoBuilder_ == null) {
          encryptedSubscriberInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.getDefaultInstance();
        } else {
          encryptedSubscriberInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (credentialsBuilder_ == null) {
          credentials_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.getDefaultInstance();
        } else {
          credentialsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (acceptedCarrierTosBuilder_ == null) {
          acceptedCarrierTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.getDefaultInstance();
        } else {
          acceptedCarrierTosBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierBillingInstrument_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument build() {
        com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument result = new com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.instrumentKey_ = instrumentKey_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.accountType_ = accountType_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.currencyCode_ = currencyCode_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.transactionLimit_ = transactionLimit_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.subscriberIdentifier_ = subscriberIdentifier_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (encryptedSubscriberInfoBuilder_ == null) {
          result.encryptedSubscriberInfo_ = encryptedSubscriberInfo_;
        } else {
          result.encryptedSubscriberInfo_ = encryptedSubscriberInfoBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (credentialsBuilder_ == null) {
          result.credentials_ = credentials_;
        } else {
          result.credentials_ = credentialsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (acceptedCarrierTosBuilder_ == null) {
          result.acceptedCarrierTos_ = acceptedCarrierTos_;
        } else {
          result.acceptedCarrierTos_ = acceptedCarrierTosBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.getDefaultInstance()) return this;
        if (other.hasInstrumentKey()) {
          bitField0_ |= 0x00000001;
          instrumentKey_ = other.instrumentKey_;
          onChanged();
        }
        if (other.hasAccountType()) {
          bitField0_ |= 0x00000002;
          accountType_ = other.accountType_;
          onChanged();
        }
        if (other.hasCurrencyCode()) {
          bitField0_ |= 0x00000004;
          currencyCode_ = other.currencyCode_;
          onChanged();
        }
        if (other.hasTransactionLimit()) {
          setTransactionLimit(other.getTransactionLimit());
        }
        if (other.hasSubscriberIdentifier()) {
          bitField0_ |= 0x00000010;
          subscriberIdentifier_ = other.subscriberIdentifier_;
          onChanged();
        }
        if (other.hasEncryptedSubscriberInfo()) {
          mergeEncryptedSubscriberInfo(other.getEncryptedSubscriberInfo());
        }
        if (other.hasCredentials()) {
          mergeCredentials(other.getCredentials());
        }
        if (other.hasAcceptedCarrierTos()) {
          mergeAcceptedCarrierTos(other.getAcceptedCarrierTos());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string instrumentKey = 1;
      private java.lang.Object instrumentKey_ = "";
      /**
       * <code>optional string instrumentKey = 1;</code>
       */
      public boolean hasInstrumentKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string instrumentKey = 1;</code>
       */
      public java.lang.String getInstrumentKey() {
        java.lang.Object ref = instrumentKey_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          instrumentKey_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string instrumentKey = 1;</code>
       */
      public com.google.protobuf.ByteString
          getInstrumentKeyBytes() {
        java.lang.Object ref = instrumentKey_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          instrumentKey_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string instrumentKey = 1;</code>
       */
      public Builder setInstrumentKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        instrumentKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string instrumentKey = 1;</code>
       */
      public Builder clearInstrumentKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        instrumentKey_ = getDefaultInstance().getInstrumentKey();
        onChanged();
        return this;
      }
      /**
       * <code>optional string instrumentKey = 1;</code>
       */
      public Builder setInstrumentKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        instrumentKey_ = value;
        onChanged();
        return this;
      }

      // optional string accountType = 2;
      private java.lang.Object accountType_ = "";
      /**
       * <code>optional string accountType = 2;</code>
       */
      public boolean hasAccountType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string accountType = 2;</code>
       */
      public java.lang.String getAccountType() {
        java.lang.Object ref = accountType_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          accountType_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string accountType = 2;</code>
       */
      public com.google.protobuf.ByteString
          getAccountTypeBytes() {
        java.lang.Object ref = accountType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          accountType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string accountType = 2;</code>
       */
      public Builder setAccountType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        accountType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string accountType = 2;</code>
       */
      public Builder clearAccountType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        accountType_ = getDefaultInstance().getAccountType();
        onChanged();
        return this;
      }
      /**
       * <code>optional string accountType = 2;</code>
       */
      public Builder setAccountTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        accountType_ = value;
        onChanged();
        return this;
      }

      // optional string currencyCode = 3;
      private java.lang.Object currencyCode_ = "";
      /**
       * <code>optional string currencyCode = 3;</code>
       */
      public boolean hasCurrencyCode() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string currencyCode = 3;</code>
       */
      public java.lang.String getCurrencyCode() {
        java.lang.Object ref = currencyCode_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          currencyCode_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string currencyCode = 3;</code>
       */
      public com.google.protobuf.ByteString
          getCurrencyCodeBytes() {
        java.lang.Object ref = currencyCode_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          currencyCode_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string currencyCode = 3;</code>
       */
      public Builder setCurrencyCode(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        currencyCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string currencyCode = 3;</code>
       */
      public Builder clearCurrencyCode() {
        bitField0_ = (bitField0_ & ~0x00000004);
        currencyCode_ = getDefaultInstance().getCurrencyCode();
        onChanged();
        return this;
      }
      /**
       * <code>optional string currencyCode = 3;</code>
       */
      public Builder setCurrencyCodeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        currencyCode_ = value;
        onChanged();
        return this;
      }

      // optional int64 transactionLimit = 4;
      private long transactionLimit_ ;
      /**
       * <code>optional int64 transactionLimit = 4;</code>
       */
      public boolean hasTransactionLimit() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 transactionLimit = 4;</code>
       */
      public long getTransactionLimit() {
        return transactionLimit_;
      }
      /**
       * <code>optional int64 transactionLimit = 4;</code>
       */
      public Builder setTransactionLimit(long value) {
        bitField0_ |= 0x00000008;
        transactionLimit_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 transactionLimit = 4;</code>
       */
      public Builder clearTransactionLimit() {
        bitField0_ = (bitField0_ & ~0x00000008);
        transactionLimit_ = 0L;
        onChanged();
        return this;
      }

      // optional string subscriberIdentifier = 5;
      private java.lang.Object subscriberIdentifier_ = "";
      /**
       * <code>optional string subscriberIdentifier = 5;</code>
       */
      public boolean hasSubscriberIdentifier() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string subscriberIdentifier = 5;</code>
       */
      public java.lang.String getSubscriberIdentifier() {
        java.lang.Object ref = subscriberIdentifier_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          subscriberIdentifier_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string subscriberIdentifier = 5;</code>
       */
      public com.google.protobuf.ByteString
          getSubscriberIdentifierBytes() {
        java.lang.Object ref = subscriberIdentifier_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          subscriberIdentifier_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string subscriberIdentifier = 5;</code>
       */
      public Builder setSubscriberIdentifier(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        subscriberIdentifier_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string subscriberIdentifier = 5;</code>
       */
      public Builder clearSubscriberIdentifier() {
        bitField0_ = (bitField0_ & ~0x00000010);
        subscriberIdentifier_ = getDefaultInstance().getSubscriberIdentifier();
        onChanged();
        return this;
      }
      /**
       * <code>optional string subscriberIdentifier = 5;</code>
       */
      public Builder setSubscriberIdentifierBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        subscriberIdentifier_ = value;
        onChanged();
        return this;
      }

      // optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;
      private com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo encryptedSubscriberInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo, com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfoOrBuilder> encryptedSubscriberInfoBuilder_;
      /**
       * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
       */
      public boolean hasEncryptedSubscriberInfo() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo getEncryptedSubscriberInfo() {
        if (encryptedSubscriberInfoBuilder_ == null) {
          return encryptedSubscriberInfo_;
        } else {
          return encryptedSubscriberInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
       */
      public Builder setEncryptedSubscriberInfo(com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo value) {
        if (encryptedSubscriberInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          encryptedSubscriberInfo_ = value;
          onChanged();
        } else {
          encryptedSubscriberInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
       */
      public Builder setEncryptedSubscriberInfo(
          com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.Builder builderForValue) {
        if (encryptedSubscriberInfoBuilder_ == null) {
          encryptedSubscriberInfo_ = builderForValue.build();
          onChanged();
        } else {
          encryptedSubscriberInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
       */
      public Builder mergeEncryptedSubscriberInfo(com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo value) {
        if (encryptedSubscriberInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              encryptedSubscriberInfo_ != com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.getDefaultInstance()) {
            encryptedSubscriberInfo_ =
              com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.newBuilder(encryptedSubscriberInfo_).mergeFrom(value).buildPartial();
          } else {
            encryptedSubscriberInfo_ = value;
          }
          onChanged();
        } else {
          encryptedSubscriberInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
       */
      public Builder clearEncryptedSubscriberInfo() {
        if (encryptedSubscriberInfoBuilder_ == null) {
          encryptedSubscriberInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.getDefaultInstance();
          onChanged();
        } else {
          encryptedSubscriberInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.Builder getEncryptedSubscriberInfoBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getEncryptedSubscriberInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfoOrBuilder getEncryptedSubscriberInfoOrBuilder() {
        if (encryptedSubscriberInfoBuilder_ != null) {
          return encryptedSubscriberInfoBuilder_.getMessageOrBuilder();
        } else {
          return encryptedSubscriberInfo_;
        }
      }
      /**
       * <code>optional .EncryptedSubscriberInfo encryptedSubscriberInfo = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo, com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfoOrBuilder> 
          getEncryptedSubscriberInfoFieldBuilder() {
        if (encryptedSubscriberInfoBuilder_ == null) {
          encryptedSubscriberInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo, com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfoOrBuilder>(
                  encryptedSubscriberInfo_,
                  getParentForChildren(),
                  isClean());
          encryptedSubscriberInfo_ = null;
        }
        return encryptedSubscriberInfoBuilder_;
      }

      // optional .CarrierBillingCredentials credentials = 7;
      private com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials credentials_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentialsOrBuilder> credentialsBuilder_;
      /**
       * <code>optional .CarrierBillingCredentials credentials = 7;</code>
       */
      public boolean hasCredentials() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .CarrierBillingCredentials credentials = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials getCredentials() {
        if (credentialsBuilder_ == null) {
          return credentials_;
        } else {
          return credentialsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .CarrierBillingCredentials credentials = 7;</code>
       */
      public Builder setCredentials(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials value) {
        if (credentialsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          credentials_ = value;
          onChanged();
        } else {
          credentialsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .CarrierBillingCredentials credentials = 7;</code>
       */
      public Builder setCredentials(
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.Builder builderForValue) {
        if (credentialsBuilder_ == null) {
          credentials_ = builderForValue.build();
          onChanged();
        } else {
          credentialsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .CarrierBillingCredentials credentials = 7;</code>
       */
      public Builder mergeCredentials(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials value) {
        if (credentialsBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              credentials_ != com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.getDefaultInstance()) {
            credentials_ =
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.newBuilder(credentials_).mergeFrom(value).buildPartial();
          } else {
            credentials_ = value;
          }
          onChanged();
        } else {
          credentialsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .CarrierBillingCredentials credentials = 7;</code>
       */
      public Builder clearCredentials() {
        if (credentialsBuilder_ == null) {
          credentials_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.getDefaultInstance();
          onChanged();
        } else {
          credentialsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .CarrierBillingCredentials credentials = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.Builder getCredentialsBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getCredentialsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .CarrierBillingCredentials credentials = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentialsOrBuilder getCredentialsOrBuilder() {
        if (credentialsBuilder_ != null) {
          return credentialsBuilder_.getMessageOrBuilder();
        } else {
          return credentials_;
        }
      }
      /**
       * <code>optional .CarrierBillingCredentials credentials = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentialsOrBuilder> 
          getCredentialsFieldBuilder() {
        if (credentialsBuilder_ == null) {
          credentialsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentials.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingCredentialsOrBuilder>(
                  credentials_,
                  getParentForChildren(),
                  isClean());
          credentials_ = null;
        }
        return credentialsBuilder_;
      }

      // optional .CarrierTos acceptedCarrierTos = 8;
      private com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos acceptedCarrierTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosOrBuilder> acceptedCarrierTosBuilder_;
      /**
       * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
       */
      public boolean hasAcceptedCarrierTos() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos getAcceptedCarrierTos() {
        if (acceptedCarrierTosBuilder_ == null) {
          return acceptedCarrierTos_;
        } else {
          return acceptedCarrierTosBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
       */
      public Builder setAcceptedCarrierTos(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos value) {
        if (acceptedCarrierTosBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          acceptedCarrierTos_ = value;
          onChanged();
        } else {
          acceptedCarrierTosBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
       */
      public Builder setAcceptedCarrierTos(
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.Builder builderForValue) {
        if (acceptedCarrierTosBuilder_ == null) {
          acceptedCarrierTos_ = builderForValue.build();
          onChanged();
        } else {
          acceptedCarrierTosBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
       */
      public Builder mergeAcceptedCarrierTos(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos value) {
        if (acceptedCarrierTosBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              acceptedCarrierTos_ != com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.getDefaultInstance()) {
            acceptedCarrierTos_ =
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.newBuilder(acceptedCarrierTos_).mergeFrom(value).buildPartial();
          } else {
            acceptedCarrierTos_ = value;
          }
          onChanged();
        } else {
          acceptedCarrierTosBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
       */
      public Builder clearAcceptedCarrierTos() {
        if (acceptedCarrierTosBuilder_ == null) {
          acceptedCarrierTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.getDefaultInstance();
          onChanged();
        } else {
          acceptedCarrierTosBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.Builder getAcceptedCarrierTosBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getAcceptedCarrierTosFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosOrBuilder getAcceptedCarrierTosOrBuilder() {
        if (acceptedCarrierTosBuilder_ != null) {
          return acceptedCarrierTosBuilder_.getMessageOrBuilder();
        } else {
          return acceptedCarrierTos_;
        }
      }
      /**
       * <code>optional .CarrierTos acceptedCarrierTos = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosOrBuilder> 
          getAcceptedCarrierTosFieldBuilder() {
        if (acceptedCarrierTosBuilder_ == null) {
          acceptedCarrierTosBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosOrBuilder>(
                  acceptedCarrierTos_,
                  getParentForChildren(),
                  isClean());
          acceptedCarrierTos_ = null;
        }
        return acceptedCarrierTosBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:CarrierBillingInstrument)
    }

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

    // @@protoc_insertion_point(class_scope:CarrierBillingInstrument)
  }

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

    // optional .CarrierTos carrierTos = 1;
    /**
     * <code>optional .CarrierTos carrierTos = 1;</code>
     */
    boolean hasCarrierTos();
    /**
     * <code>optional .CarrierTos carrierTos = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos getCarrierTos();
    /**
     * <code>optional .CarrierTos carrierTos = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosOrBuilder getCarrierTosOrBuilder();

    // optional bool associationRequired = 2;
    /**
     * <code>optional bool associationRequired = 2;</code>
     */
    boolean hasAssociationRequired();
    /**
     * <code>optional bool associationRequired = 2;</code>
     */
    boolean getAssociationRequired();

    // optional bool passwordRequired = 3;
    /**
     * <code>optional bool passwordRequired = 3;</code>
     */
    boolean hasPasswordRequired();
    /**
     * <code>optional bool passwordRequired = 3;</code>
     */
    boolean getPasswordRequired();

    // optional .PasswordPrompt carrierPasswordPrompt = 4;
    /**
     * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
     */
    boolean hasCarrierPasswordPrompt();
    /**
     * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt getCarrierPasswordPrompt();
    /**
     * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PasswordPromptOrBuilder getCarrierPasswordPromptOrBuilder();

    // optional int32 apiVersion = 5;
    /**
     * <code>optional int32 apiVersion = 5;</code>
     */
    boolean hasApiVersion();
    /**
     * <code>optional int32 apiVersion = 5;</code>
     */
    int getApiVersion();

    // optional string name = 6;
    /**
     * <code>optional string name = 6;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 6;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 6;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();
  }
  /**
   * Protobuf type {@code CarrierBillingInstrumentStatus}
   */
  public static final class CarrierBillingInstrumentStatus extends
      com.google.protobuf.GeneratedMessage
      implements CarrierBillingInstrumentStatusOrBuilder {
    // Use CarrierBillingInstrumentStatus.newBuilder() to construct.
    private CarrierBillingInstrumentStatus(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private CarrierBillingInstrumentStatus(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public CarrierBillingInstrumentStatus getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private CarrierBillingInstrumentStatus(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = carrierTos_.toBuilder();
              }
              carrierTos_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(carrierTos_);
                carrierTos_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              associationRequired_ = input.readBool();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              passwordRequired_ = input.readBool();
              break;
            }
            case 34: {
              com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = carrierPasswordPrompt_.toBuilder();
              }
              carrierPasswordPrompt_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(carrierPasswordPrompt_);
                carrierPasswordPrompt_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              apiVersion_ = input.readInt32();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000020;
              name_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierBillingInstrumentStatus_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierBillingInstrumentStatus_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.class, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.Builder.class);
    }

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

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

    private int bitField0_;
    // optional .CarrierTos carrierTos = 1;
    public static final int CARRIERTOS_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos carrierTos_;
    /**
     * <code>optional .CarrierTos carrierTos = 1;</code>
     */
    public boolean hasCarrierTos() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .CarrierTos carrierTos = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos getCarrierTos() {
      return carrierTos_;
    }
    /**
     * <code>optional .CarrierTos carrierTos = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosOrBuilder getCarrierTosOrBuilder() {
      return carrierTos_;
    }

    // optional bool associationRequired = 2;
    public static final int ASSOCIATIONREQUIRED_FIELD_NUMBER = 2;
    private boolean associationRequired_;
    /**
     * <code>optional bool associationRequired = 2;</code>
     */
    public boolean hasAssociationRequired() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bool associationRequired = 2;</code>
     */
    public boolean getAssociationRequired() {
      return associationRequired_;
    }

    // optional bool passwordRequired = 3;
    public static final int PASSWORDREQUIRED_FIELD_NUMBER = 3;
    private boolean passwordRequired_;
    /**
     * <code>optional bool passwordRequired = 3;</code>
     */
    public boolean hasPasswordRequired() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool passwordRequired = 3;</code>
     */
    public boolean getPasswordRequired() {
      return passwordRequired_;
    }

    // optional .PasswordPrompt carrierPasswordPrompt = 4;
    public static final int CARRIERPASSWORDPROMPT_FIELD_NUMBER = 4;
    private com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt carrierPasswordPrompt_;
    /**
     * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
     */
    public boolean hasCarrierPasswordPrompt() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt getCarrierPasswordPrompt() {
      return carrierPasswordPrompt_;
    }
    /**
     * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PasswordPromptOrBuilder getCarrierPasswordPromptOrBuilder() {
      return carrierPasswordPrompt_;
    }

    // optional int32 apiVersion = 5;
    public static final int APIVERSION_FIELD_NUMBER = 5;
    private int apiVersion_;
    /**
     * <code>optional int32 apiVersion = 5;</code>
     */
    public boolean hasApiVersion() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int32 apiVersion = 5;</code>
     */
    public int getApiVersion() {
      return apiVersion_;
    }

    // optional string name = 6;
    public static final int NAME_FIELD_NUMBER = 6;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 6;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string name = 6;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 6;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      carrierTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.getDefaultInstance();
      associationRequired_ = false;
      passwordRequired_ = false;
      carrierPasswordPrompt_ = com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.getDefaultInstance();
      apiVersion_ = 0;
      name_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, carrierTos_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, associationRequired_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, passwordRequired_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, carrierPasswordPrompt_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt32(5, apiVersion_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(6, getNameBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, carrierTos_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, associationRequired_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, passwordRequired_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, carrierPasswordPrompt_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, apiVersion_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getNameBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code CarrierBillingInstrumentStatus}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatusOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierBillingInstrumentStatus_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierBillingInstrumentStatus_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.class, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        if (carrierTosBuilder_ == null) {
          carrierTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.getDefaultInstance();
        } else {
          carrierTosBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        associationRequired_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        passwordRequired_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        if (carrierPasswordPromptBuilder_ == null) {
          carrierPasswordPrompt_ = com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.getDefaultInstance();
        } else {
          carrierPasswordPromptBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        apiVersion_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierBillingInstrumentStatus_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus build() {
        com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus result = new com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (carrierTosBuilder_ == null) {
          result.carrierTos_ = carrierTos_;
        } else {
          result.carrierTos_ = carrierTosBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.associationRequired_ = associationRequired_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.passwordRequired_ = passwordRequired_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (carrierPasswordPromptBuilder_ == null) {
          result.carrierPasswordPrompt_ = carrierPasswordPrompt_;
        } else {
          result.carrierPasswordPrompt_ = carrierPasswordPromptBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.apiVersion_ = apiVersion_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.name_ = name_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.getDefaultInstance()) return this;
        if (other.hasCarrierTos()) {
          mergeCarrierTos(other.getCarrierTos());
        }
        if (other.hasAssociationRequired()) {
          setAssociationRequired(other.getAssociationRequired());
        }
        if (other.hasPasswordRequired()) {
          setPasswordRequired(other.getPasswordRequired());
        }
        if (other.hasCarrierPasswordPrompt()) {
          mergeCarrierPasswordPrompt(other.getCarrierPasswordPrompt());
        }
        if (other.hasApiVersion()) {
          setApiVersion(other.getApiVersion());
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000020;
          name_ = other.name_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional .CarrierTos carrierTos = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos carrierTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosOrBuilder> carrierTosBuilder_;
      /**
       * <code>optional .CarrierTos carrierTos = 1;</code>
       */
      public boolean hasCarrierTos() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .CarrierTos carrierTos = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos getCarrierTos() {
        if (carrierTosBuilder_ == null) {
          return carrierTos_;
        } else {
          return carrierTosBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .CarrierTos carrierTos = 1;</code>
       */
      public Builder setCarrierTos(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos value) {
        if (carrierTosBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          carrierTos_ = value;
          onChanged();
        } else {
          carrierTosBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .CarrierTos carrierTos = 1;</code>
       */
      public Builder setCarrierTos(
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.Builder builderForValue) {
        if (carrierTosBuilder_ == null) {
          carrierTos_ = builderForValue.build();
          onChanged();
        } else {
          carrierTosBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .CarrierTos carrierTos = 1;</code>
       */
      public Builder mergeCarrierTos(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos value) {
        if (carrierTosBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              carrierTos_ != com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.getDefaultInstance()) {
            carrierTos_ =
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.newBuilder(carrierTos_).mergeFrom(value).buildPartial();
          } else {
            carrierTos_ = value;
          }
          onChanged();
        } else {
          carrierTosBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .CarrierTos carrierTos = 1;</code>
       */
      public Builder clearCarrierTos() {
        if (carrierTosBuilder_ == null) {
          carrierTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.getDefaultInstance();
          onChanged();
        } else {
          carrierTosBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .CarrierTos carrierTos = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.Builder getCarrierTosBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getCarrierTosFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .CarrierTos carrierTos = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosOrBuilder getCarrierTosOrBuilder() {
        if (carrierTosBuilder_ != null) {
          return carrierTosBuilder_.getMessageOrBuilder();
        } else {
          return carrierTos_;
        }
      }
      /**
       * <code>optional .CarrierTos carrierTos = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosOrBuilder> 
          getCarrierTosFieldBuilder() {
        if (carrierTosBuilder_ == null) {
          carrierTosBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosOrBuilder>(
                  carrierTos_,
                  getParentForChildren(),
                  isClean());
          carrierTos_ = null;
        }
        return carrierTosBuilder_;
      }

      // optional bool associationRequired = 2;
      private boolean associationRequired_ ;
      /**
       * <code>optional bool associationRequired = 2;</code>
       */
      public boolean hasAssociationRequired() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool associationRequired = 2;</code>
       */
      public boolean getAssociationRequired() {
        return associationRequired_;
      }
      /**
       * <code>optional bool associationRequired = 2;</code>
       */
      public Builder setAssociationRequired(boolean value) {
        bitField0_ |= 0x00000002;
        associationRequired_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool associationRequired = 2;</code>
       */
      public Builder clearAssociationRequired() {
        bitField0_ = (bitField0_ & ~0x00000002);
        associationRequired_ = false;
        onChanged();
        return this;
      }

      // optional bool passwordRequired = 3;
      private boolean passwordRequired_ ;
      /**
       * <code>optional bool passwordRequired = 3;</code>
       */
      public boolean hasPasswordRequired() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool passwordRequired = 3;</code>
       */
      public boolean getPasswordRequired() {
        return passwordRequired_;
      }
      /**
       * <code>optional bool passwordRequired = 3;</code>
       */
      public Builder setPasswordRequired(boolean value) {
        bitField0_ |= 0x00000004;
        passwordRequired_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool passwordRequired = 3;</code>
       */
      public Builder clearPasswordRequired() {
        bitField0_ = (bitField0_ & ~0x00000004);
        passwordRequired_ = false;
        onChanged();
        return this;
      }

      // optional .PasswordPrompt carrierPasswordPrompt = 4;
      private com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt carrierPasswordPrompt_ = com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt, com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PasswordPromptOrBuilder> carrierPasswordPromptBuilder_;
      /**
       * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
       */
      public boolean hasCarrierPasswordPrompt() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt getCarrierPasswordPrompt() {
        if (carrierPasswordPromptBuilder_ == null) {
          return carrierPasswordPrompt_;
        } else {
          return carrierPasswordPromptBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
       */
      public Builder setCarrierPasswordPrompt(com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt value) {
        if (carrierPasswordPromptBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          carrierPasswordPrompt_ = value;
          onChanged();
        } else {
          carrierPasswordPromptBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
       */
      public Builder setCarrierPasswordPrompt(
          com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.Builder builderForValue) {
        if (carrierPasswordPromptBuilder_ == null) {
          carrierPasswordPrompt_ = builderForValue.build();
          onChanged();
        } else {
          carrierPasswordPromptBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
       */
      public Builder mergeCarrierPasswordPrompt(com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt value) {
        if (carrierPasswordPromptBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              carrierPasswordPrompt_ != com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.getDefaultInstance()) {
            carrierPasswordPrompt_ =
              com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.newBuilder(carrierPasswordPrompt_).mergeFrom(value).buildPartial();
          } else {
            carrierPasswordPrompt_ = value;
          }
          onChanged();
        } else {
          carrierPasswordPromptBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
       */
      public Builder clearCarrierPasswordPrompt() {
        if (carrierPasswordPromptBuilder_ == null) {
          carrierPasswordPrompt_ = com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.getDefaultInstance();
          onChanged();
        } else {
          carrierPasswordPromptBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.Builder getCarrierPasswordPromptBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getCarrierPasswordPromptFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PasswordPromptOrBuilder getCarrierPasswordPromptOrBuilder() {
        if (carrierPasswordPromptBuilder_ != null) {
          return carrierPasswordPromptBuilder_.getMessageOrBuilder();
        } else {
          return carrierPasswordPrompt_;
        }
      }
      /**
       * <code>optional .PasswordPrompt carrierPasswordPrompt = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt, com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PasswordPromptOrBuilder> 
          getCarrierPasswordPromptFieldBuilder() {
        if (carrierPasswordPromptBuilder_ == null) {
          carrierPasswordPromptBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt, com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PasswordPromptOrBuilder>(
                  carrierPasswordPrompt_,
                  getParentForChildren(),
                  isClean());
          carrierPasswordPrompt_ = null;
        }
        return carrierPasswordPromptBuilder_;
      }

      // optional int32 apiVersion = 5;
      private int apiVersion_ ;
      /**
       * <code>optional int32 apiVersion = 5;</code>
       */
      public boolean hasApiVersion() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int32 apiVersion = 5;</code>
       */
      public int getApiVersion() {
        return apiVersion_;
      }
      /**
       * <code>optional int32 apiVersion = 5;</code>
       */
      public Builder setApiVersion(int value) {
        bitField0_ |= 0x00000010;
        apiVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 apiVersion = 5;</code>
       */
      public Builder clearApiVersion() {
        bitField0_ = (bitField0_ & ~0x00000010);
        apiVersion_ = 0;
        onChanged();
        return this;
      }

      // optional string name = 6;
      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 6;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional string name = 6;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 6;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 6;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 6;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000020);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 6;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        name_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:CarrierBillingInstrumentStatus)
    }

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

    // @@protoc_insertion_point(class_scope:CarrierBillingInstrumentStatus)
  }

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

    // optional .CarrierTosEntry dcbTos = 1;
    /**
     * <code>optional .CarrierTosEntry dcbTos = 1;</code>
     */
    boolean hasDcbTos();
    /**
     * <code>optional .CarrierTosEntry dcbTos = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry getDcbTos();
    /**
     * <code>optional .CarrierTosEntry dcbTos = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntryOrBuilder getDcbTosOrBuilder();

    // optional .CarrierTosEntry piiTos = 2;
    /**
     * <code>optional .CarrierTosEntry piiTos = 2;</code>
     */
    boolean hasPiiTos();
    /**
     * <code>optional .CarrierTosEntry piiTos = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry getPiiTos();
    /**
     * <code>optional .CarrierTosEntry piiTos = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntryOrBuilder getPiiTosOrBuilder();

    // optional bool needsDcbTosAcceptance = 3;
    /**
     * <code>optional bool needsDcbTosAcceptance = 3;</code>
     */
    boolean hasNeedsDcbTosAcceptance();
    /**
     * <code>optional bool needsDcbTosAcceptance = 3;</code>
     */
    boolean getNeedsDcbTosAcceptance();

    // optional bool needsPiiTosAcceptance = 4;
    /**
     * <code>optional bool needsPiiTosAcceptance = 4;</code>
     */
    boolean hasNeedsPiiTosAcceptance();
    /**
     * <code>optional bool needsPiiTosAcceptance = 4;</code>
     */
    boolean getNeedsPiiTosAcceptance();
  }
  /**
   * Protobuf type {@code CarrierTos}
   */
  public static final class CarrierTos extends
      com.google.protobuf.GeneratedMessage
      implements CarrierTosOrBuilder {
    // Use CarrierTos.newBuilder() to construct.
    private CarrierTos(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private CarrierTos(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public CarrierTos getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private CarrierTos(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = dcbTos_.toBuilder();
              }
              dcbTos_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(dcbTos_);
                dcbTos_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = piiTos_.toBuilder();
              }
              piiTos_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(piiTos_);
                piiTos_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              needsDcbTosAcceptance_ = input.readBool();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              needsPiiTosAcceptance_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierTos_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierTos_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.class, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.Builder.class);
    }

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

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

    private int bitField0_;
    // optional .CarrierTosEntry dcbTos = 1;
    public static final int DCBTOS_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry dcbTos_;
    /**
     * <code>optional .CarrierTosEntry dcbTos = 1;</code>
     */
    public boolean hasDcbTos() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .CarrierTosEntry dcbTos = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry getDcbTos() {
      return dcbTos_;
    }
    /**
     * <code>optional .CarrierTosEntry dcbTos = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntryOrBuilder getDcbTosOrBuilder() {
      return dcbTos_;
    }

    // optional .CarrierTosEntry piiTos = 2;
    public static final int PIITOS_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry piiTos_;
    /**
     * <code>optional .CarrierTosEntry piiTos = 2;</code>
     */
    public boolean hasPiiTos() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .CarrierTosEntry piiTos = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry getPiiTos() {
      return piiTos_;
    }
    /**
     * <code>optional .CarrierTosEntry piiTos = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntryOrBuilder getPiiTosOrBuilder() {
      return piiTos_;
    }

    // optional bool needsDcbTosAcceptance = 3;
    public static final int NEEDSDCBTOSACCEPTANCE_FIELD_NUMBER = 3;
    private boolean needsDcbTosAcceptance_;
    /**
     * <code>optional bool needsDcbTosAcceptance = 3;</code>
     */
    public boolean hasNeedsDcbTosAcceptance() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool needsDcbTosAcceptance = 3;</code>
     */
    public boolean getNeedsDcbTosAcceptance() {
      return needsDcbTosAcceptance_;
    }

    // optional bool needsPiiTosAcceptance = 4;
    public static final int NEEDSPIITOSACCEPTANCE_FIELD_NUMBER = 4;
    private boolean needsPiiTosAcceptance_;
    /**
     * <code>optional bool needsPiiTosAcceptance = 4;</code>
     */
    public boolean hasNeedsPiiTosAcceptance() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool needsPiiTosAcceptance = 4;</code>
     */
    public boolean getNeedsPiiTosAcceptance() {
      return needsPiiTosAcceptance_;
    }

    private void initFields() {
      dcbTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.getDefaultInstance();
      piiTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.getDefaultInstance();
      needsDcbTosAcceptance_ = false;
      needsPiiTosAcceptance_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, dcbTos_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, piiTos_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, needsDcbTosAcceptance_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(4, needsPiiTosAcceptance_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, dcbTos_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, piiTos_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, needsDcbTosAcceptance_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, needsPiiTosAcceptance_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code CarrierTos}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierTos_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierTos_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.class, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        if (dcbTosBuilder_ == null) {
          dcbTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.getDefaultInstance();
        } else {
          dcbTosBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (piiTosBuilder_ == null) {
          piiTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.getDefaultInstance();
        } else {
          piiTosBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        needsDcbTosAcceptance_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        needsPiiTosAcceptance_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierTos_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos build() {
        com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos result = new com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (dcbTosBuilder_ == null) {
          result.dcbTos_ = dcbTos_;
        } else {
          result.dcbTos_ = dcbTosBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (piiTosBuilder_ == null) {
          result.piiTos_ = piiTos_;
        } else {
          result.piiTos_ = piiTosBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.needsDcbTosAcceptance_ = needsDcbTosAcceptance_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.needsPiiTosAcceptance_ = needsPiiTosAcceptance_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.CarrierTos.getDefaultInstance()) return this;
        if (other.hasDcbTos()) {
          mergeDcbTos(other.getDcbTos());
        }
        if (other.hasPiiTos()) {
          mergePiiTos(other.getPiiTos());
        }
        if (other.hasNeedsDcbTosAcceptance()) {
          setNeedsDcbTosAcceptance(other.getNeedsDcbTosAcceptance());
        }
        if (other.hasNeedsPiiTosAcceptance()) {
          setNeedsPiiTosAcceptance(other.getNeedsPiiTosAcceptance());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional .CarrierTosEntry dcbTos = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry dcbTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntryOrBuilder> dcbTosBuilder_;
      /**
       * <code>optional .CarrierTosEntry dcbTos = 1;</code>
       */
      public boolean hasDcbTos() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .CarrierTosEntry dcbTos = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry getDcbTos() {
        if (dcbTosBuilder_ == null) {
          return dcbTos_;
        } else {
          return dcbTosBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .CarrierTosEntry dcbTos = 1;</code>
       */
      public Builder setDcbTos(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry value) {
        if (dcbTosBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          dcbTos_ = value;
          onChanged();
        } else {
          dcbTosBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .CarrierTosEntry dcbTos = 1;</code>
       */
      public Builder setDcbTos(
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.Builder builderForValue) {
        if (dcbTosBuilder_ == null) {
          dcbTos_ = builderForValue.build();
          onChanged();
        } else {
          dcbTosBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .CarrierTosEntry dcbTos = 1;</code>
       */
      public Builder mergeDcbTos(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry value) {
        if (dcbTosBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              dcbTos_ != com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.getDefaultInstance()) {
            dcbTos_ =
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.newBuilder(dcbTos_).mergeFrom(value).buildPartial();
          } else {
            dcbTos_ = value;
          }
          onChanged();
        } else {
          dcbTosBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .CarrierTosEntry dcbTos = 1;</code>
       */
      public Builder clearDcbTos() {
        if (dcbTosBuilder_ == null) {
          dcbTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.getDefaultInstance();
          onChanged();
        } else {
          dcbTosBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .CarrierTosEntry dcbTos = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.Builder getDcbTosBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getDcbTosFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .CarrierTosEntry dcbTos = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntryOrBuilder getDcbTosOrBuilder() {
        if (dcbTosBuilder_ != null) {
          return dcbTosBuilder_.getMessageOrBuilder();
        } else {
          return dcbTos_;
        }
      }
      /**
       * <code>optional .CarrierTosEntry dcbTos = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntryOrBuilder> 
          getDcbTosFieldBuilder() {
        if (dcbTosBuilder_ == null) {
          dcbTosBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntryOrBuilder>(
                  dcbTos_,
                  getParentForChildren(),
                  isClean());
          dcbTos_ = null;
        }
        return dcbTosBuilder_;
      }

      // optional .CarrierTosEntry piiTos = 2;
      private com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry piiTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntryOrBuilder> piiTosBuilder_;
      /**
       * <code>optional .CarrierTosEntry piiTos = 2;</code>
       */
      public boolean hasPiiTos() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .CarrierTosEntry piiTos = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry getPiiTos() {
        if (piiTosBuilder_ == null) {
          return piiTos_;
        } else {
          return piiTosBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .CarrierTosEntry piiTos = 2;</code>
       */
      public Builder setPiiTos(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry value) {
        if (piiTosBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          piiTos_ = value;
          onChanged();
        } else {
          piiTosBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .CarrierTosEntry piiTos = 2;</code>
       */
      public Builder setPiiTos(
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.Builder builderForValue) {
        if (piiTosBuilder_ == null) {
          piiTos_ = builderForValue.build();
          onChanged();
        } else {
          piiTosBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .CarrierTosEntry piiTos = 2;</code>
       */
      public Builder mergePiiTos(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry value) {
        if (piiTosBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              piiTos_ != com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.getDefaultInstance()) {
            piiTos_ =
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.newBuilder(piiTos_).mergeFrom(value).buildPartial();
          } else {
            piiTos_ = value;
          }
          onChanged();
        } else {
          piiTosBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .CarrierTosEntry piiTos = 2;</code>
       */
      public Builder clearPiiTos() {
        if (piiTosBuilder_ == null) {
          piiTos_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.getDefaultInstance();
          onChanged();
        } else {
          piiTosBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .CarrierTosEntry piiTos = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.Builder getPiiTosBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getPiiTosFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .CarrierTosEntry piiTos = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntryOrBuilder getPiiTosOrBuilder() {
        if (piiTosBuilder_ != null) {
          return piiTosBuilder_.getMessageOrBuilder();
        } else {
          return piiTos_;
        }
      }
      /**
       * <code>optional .CarrierTosEntry piiTos = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntryOrBuilder> 
          getPiiTosFieldBuilder() {
        if (piiTosBuilder_ == null) {
          piiTosBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntryOrBuilder>(
                  piiTos_,
                  getParentForChildren(),
                  isClean());
          piiTos_ = null;
        }
        return piiTosBuilder_;
      }

      // optional bool needsDcbTosAcceptance = 3;
      private boolean needsDcbTosAcceptance_ ;
      /**
       * <code>optional bool needsDcbTosAcceptance = 3;</code>
       */
      public boolean hasNeedsDcbTosAcceptance() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool needsDcbTosAcceptance = 3;</code>
       */
      public boolean getNeedsDcbTosAcceptance() {
        return needsDcbTosAcceptance_;
      }
      /**
       * <code>optional bool needsDcbTosAcceptance = 3;</code>
       */
      public Builder setNeedsDcbTosAcceptance(boolean value) {
        bitField0_ |= 0x00000004;
        needsDcbTosAcceptance_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool needsDcbTosAcceptance = 3;</code>
       */
      public Builder clearNeedsDcbTosAcceptance() {
        bitField0_ = (bitField0_ & ~0x00000004);
        needsDcbTosAcceptance_ = false;
        onChanged();
        return this;
      }

      // optional bool needsPiiTosAcceptance = 4;
      private boolean needsPiiTosAcceptance_ ;
      /**
       * <code>optional bool needsPiiTosAcceptance = 4;</code>
       */
      public boolean hasNeedsPiiTosAcceptance() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bool needsPiiTosAcceptance = 4;</code>
       */
      public boolean getNeedsPiiTosAcceptance() {
        return needsPiiTosAcceptance_;
      }
      /**
       * <code>optional bool needsPiiTosAcceptance = 4;</code>
       */
      public Builder setNeedsPiiTosAcceptance(boolean value) {
        bitField0_ |= 0x00000008;
        needsPiiTosAcceptance_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool needsPiiTosAcceptance = 4;</code>
       */
      public Builder clearNeedsPiiTosAcceptance() {
        bitField0_ = (bitField0_ & ~0x00000008);
        needsPiiTosAcceptance_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:CarrierTos)
    }

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

    // @@protoc_insertion_point(class_scope:CarrierTos)
  }

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

    // optional string url = 1;
    /**
     * <code>optional string url = 1;</code>
     */
    boolean hasUrl();
    /**
     * <code>optional string url = 1;</code>
     */
    java.lang.String getUrl();
    /**
     * <code>optional string url = 1;</code>
     */
    com.google.protobuf.ByteString
        getUrlBytes();

    // optional string version = 2;
    /**
     * <code>optional string version = 2;</code>
     */
    boolean hasVersion();
    /**
     * <code>optional string version = 2;</code>
     */
    java.lang.String getVersion();
    /**
     * <code>optional string version = 2;</code>
     */
    com.google.protobuf.ByteString
        getVersionBytes();
  }
  /**
   * Protobuf type {@code CarrierTosEntry}
   */
  public static final class CarrierTosEntry extends
      com.google.protobuf.GeneratedMessage
      implements CarrierTosEntryOrBuilder {
    // Use CarrierTosEntry.newBuilder() to construct.
    private CarrierTosEntry(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private CarrierTosEntry(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public CarrierTosEntry getDefaultInstanceForType() {
      return defaultInstance;
    }

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

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierTosEntry_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.class, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string url = 1;
    public static final int URL_FIELD_NUMBER = 1;
    private java.lang.Object url_;
    /**
     * <code>optional string url = 1;</code>
     */
    public boolean hasUrl() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string url = 1;</code>
     */
    public java.lang.String getUrl() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          url_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string url = 1;</code>
     */
    public com.google.protobuf.ByteString
        getUrlBytes() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        url_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string version = 2;
    public static final int VERSION_FIELD_NUMBER = 2;
    private java.lang.Object version_;
    /**
     * <code>optional string version = 2;</code>
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string version = 2;</code>
     */
    public java.lang.String getVersion() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          version_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string version = 2;</code>
     */
    public com.google.protobuf.ByteString
        getVersionBytes() {
      java.lang.Object ref = version_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        version_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

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

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

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

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code CarrierTosEntry}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntryOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierTosEntry_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierTosEntry_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.class, com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

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

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CarrierTosEntry_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry build() {
        com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry result = new com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.url_ = url_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.version_ = version_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.CarrierTosEntry.getDefaultInstance()) return this;
        if (other.hasUrl()) {
          bitField0_ |= 0x00000001;
          url_ = other.url_;
          onChanged();
        }
        if (other.hasVersion()) {
          bitField0_ |= 0x00000002;
          version_ = other.version_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string url = 1;
      private java.lang.Object url_ = "";
      /**
       * <code>optional string url = 1;</code>
       */
      public boolean hasUrl() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string url = 1;</code>
       */
      public java.lang.String getUrl() {
        java.lang.Object ref = url_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          url_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string url = 1;</code>
       */
      public com.google.protobuf.ByteString
          getUrlBytes() {
        java.lang.Object ref = url_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          url_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string url = 1;</code>
       */
      public Builder setUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        url_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string url = 1;</code>
       */
      public Builder clearUrl() {
        bitField0_ = (bitField0_ & ~0x00000001);
        url_ = getDefaultInstance().getUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string url = 1;</code>
       */
      public Builder setUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        url_ = value;
        onChanged();
        return this;
      }

      // optional string version = 2;
      private java.lang.Object version_ = "";
      /**
       * <code>optional string version = 2;</code>
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string version = 2;</code>
       */
      public java.lang.String getVersion() {
        java.lang.Object ref = version_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          version_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string version = 2;</code>
       */
      public com.google.protobuf.ByteString
          getVersionBytes() {
        java.lang.Object ref = version_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          version_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string version = 2;</code>
       */
      public Builder setVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 2;</code>
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000002);
        version_ = getDefaultInstance().getVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string version = 2;</code>
       */
      public Builder setVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        version_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:CarrierTosEntry)
    }

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

    // @@protoc_insertion_point(class_scope:CarrierTosEntry)
  }

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

    // optional int32 type = 1;
    /**
     * <code>optional int32 type = 1;</code>
     */
    boolean hasType();
    /**
     * <code>optional int32 type = 1;</code>
     */
    int getType();

    // optional string escrowHandle = 2;
    /**
     * <code>optional string escrowHandle = 2;</code>
     */
    boolean hasEscrowHandle();
    /**
     * <code>optional string escrowHandle = 2;</code>
     */
    java.lang.String getEscrowHandle();
    /**
     * <code>optional string escrowHandle = 2;</code>
     */
    com.google.protobuf.ByteString
        getEscrowHandleBytes();

    // optional string lastDigits = 3;
    /**
     * <code>optional string lastDigits = 3;</code>
     */
    boolean hasLastDigits();
    /**
     * <code>optional string lastDigits = 3;</code>
     */
    java.lang.String getLastDigits();
    /**
     * <code>optional string lastDigits = 3;</code>
     */
    com.google.protobuf.ByteString
        getLastDigitsBytes();

    // optional int32 expirationMonth = 4;
    /**
     * <code>optional int32 expirationMonth = 4;</code>
     */
    boolean hasExpirationMonth();
    /**
     * <code>optional int32 expirationMonth = 4;</code>
     */
    int getExpirationMonth();

    // optional int32 expirationYear = 5;
    /**
     * <code>optional int32 expirationYear = 5;</code>
     */
    boolean hasExpirationYear();
    /**
     * <code>optional int32 expirationYear = 5;</code>
     */
    int getExpirationYear();

    // repeated .EfeParam escrowEfeParam = 6;
    /**
     * <code>repeated .EfeParam escrowEfeParam = 6;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.EfeParam> 
        getEscrowEfeParamList();
    /**
     * <code>repeated .EfeParam escrowEfeParam = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.EfeParam getEscrowEfeParam(int index);
    /**
     * <code>repeated .EfeParam escrowEfeParam = 6;</code>
     */
    int getEscrowEfeParamCount();
    /**
     * <code>repeated .EfeParam escrowEfeParam = 6;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.EfeParamOrBuilder> 
        getEscrowEfeParamOrBuilderList();
    /**
     * <code>repeated .EfeParam escrowEfeParam = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.EfeParamOrBuilder getEscrowEfeParamOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code CreditCardInstrument}
   */
  public static final class CreditCardInstrument extends
      com.google.protobuf.GeneratedMessage
      implements CreditCardInstrumentOrBuilder {
    // Use CreditCardInstrument.newBuilder() to construct.
    private CreditCardInstrument(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private CreditCardInstrument(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public CreditCardInstrument getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private CreditCardInstrument(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              type_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              escrowHandle_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              lastDigits_ = input.readBytes();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              expirationMonth_ = input.readInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              expirationYear_ = input.readInt32();
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                escrowEfeParam_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.EfeParam>();
                mutable_bitField0_ |= 0x00000020;
              }
              escrowEfeParam_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          escrowEfeParam_ = java.util.Collections.unmodifiableList(escrowEfeParam_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CreditCardInstrument_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CreditCardInstrument_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.class, com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private int type_;
    /**
     * <code>optional int32 type = 1;</code>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 type = 1;</code>
     */
    public int getType() {
      return type_;
    }

    // optional string escrowHandle = 2;
    public static final int ESCROWHANDLE_FIELD_NUMBER = 2;
    private java.lang.Object escrowHandle_;
    /**
     * <code>optional string escrowHandle = 2;</code>
     */
    public boolean hasEscrowHandle() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string escrowHandle = 2;</code>
     */
    public java.lang.String getEscrowHandle() {
      java.lang.Object ref = escrowHandle_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          escrowHandle_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string escrowHandle = 2;</code>
     */
    public com.google.protobuf.ByteString
        getEscrowHandleBytes() {
      java.lang.Object ref = escrowHandle_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        escrowHandle_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string lastDigits = 3;
    public static final int LASTDIGITS_FIELD_NUMBER = 3;
    private java.lang.Object lastDigits_;
    /**
     * <code>optional string lastDigits = 3;</code>
     */
    public boolean hasLastDigits() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string lastDigits = 3;</code>
     */
    public java.lang.String getLastDigits() {
      java.lang.Object ref = lastDigits_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          lastDigits_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string lastDigits = 3;</code>
     */
    public com.google.protobuf.ByteString
        getLastDigitsBytes() {
      java.lang.Object ref = lastDigits_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        lastDigits_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 expirationMonth = 4;
    public static final int EXPIRATIONMONTH_FIELD_NUMBER = 4;
    private int expirationMonth_;
    /**
     * <code>optional int32 expirationMonth = 4;</code>
     */
    public boolean hasExpirationMonth() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int32 expirationMonth = 4;</code>
     */
    public int getExpirationMonth() {
      return expirationMonth_;
    }

    // optional int32 expirationYear = 5;
    public static final int EXPIRATIONYEAR_FIELD_NUMBER = 5;
    private int expirationYear_;
    /**
     * <code>optional int32 expirationYear = 5;</code>
     */
    public boolean hasExpirationYear() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int32 expirationYear = 5;</code>
     */
    public int getExpirationYear() {
      return expirationYear_;
    }

    // repeated .EfeParam escrowEfeParam = 6;
    public static final int ESCROWEFEPARAM_FIELD_NUMBER = 6;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.EfeParam> escrowEfeParam_;
    /**
     * <code>repeated .EfeParam escrowEfeParam = 6;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.EfeParam> getEscrowEfeParamList() {
      return escrowEfeParam_;
    }
    /**
     * <code>repeated .EfeParam escrowEfeParam = 6;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.EfeParamOrBuilder> 
        getEscrowEfeParamOrBuilderList() {
      return escrowEfeParam_;
    }
    /**
     * <code>repeated .EfeParam escrowEfeParam = 6;</code>
     */
    public int getEscrowEfeParamCount() {
      return escrowEfeParam_.size();
    }
    /**
     * <code>repeated .EfeParam escrowEfeParam = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.EfeParam getEscrowEfeParam(int index) {
      return escrowEfeParam_.get(index);
    }
    /**
     * <code>repeated .EfeParam escrowEfeParam = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.EfeParamOrBuilder getEscrowEfeParamOrBuilder(
        int index) {
      return escrowEfeParam_.get(index);
    }

    private void initFields() {
      type_ = 0;
      escrowHandle_ = "";
      lastDigits_ = "";
      expirationMonth_ = 0;
      expirationYear_ = 0;
      escrowEfeParam_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, type_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getEscrowHandleBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getLastDigitsBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, expirationMonth_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt32(5, expirationYear_);
      }
      for (int i = 0; i < escrowEfeParam_.size(); i++) {
        output.writeMessage(6, escrowEfeParam_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, type_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getEscrowHandleBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getLastDigitsBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, expirationMonth_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, expirationYear_);
      }
      for (int i = 0; i < escrowEfeParam_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, escrowEfeParam_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code CreditCardInstrument}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrumentOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CreditCardInstrument_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CreditCardInstrument_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.class, com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        type_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        escrowHandle_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        lastDigits_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        expirationMonth_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        expirationYear_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        if (escrowEfeParamBuilder_ == null) {
          escrowEfeParam_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          escrowEfeParamBuilder_.clear();
        }
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CreditCardInstrument_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument build() {
        com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument result = new com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.escrowHandle_ = escrowHandle_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.lastDigits_ = lastDigits_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.expirationMonth_ = expirationMonth_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.expirationYear_ = expirationYear_;
        if (escrowEfeParamBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            escrowEfeParam_ = java.util.Collections.unmodifiableList(escrowEfeParam_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.escrowEfeParam_ = escrowEfeParam_;
        } else {
          result.escrowEfeParam_ = escrowEfeParamBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasEscrowHandle()) {
          bitField0_ |= 0x00000002;
          escrowHandle_ = other.escrowHandle_;
          onChanged();
        }
        if (other.hasLastDigits()) {
          bitField0_ |= 0x00000004;
          lastDigits_ = other.lastDigits_;
          onChanged();
        }
        if (other.hasExpirationMonth()) {
          setExpirationMonth(other.getExpirationMonth());
        }
        if (other.hasExpirationYear()) {
          setExpirationYear(other.getExpirationYear());
        }
        if (escrowEfeParamBuilder_ == null) {
          if (!other.escrowEfeParam_.isEmpty()) {
            if (escrowEfeParam_.isEmpty()) {
              escrowEfeParam_ = other.escrowEfeParam_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureEscrowEfeParamIsMutable();
              escrowEfeParam_.addAll(other.escrowEfeParam_);
            }
            onChanged();
          }
        } else {
          if (!other.escrowEfeParam_.isEmpty()) {
            if (escrowEfeParamBuilder_.isEmpty()) {
              escrowEfeParamBuilder_.dispose();
              escrowEfeParamBuilder_ = null;
              escrowEfeParam_ = other.escrowEfeParam_;
              bitField0_ = (bitField0_ & ~0x00000020);
              escrowEfeParamBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getEscrowEfeParamFieldBuilder() : null;
            } else {
              escrowEfeParamBuilder_.addAllMessages(other.escrowEfeParam_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 type = 1;
      private int type_ ;
      /**
       * <code>optional int32 type = 1;</code>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 type = 1;</code>
       */
      public int getType() {
        return type_;
      }
      /**
       * <code>optional int32 type = 1;</code>
       */
      public Builder setType(int value) {
        bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 type = 1;</code>
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = 0;
        onChanged();
        return this;
      }

      // optional string escrowHandle = 2;
      private java.lang.Object escrowHandle_ = "";
      /**
       * <code>optional string escrowHandle = 2;</code>
       */
      public boolean hasEscrowHandle() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string escrowHandle = 2;</code>
       */
      public java.lang.String getEscrowHandle() {
        java.lang.Object ref = escrowHandle_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          escrowHandle_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string escrowHandle = 2;</code>
       */
      public com.google.protobuf.ByteString
          getEscrowHandleBytes() {
        java.lang.Object ref = escrowHandle_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          escrowHandle_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string escrowHandle = 2;</code>
       */
      public Builder setEscrowHandle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        escrowHandle_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string escrowHandle = 2;</code>
       */
      public Builder clearEscrowHandle() {
        bitField0_ = (bitField0_ & ~0x00000002);
        escrowHandle_ = getDefaultInstance().getEscrowHandle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string escrowHandle = 2;</code>
       */
      public Builder setEscrowHandleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        escrowHandle_ = value;
        onChanged();
        return this;
      }

      // optional string lastDigits = 3;
      private java.lang.Object lastDigits_ = "";
      /**
       * <code>optional string lastDigits = 3;</code>
       */
      public boolean hasLastDigits() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string lastDigits = 3;</code>
       */
      public java.lang.String getLastDigits() {
        java.lang.Object ref = lastDigits_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          lastDigits_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string lastDigits = 3;</code>
       */
      public com.google.protobuf.ByteString
          getLastDigitsBytes() {
        java.lang.Object ref = lastDigits_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          lastDigits_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string lastDigits = 3;</code>
       */
      public Builder setLastDigits(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        lastDigits_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string lastDigits = 3;</code>
       */
      public Builder clearLastDigits() {
        bitField0_ = (bitField0_ & ~0x00000004);
        lastDigits_ = getDefaultInstance().getLastDigits();
        onChanged();
        return this;
      }
      /**
       * <code>optional string lastDigits = 3;</code>
       */
      public Builder setLastDigitsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        lastDigits_ = value;
        onChanged();
        return this;
      }

      // optional int32 expirationMonth = 4;
      private int expirationMonth_ ;
      /**
       * <code>optional int32 expirationMonth = 4;</code>
       */
      public boolean hasExpirationMonth() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int32 expirationMonth = 4;</code>
       */
      public int getExpirationMonth() {
        return expirationMonth_;
      }
      /**
       * <code>optional int32 expirationMonth = 4;</code>
       */
      public Builder setExpirationMonth(int value) {
        bitField0_ |= 0x00000008;
        expirationMonth_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 expirationMonth = 4;</code>
       */
      public Builder clearExpirationMonth() {
        bitField0_ = (bitField0_ & ~0x00000008);
        expirationMonth_ = 0;
        onChanged();
        return this;
      }

      // optional int32 expirationYear = 5;
      private int expirationYear_ ;
      /**
       * <code>optional int32 expirationYear = 5;</code>
       */
      public boolean hasExpirationYear() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int32 expirationYear = 5;</code>
       */
      public int getExpirationYear() {
        return expirationYear_;
      }
      /**
       * <code>optional int32 expirationYear = 5;</code>
       */
      public Builder setExpirationYear(int value) {
        bitField0_ |= 0x00000010;
        expirationYear_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 expirationYear = 5;</code>
       */
      public Builder clearExpirationYear() {
        bitField0_ = (bitField0_ & ~0x00000010);
        expirationYear_ = 0;
        onChanged();
        return this;
      }

      // repeated .EfeParam escrowEfeParam = 6;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.EfeParam> escrowEfeParam_ =
        java.util.Collections.emptyList();
      private void ensureEscrowEfeParamIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          escrowEfeParam_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.EfeParam>(escrowEfeParam_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.EfeParam, com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.Builder, com.akdeniz.googleplaycrawler.GooglePlay.EfeParamOrBuilder> escrowEfeParamBuilder_;

      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.EfeParam> getEscrowEfeParamList() {
        if (escrowEfeParamBuilder_ == null) {
          return java.util.Collections.unmodifiableList(escrowEfeParam_);
        } else {
          return escrowEfeParamBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public int getEscrowEfeParamCount() {
        if (escrowEfeParamBuilder_ == null) {
          return escrowEfeParam_.size();
        } else {
          return escrowEfeParamBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.EfeParam getEscrowEfeParam(int index) {
        if (escrowEfeParamBuilder_ == null) {
          return escrowEfeParam_.get(index);
        } else {
          return escrowEfeParamBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public Builder setEscrowEfeParam(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.EfeParam value) {
        if (escrowEfeParamBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEscrowEfeParamIsMutable();
          escrowEfeParam_.set(index, value);
          onChanged();
        } else {
          escrowEfeParamBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public Builder setEscrowEfeParam(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.Builder builderForValue) {
        if (escrowEfeParamBuilder_ == null) {
          ensureEscrowEfeParamIsMutable();
          escrowEfeParam_.set(index, builderForValue.build());
          onChanged();
        } else {
          escrowEfeParamBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public Builder addEscrowEfeParam(com.akdeniz.googleplaycrawler.GooglePlay.EfeParam value) {
        if (escrowEfeParamBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEscrowEfeParamIsMutable();
          escrowEfeParam_.add(value);
          onChanged();
        } else {
          escrowEfeParamBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public Builder addEscrowEfeParam(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.EfeParam value) {
        if (escrowEfeParamBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEscrowEfeParamIsMutable();
          escrowEfeParam_.add(index, value);
          onChanged();
        } else {
          escrowEfeParamBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public Builder addEscrowEfeParam(
          com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.Builder builderForValue) {
        if (escrowEfeParamBuilder_ == null) {
          ensureEscrowEfeParamIsMutable();
          escrowEfeParam_.add(builderForValue.build());
          onChanged();
        } else {
          escrowEfeParamBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public Builder addEscrowEfeParam(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.Builder builderForValue) {
        if (escrowEfeParamBuilder_ == null) {
          ensureEscrowEfeParamIsMutable();
          escrowEfeParam_.add(index, builderForValue.build());
          onChanged();
        } else {
          escrowEfeParamBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public Builder addAllEscrowEfeParam(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.EfeParam> values) {
        if (escrowEfeParamBuilder_ == null) {
          ensureEscrowEfeParamIsMutable();
          super.addAll(values, escrowEfeParam_);
          onChanged();
        } else {
          escrowEfeParamBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public Builder clearEscrowEfeParam() {
        if (escrowEfeParamBuilder_ == null) {
          escrowEfeParam_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          escrowEfeParamBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public Builder removeEscrowEfeParam(int index) {
        if (escrowEfeParamBuilder_ == null) {
          ensureEscrowEfeParamIsMutable();
          escrowEfeParam_.remove(index);
          onChanged();
        } else {
          escrowEfeParamBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.Builder getEscrowEfeParamBuilder(
          int index) {
        return getEscrowEfeParamFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.EfeParamOrBuilder getEscrowEfeParamOrBuilder(
          int index) {
        if (escrowEfeParamBuilder_ == null) {
          return escrowEfeParam_.get(index);  } else {
          return escrowEfeParamBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.EfeParamOrBuilder> 
           getEscrowEfeParamOrBuilderList() {
        if (escrowEfeParamBuilder_ != null) {
          return escrowEfeParamBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(escrowEfeParam_);
        }
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.Builder addEscrowEfeParamBuilder() {
        return getEscrowEfeParamFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.getDefaultInstance());
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.Builder addEscrowEfeParamBuilder(
          int index) {
        return getEscrowEfeParamFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.getDefaultInstance());
      }
      /**
       * <code>repeated .EfeParam escrowEfeParam = 6;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.Builder> 
           getEscrowEfeParamBuilderList() {
        return getEscrowEfeParamFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.EfeParam, com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.Builder, com.akdeniz.googleplaycrawler.GooglePlay.EfeParamOrBuilder> 
          getEscrowEfeParamFieldBuilder() {
        if (escrowEfeParamBuilder_ == null) {
          escrowEfeParamBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.EfeParam, com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.Builder, com.akdeniz.googleplaycrawler.GooglePlay.EfeParamOrBuilder>(
                  escrowEfeParam_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          escrowEfeParam_ = null;
        }
        return escrowEfeParamBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:CreditCardInstrument)
    }

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

    // @@protoc_insertion_point(class_scope:CreditCardInstrument)
  }

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

    // optional int32 key = 1;
    /**
     * <code>optional int32 key = 1;</code>
     */
    boolean hasKey();
    /**
     * <code>optional int32 key = 1;</code>
     */
    int getKey();

    // optional string value = 2;
    /**
     * <code>optional string value = 2;</code>
     */
    boolean hasValue();
    /**
     * <code>optional string value = 2;</code>
     */
    java.lang.String getValue();
    /**
     * <code>optional string value = 2;</code>
     */
    com.google.protobuf.ByteString
        getValueBytes();
  }
  /**
   * Protobuf type {@code EfeParam}
   */
  public static final class EfeParam extends
      com.google.protobuf.GeneratedMessage
      implements EfeParamOrBuilder {
    // Use EfeParam.newBuilder() to construct.
    private EfeParam(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EfeParam(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public EfeParam getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EfeParam(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              key_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              value_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EfeParam_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EfeParam_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.class, com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 key = 1;
    public static final int KEY_FIELD_NUMBER = 1;
    private int key_;
    /**
     * <code>optional int32 key = 1;</code>
     */
    public boolean hasKey() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 key = 1;</code>
     */
    public int getKey() {
      return key_;
    }

    // optional string value = 2;
    public static final int VALUE_FIELD_NUMBER = 2;
    private java.lang.Object value_;
    /**
     * <code>optional string value = 2;</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string value = 2;</code>
     */
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          value_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string value = 2;</code>
     */
    public com.google.protobuf.ByteString
        getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        value_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

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

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

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

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.EfeParam parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EfeParam parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EfeParam parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EfeParam parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EfeParam parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EfeParam parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EfeParam parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EfeParam parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EfeParam parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EfeParam parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.EfeParam prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code EfeParam}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.EfeParamOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EfeParam_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EfeParam_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.class, com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

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

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EfeParam_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.EfeParam getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.EfeParam build() {
        com.akdeniz.googleplaycrawler.GooglePlay.EfeParam result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.EfeParam buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.EfeParam result = new com.akdeniz.googleplaycrawler.GooglePlay.EfeParam(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.key_ = key_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.EfeParam) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.EfeParam)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.EfeParam other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.EfeParam.getDefaultInstance()) return this;
        if (other.hasKey()) {
          setKey(other.getKey());
        }
        if (other.hasValue()) {
          bitField0_ |= 0x00000002;
          value_ = other.value_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 key = 1;
      private int key_ ;
      /**
       * <code>optional int32 key = 1;</code>
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 key = 1;</code>
       */
      public int getKey() {
        return key_;
      }
      /**
       * <code>optional int32 key = 1;</code>
       */
      public Builder setKey(int value) {
        bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 key = 1;</code>
       */
      public Builder clearKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        key_ = 0;
        onChanged();
        return this;
      }

      // optional string value = 2;
      private java.lang.Object value_ = "";
      /**
       * <code>optional string value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          value_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder setValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:EfeParam)
    }

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

    // @@protoc_insertion_point(class_scope:EfeParam)
  }

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

    // optional int32 inputField = 1;
    /**
     * <code>optional int32 inputField = 1;</code>
     */
    boolean hasInputField();
    /**
     * <code>optional int32 inputField = 1;</code>
     */
    int getInputField();

    // optional string errorMessage = 2;
    /**
     * <code>optional string errorMessage = 2;</code>
     */
    boolean hasErrorMessage();
    /**
     * <code>optional string errorMessage = 2;</code>
     */
    java.lang.String getErrorMessage();
    /**
     * <code>optional string errorMessage = 2;</code>
     */
    com.google.protobuf.ByteString
        getErrorMessageBytes();
  }
  /**
   * Protobuf type {@code InputValidationError}
   */
  public static final class InputValidationError extends
      com.google.protobuf.GeneratedMessage
      implements InputValidationErrorOrBuilder {
    // Use InputValidationError.newBuilder() to construct.
    private InputValidationError(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private InputValidationError(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public InputValidationError getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private InputValidationError(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              inputField_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              errorMessage_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_InputValidationError_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_InputValidationError_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.class, com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 inputField = 1;
    public static final int INPUTFIELD_FIELD_NUMBER = 1;
    private int inputField_;
    /**
     * <code>optional int32 inputField = 1;</code>
     */
    public boolean hasInputField() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 inputField = 1;</code>
     */
    public int getInputField() {
      return inputField_;
    }

    // optional string errorMessage = 2;
    public static final int ERRORMESSAGE_FIELD_NUMBER = 2;
    private java.lang.Object errorMessage_;
    /**
     * <code>optional string errorMessage = 2;</code>
     */
    public boolean hasErrorMessage() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string errorMessage = 2;</code>
     */
    public java.lang.String getErrorMessage() {
      java.lang.Object ref = errorMessage_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          errorMessage_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string errorMessage = 2;</code>
     */
    public com.google.protobuf.ByteString
        getErrorMessageBytes() {
      java.lang.Object ref = errorMessage_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        errorMessage_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

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

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

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

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code InputValidationError}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.InputValidationErrorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_InputValidationError_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_InputValidationError_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.class, com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

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

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_InputValidationError_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError build() {
        com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError result = new com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.inputField_ = inputField_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.errorMessage_ = errorMessage_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.InputValidationError.getDefaultInstance()) return this;
        if (other.hasInputField()) {
          setInputField(other.getInputField());
        }
        if (other.hasErrorMessage()) {
          bitField0_ |= 0x00000002;
          errorMessage_ = other.errorMessage_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 inputField = 1;
      private int inputField_ ;
      /**
       * <code>optional int32 inputField = 1;</code>
       */
      public boolean hasInputField() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 inputField = 1;</code>
       */
      public int getInputField() {
        return inputField_;
      }
      /**
       * <code>optional int32 inputField = 1;</code>
       */
      public Builder setInputField(int value) {
        bitField0_ |= 0x00000001;
        inputField_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 inputField = 1;</code>
       */
      public Builder clearInputField() {
        bitField0_ = (bitField0_ & ~0x00000001);
        inputField_ = 0;
        onChanged();
        return this;
      }

      // optional string errorMessage = 2;
      private java.lang.Object errorMessage_ = "";
      /**
       * <code>optional string errorMessage = 2;</code>
       */
      public boolean hasErrorMessage() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string errorMessage = 2;</code>
       */
      public java.lang.String getErrorMessage() {
        java.lang.Object ref = errorMessage_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          errorMessage_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string errorMessage = 2;</code>
       */
      public com.google.protobuf.ByteString
          getErrorMessageBytes() {
        java.lang.Object ref = errorMessage_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          errorMessage_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string errorMessage = 2;</code>
       */
      public Builder setErrorMessage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        errorMessage_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string errorMessage = 2;</code>
       */
      public Builder clearErrorMessage() {
        bitField0_ = (bitField0_ & ~0x00000002);
        errorMessage_ = getDefaultInstance().getErrorMessage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string errorMessage = 2;</code>
       */
      public Builder setErrorMessageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        errorMessage_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:InputValidationError)
    }

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

    // @@protoc_insertion_point(class_scope:InputValidationError)
  }

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

    // optional string instrumentId = 1;
    /**
     * <code>optional string instrumentId = 1;</code>
     */
    boolean hasInstrumentId();
    /**
     * <code>optional string instrumentId = 1;</code>
     */
    java.lang.String getInstrumentId();
    /**
     * <code>optional string instrumentId = 1;</code>
     */
    com.google.protobuf.ByteString
        getInstrumentIdBytes();

    // optional .Address billingAddress = 2;
    /**
     * <code>optional .Address billingAddress = 2;</code>
     */
    boolean hasBillingAddress();
    /**
     * <code>optional .Address billingAddress = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Address getBillingAddress();
    /**
     * <code>optional .Address billingAddress = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AddressOrBuilder getBillingAddressOrBuilder();

    // optional .CreditCardInstrument creditCard = 3;
    /**
     * <code>optional .CreditCardInstrument creditCard = 3;</code>
     */
    boolean hasCreditCard();
    /**
     * <code>optional .CreditCardInstrument creditCard = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument getCreditCard();
    /**
     * <code>optional .CreditCardInstrument creditCard = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrumentOrBuilder getCreditCardOrBuilder();

    // optional .CarrierBillingInstrument carrierBilling = 4;
    /**
     * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
     */
    boolean hasCarrierBilling();
    /**
     * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument getCarrierBilling();
    /**
     * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentOrBuilder getCarrierBillingOrBuilder();

    // optional .BillingAddressSpec billingAddressSpec = 5;
    /**
     * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
     */
    boolean hasBillingAddressSpec();
    /**
     * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec getBillingAddressSpec();
    /**
     * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpecOrBuilder getBillingAddressSpecOrBuilder();

    // optional int32 instrumentFamily = 6;
    /**
     * <code>optional int32 instrumentFamily = 6;</code>
     */
    boolean hasInstrumentFamily();
    /**
     * <code>optional int32 instrumentFamily = 6;</code>
     */
    int getInstrumentFamily();

    // optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;
    /**
     * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
     */
    boolean hasCarrierBillingStatus();
    /**
     * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus getCarrierBillingStatus();
    /**
     * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatusOrBuilder getCarrierBillingStatusOrBuilder();

    // optional string displayTitle = 8;
    /**
     * <code>optional string displayTitle = 8;</code>
     */
    boolean hasDisplayTitle();
    /**
     * <code>optional string displayTitle = 8;</code>
     */
    java.lang.String getDisplayTitle();
    /**
     * <code>optional string displayTitle = 8;</code>
     */
    com.google.protobuf.ByteString
        getDisplayTitleBytes();
  }
  /**
   * Protobuf type {@code Instrument}
   */
  public static final class Instrument extends
      com.google.protobuf.GeneratedMessage
      implements InstrumentOrBuilder {
    // Use Instrument.newBuilder() to construct.
    private Instrument(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Instrument(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public Instrument getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Instrument(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              instrumentId_ = input.readBytes();
              break;
            }
            case 18: {
              com.akdeniz.googleplaycrawler.GooglePlay.Address.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = billingAddress_.toBuilder();
              }
              billingAddress_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Address.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(billingAddress_);
                billingAddress_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = creditCard_.toBuilder();
              }
              creditCard_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(creditCard_);
                creditCard_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 34: {
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = carrierBilling_.toBuilder();
              }
              carrierBilling_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(carrierBilling_);
                carrierBilling_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 42: {
              com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = billingAddressSpec_.toBuilder();
              }
              billingAddressSpec_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(billingAddressSpec_);
                billingAddressSpec_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              instrumentFamily_ = input.readInt32();
              break;
            }
            case 58: {
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = carrierBillingStatus_.toBuilder();
              }
              carrierBillingStatus_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(carrierBillingStatus_);
                carrierBillingStatus_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 66: {
              bitField0_ |= 0x00000080;
              displayTitle_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Instrument_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Instrument_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Instrument.class, com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string instrumentId = 1;
    public static final int INSTRUMENTID_FIELD_NUMBER = 1;
    private java.lang.Object instrumentId_;
    /**
     * <code>optional string instrumentId = 1;</code>
     */
    public boolean hasInstrumentId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string instrumentId = 1;</code>
     */
    public java.lang.String getInstrumentId() {
      java.lang.Object ref = instrumentId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          instrumentId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string instrumentId = 1;</code>
     */
    public com.google.protobuf.ByteString
        getInstrumentIdBytes() {
      java.lang.Object ref = instrumentId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        instrumentId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .Address billingAddress = 2;
    public static final int BILLINGADDRESS_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.Address billingAddress_;
    /**
     * <code>optional .Address billingAddress = 2;</code>
     */
    public boolean hasBillingAddress() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .Address billingAddress = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Address getBillingAddress() {
      return billingAddress_;
    }
    /**
     * <code>optional .Address billingAddress = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AddressOrBuilder getBillingAddressOrBuilder() {
      return billingAddress_;
    }

    // optional .CreditCardInstrument creditCard = 3;
    public static final int CREDITCARD_FIELD_NUMBER = 3;
    private com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument creditCard_;
    /**
     * <code>optional .CreditCardInstrument creditCard = 3;</code>
     */
    public boolean hasCreditCard() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .CreditCardInstrument creditCard = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument getCreditCard() {
      return creditCard_;
    }
    /**
     * <code>optional .CreditCardInstrument creditCard = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrumentOrBuilder getCreditCardOrBuilder() {
      return creditCard_;
    }

    // optional .CarrierBillingInstrument carrierBilling = 4;
    public static final int CARRIERBILLING_FIELD_NUMBER = 4;
    private com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument carrierBilling_;
    /**
     * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
     */
    public boolean hasCarrierBilling() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument getCarrierBilling() {
      return carrierBilling_;
    }
    /**
     * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentOrBuilder getCarrierBillingOrBuilder() {
      return carrierBilling_;
    }

    // optional .BillingAddressSpec billingAddressSpec = 5;
    public static final int BILLINGADDRESSSPEC_FIELD_NUMBER = 5;
    private com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec billingAddressSpec_;
    /**
     * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
     */
    public boolean hasBillingAddressSpec() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec getBillingAddressSpec() {
      return billingAddressSpec_;
    }
    /**
     * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpecOrBuilder getBillingAddressSpecOrBuilder() {
      return billingAddressSpec_;
    }

    // optional int32 instrumentFamily = 6;
    public static final int INSTRUMENTFAMILY_FIELD_NUMBER = 6;
    private int instrumentFamily_;
    /**
     * <code>optional int32 instrumentFamily = 6;</code>
     */
    public boolean hasInstrumentFamily() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional int32 instrumentFamily = 6;</code>
     */
    public int getInstrumentFamily() {
      return instrumentFamily_;
    }

    // optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;
    public static final int CARRIERBILLINGSTATUS_FIELD_NUMBER = 7;
    private com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus carrierBillingStatus_;
    /**
     * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
     */
    public boolean hasCarrierBillingStatus() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus getCarrierBillingStatus() {
      return carrierBillingStatus_;
    }
    /**
     * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatusOrBuilder getCarrierBillingStatusOrBuilder() {
      return carrierBillingStatus_;
    }

    // optional string displayTitle = 8;
    public static final int DISPLAYTITLE_FIELD_NUMBER = 8;
    private java.lang.Object displayTitle_;
    /**
     * <code>optional string displayTitle = 8;</code>
     */
    public boolean hasDisplayTitle() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional string displayTitle = 8;</code>
     */
    public java.lang.String getDisplayTitle() {
      java.lang.Object ref = displayTitle_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          displayTitle_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string displayTitle = 8;</code>
     */
    public com.google.protobuf.ByteString
        getDisplayTitleBytes() {
      java.lang.Object ref = displayTitle_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        displayTitle_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      instrumentId_ = "";
      billingAddress_ = com.akdeniz.googleplaycrawler.GooglePlay.Address.getDefaultInstance();
      creditCard_ = com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.getDefaultInstance();
      carrierBilling_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.getDefaultInstance();
      billingAddressSpec_ = com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.getDefaultInstance();
      instrumentFamily_ = 0;
      carrierBillingStatus_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.getDefaultInstance();
      displayTitle_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getInstrumentIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, billingAddress_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, creditCard_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, carrierBilling_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(5, billingAddressSpec_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt32(6, instrumentFamily_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(7, carrierBillingStatus_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBytes(8, getDisplayTitleBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getInstrumentIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, billingAddress_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, creditCard_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, carrierBilling_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, billingAddressSpec_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, instrumentFamily_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, carrierBillingStatus_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getDisplayTitleBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.Instrument parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Instrument parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Instrument parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Instrument parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Instrument parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Instrument parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Instrument parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Instrument parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Instrument parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Instrument parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Instrument prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Instrument}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.InstrumentOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Instrument_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Instrument_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Instrument.class, com.akdeniz.googleplaycrawler.GooglePlay.Instrument.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Instrument.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        instrumentId_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        if (billingAddressBuilder_ == null) {
          billingAddress_ = com.akdeniz.googleplaycrawler.GooglePlay.Address.getDefaultInstance();
        } else {
          billingAddressBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (creditCardBuilder_ == null) {
          creditCard_ = com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.getDefaultInstance();
        } else {
          creditCardBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (carrierBillingBuilder_ == null) {
          carrierBilling_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.getDefaultInstance();
        } else {
          carrierBillingBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (billingAddressSpecBuilder_ == null) {
          billingAddressSpec_ = com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.getDefaultInstance();
        } else {
          billingAddressSpecBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        instrumentFamily_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        if (carrierBillingStatusBuilder_ == null) {
          carrierBillingStatus_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.getDefaultInstance();
        } else {
          carrierBillingStatusBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        displayTitle_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Instrument_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Instrument getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Instrument.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Instrument build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Instrument result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Instrument buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Instrument result = new com.akdeniz.googleplaycrawler.GooglePlay.Instrument(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.instrumentId_ = instrumentId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (billingAddressBuilder_ == null) {
          result.billingAddress_ = billingAddress_;
        } else {
          result.billingAddress_ = billingAddressBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (creditCardBuilder_ == null) {
          result.creditCard_ = creditCard_;
        } else {
          result.creditCard_ = creditCardBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (carrierBillingBuilder_ == null) {
          result.carrierBilling_ = carrierBilling_;
        } else {
          result.carrierBilling_ = carrierBillingBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (billingAddressSpecBuilder_ == null) {
          result.billingAddressSpec_ = billingAddressSpec_;
        } else {
          result.billingAddressSpec_ = billingAddressSpecBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.instrumentFamily_ = instrumentFamily_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (carrierBillingStatusBuilder_ == null) {
          result.carrierBillingStatus_ = carrierBillingStatus_;
        } else {
          result.carrierBillingStatus_ = carrierBillingStatusBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.displayTitle_ = displayTitle_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Instrument) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Instrument)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Instrument other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Instrument.getDefaultInstance()) return this;
        if (other.hasInstrumentId()) {
          bitField0_ |= 0x00000001;
          instrumentId_ = other.instrumentId_;
          onChanged();
        }
        if (other.hasBillingAddress()) {
          mergeBillingAddress(other.getBillingAddress());
        }
        if (other.hasCreditCard()) {
          mergeCreditCard(other.getCreditCard());
        }
        if (other.hasCarrierBilling()) {
          mergeCarrierBilling(other.getCarrierBilling());
        }
        if (other.hasBillingAddressSpec()) {
          mergeBillingAddressSpec(other.getBillingAddressSpec());
        }
        if (other.hasInstrumentFamily()) {
          setInstrumentFamily(other.getInstrumentFamily());
        }
        if (other.hasCarrierBillingStatus()) {
          mergeCarrierBillingStatus(other.getCarrierBillingStatus());
        }
        if (other.hasDisplayTitle()) {
          bitField0_ |= 0x00000080;
          displayTitle_ = other.displayTitle_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string instrumentId = 1;
      private java.lang.Object instrumentId_ = "";
      /**
       * <code>optional string instrumentId = 1;</code>
       */
      public boolean hasInstrumentId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string instrumentId = 1;</code>
       */
      public java.lang.String getInstrumentId() {
        java.lang.Object ref = instrumentId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          instrumentId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string instrumentId = 1;</code>
       */
      public com.google.protobuf.ByteString
          getInstrumentIdBytes() {
        java.lang.Object ref = instrumentId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          instrumentId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string instrumentId = 1;</code>
       */
      public Builder setInstrumentId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        instrumentId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string instrumentId = 1;</code>
       */
      public Builder clearInstrumentId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        instrumentId_ = getDefaultInstance().getInstrumentId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string instrumentId = 1;</code>
       */
      public Builder setInstrumentIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        instrumentId_ = value;
        onChanged();
        return this;
      }

      // optional .Address billingAddress = 2;
      private com.akdeniz.googleplaycrawler.GooglePlay.Address billingAddress_ = com.akdeniz.googleplaycrawler.GooglePlay.Address.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Address, com.akdeniz.googleplaycrawler.GooglePlay.Address.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AddressOrBuilder> billingAddressBuilder_;
      /**
       * <code>optional .Address billingAddress = 2;</code>
       */
      public boolean hasBillingAddress() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .Address billingAddress = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Address getBillingAddress() {
        if (billingAddressBuilder_ == null) {
          return billingAddress_;
        } else {
          return billingAddressBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Address billingAddress = 2;</code>
       */
      public Builder setBillingAddress(com.akdeniz.googleplaycrawler.GooglePlay.Address value) {
        if (billingAddressBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          billingAddress_ = value;
          onChanged();
        } else {
          billingAddressBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .Address billingAddress = 2;</code>
       */
      public Builder setBillingAddress(
          com.akdeniz.googleplaycrawler.GooglePlay.Address.Builder builderForValue) {
        if (billingAddressBuilder_ == null) {
          billingAddress_ = builderForValue.build();
          onChanged();
        } else {
          billingAddressBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .Address billingAddress = 2;</code>
       */
      public Builder mergeBillingAddress(com.akdeniz.googleplaycrawler.GooglePlay.Address value) {
        if (billingAddressBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              billingAddress_ != com.akdeniz.googleplaycrawler.GooglePlay.Address.getDefaultInstance()) {
            billingAddress_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Address.newBuilder(billingAddress_).mergeFrom(value).buildPartial();
          } else {
            billingAddress_ = value;
          }
          onChanged();
        } else {
          billingAddressBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .Address billingAddress = 2;</code>
       */
      public Builder clearBillingAddress() {
        if (billingAddressBuilder_ == null) {
          billingAddress_ = com.akdeniz.googleplaycrawler.GooglePlay.Address.getDefaultInstance();
          onChanged();
        } else {
          billingAddressBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .Address billingAddress = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Address.Builder getBillingAddressBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getBillingAddressFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Address billingAddress = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AddressOrBuilder getBillingAddressOrBuilder() {
        if (billingAddressBuilder_ != null) {
          return billingAddressBuilder_.getMessageOrBuilder();
        } else {
          return billingAddress_;
        }
      }
      /**
       * <code>optional .Address billingAddress = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Address, com.akdeniz.googleplaycrawler.GooglePlay.Address.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AddressOrBuilder> 
          getBillingAddressFieldBuilder() {
        if (billingAddressBuilder_ == null) {
          billingAddressBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Address, com.akdeniz.googleplaycrawler.GooglePlay.Address.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AddressOrBuilder>(
                  billingAddress_,
                  getParentForChildren(),
                  isClean());
          billingAddress_ = null;
        }
        return billingAddressBuilder_;
      }

      // optional .CreditCardInstrument creditCard = 3;
      private com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument creditCard_ = com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument, com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrumentOrBuilder> creditCardBuilder_;
      /**
       * <code>optional .CreditCardInstrument creditCard = 3;</code>
       */
      public boolean hasCreditCard() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .CreditCardInstrument creditCard = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument getCreditCard() {
        if (creditCardBuilder_ == null) {
          return creditCard_;
        } else {
          return creditCardBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .CreditCardInstrument creditCard = 3;</code>
       */
      public Builder setCreditCard(com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument value) {
        if (creditCardBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          creditCard_ = value;
          onChanged();
        } else {
          creditCardBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .CreditCardInstrument creditCard = 3;</code>
       */
      public Builder setCreditCard(
          com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.Builder builderForValue) {
        if (creditCardBuilder_ == null) {
          creditCard_ = builderForValue.build();
          onChanged();
        } else {
          creditCardBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .CreditCardInstrument creditCard = 3;</code>
       */
      public Builder mergeCreditCard(com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument value) {
        if (creditCardBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              creditCard_ != com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.getDefaultInstance()) {
            creditCard_ =
              com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.newBuilder(creditCard_).mergeFrom(value).buildPartial();
          } else {
            creditCard_ = value;
          }
          onChanged();
        } else {
          creditCardBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .CreditCardInstrument creditCard = 3;</code>
       */
      public Builder clearCreditCard() {
        if (creditCardBuilder_ == null) {
          creditCard_ = com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.getDefaultInstance();
          onChanged();
        } else {
          creditCardBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .CreditCardInstrument creditCard = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.Builder getCreditCardBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getCreditCardFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .CreditCardInstrument creditCard = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrumentOrBuilder getCreditCardOrBuilder() {
        if (creditCardBuilder_ != null) {
          return creditCardBuilder_.getMessageOrBuilder();
        } else {
          return creditCard_;
        }
      }
      /**
       * <code>optional .CreditCardInstrument creditCard = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument, com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrumentOrBuilder> 
          getCreditCardFieldBuilder() {
        if (creditCardBuilder_ == null) {
          creditCardBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument, com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CreditCardInstrumentOrBuilder>(
                  creditCard_,
                  getParentForChildren(),
                  isClean());
          creditCard_ = null;
        }
        return creditCardBuilder_;
      }

      // optional .CarrierBillingInstrument carrierBilling = 4;
      private com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument carrierBilling_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentOrBuilder> carrierBillingBuilder_;
      /**
       * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
       */
      public boolean hasCarrierBilling() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument getCarrierBilling() {
        if (carrierBillingBuilder_ == null) {
          return carrierBilling_;
        } else {
          return carrierBillingBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
       */
      public Builder setCarrierBilling(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument value) {
        if (carrierBillingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          carrierBilling_ = value;
          onChanged();
        } else {
          carrierBillingBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
       */
      public Builder setCarrierBilling(
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.Builder builderForValue) {
        if (carrierBillingBuilder_ == null) {
          carrierBilling_ = builderForValue.build();
          onChanged();
        } else {
          carrierBillingBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
       */
      public Builder mergeCarrierBilling(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument value) {
        if (carrierBillingBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              carrierBilling_ != com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.getDefaultInstance()) {
            carrierBilling_ =
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.newBuilder(carrierBilling_).mergeFrom(value).buildPartial();
          } else {
            carrierBilling_ = value;
          }
          onChanged();
        } else {
          carrierBillingBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
       */
      public Builder clearCarrierBilling() {
        if (carrierBillingBuilder_ == null) {
          carrierBilling_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.getDefaultInstance();
          onChanged();
        } else {
          carrierBillingBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.Builder getCarrierBillingBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getCarrierBillingFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentOrBuilder getCarrierBillingOrBuilder() {
        if (carrierBillingBuilder_ != null) {
          return carrierBillingBuilder_.getMessageOrBuilder();
        } else {
          return carrierBilling_;
        }
      }
      /**
       * <code>optional .CarrierBillingInstrument carrierBilling = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentOrBuilder> 
          getCarrierBillingFieldBuilder() {
        if (carrierBillingBuilder_ == null) {
          carrierBillingBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrument.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentOrBuilder>(
                  carrierBilling_,
                  getParentForChildren(),
                  isClean());
          carrierBilling_ = null;
        }
        return carrierBillingBuilder_;
      }

      // optional .BillingAddressSpec billingAddressSpec = 5;
      private com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec billingAddressSpec_ = com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec, com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpecOrBuilder> billingAddressSpecBuilder_;
      /**
       * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
       */
      public boolean hasBillingAddressSpec() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec getBillingAddressSpec() {
        if (billingAddressSpecBuilder_ == null) {
          return billingAddressSpec_;
        } else {
          return billingAddressSpecBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
       */
      public Builder setBillingAddressSpec(com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec value) {
        if (billingAddressSpecBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          billingAddressSpec_ = value;
          onChanged();
        } else {
          billingAddressSpecBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
       */
      public Builder setBillingAddressSpec(
          com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.Builder builderForValue) {
        if (billingAddressSpecBuilder_ == null) {
          billingAddressSpec_ = builderForValue.build();
          onChanged();
        } else {
          billingAddressSpecBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
       */
      public Builder mergeBillingAddressSpec(com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec value) {
        if (billingAddressSpecBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              billingAddressSpec_ != com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.getDefaultInstance()) {
            billingAddressSpec_ =
              com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.newBuilder(billingAddressSpec_).mergeFrom(value).buildPartial();
          } else {
            billingAddressSpec_ = value;
          }
          onChanged();
        } else {
          billingAddressSpecBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
       */
      public Builder clearBillingAddressSpec() {
        if (billingAddressSpecBuilder_ == null) {
          billingAddressSpec_ = com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.getDefaultInstance();
          onChanged();
        } else {
          billingAddressSpecBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.Builder getBillingAddressSpecBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getBillingAddressSpecFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpecOrBuilder getBillingAddressSpecOrBuilder() {
        if (billingAddressSpecBuilder_ != null) {
          return billingAddressSpecBuilder_.getMessageOrBuilder();
        } else {
          return billingAddressSpec_;
        }
      }
      /**
       * <code>optional .BillingAddressSpec billingAddressSpec = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec, com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpecOrBuilder> 
          getBillingAddressSpecFieldBuilder() {
        if (billingAddressSpecBuilder_ == null) {
          billingAddressSpecBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec, com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpec.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BillingAddressSpecOrBuilder>(
                  billingAddressSpec_,
                  getParentForChildren(),
                  isClean());
          billingAddressSpec_ = null;
        }
        return billingAddressSpecBuilder_;
      }

      // optional int32 instrumentFamily = 6;
      private int instrumentFamily_ ;
      /**
       * <code>optional int32 instrumentFamily = 6;</code>
       */
      public boolean hasInstrumentFamily() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int32 instrumentFamily = 6;</code>
       */
      public int getInstrumentFamily() {
        return instrumentFamily_;
      }
      /**
       * <code>optional int32 instrumentFamily = 6;</code>
       */
      public Builder setInstrumentFamily(int value) {
        bitField0_ |= 0x00000020;
        instrumentFamily_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 instrumentFamily = 6;</code>
       */
      public Builder clearInstrumentFamily() {
        bitField0_ = (bitField0_ & ~0x00000020);
        instrumentFamily_ = 0;
        onChanged();
        return this;
      }

      // optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;
      private com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus carrierBillingStatus_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatusOrBuilder> carrierBillingStatusBuilder_;
      /**
       * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
       */
      public boolean hasCarrierBillingStatus() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus getCarrierBillingStatus() {
        if (carrierBillingStatusBuilder_ == null) {
          return carrierBillingStatus_;
        } else {
          return carrierBillingStatusBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
       */
      public Builder setCarrierBillingStatus(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus value) {
        if (carrierBillingStatusBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          carrierBillingStatus_ = value;
          onChanged();
        } else {
          carrierBillingStatusBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
       */
      public Builder setCarrierBillingStatus(
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.Builder builderForValue) {
        if (carrierBillingStatusBuilder_ == null) {
          carrierBillingStatus_ = builderForValue.build();
          onChanged();
        } else {
          carrierBillingStatusBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
       */
      public Builder mergeCarrierBillingStatus(com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus value) {
        if (carrierBillingStatusBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              carrierBillingStatus_ != com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.getDefaultInstance()) {
            carrierBillingStatus_ =
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.newBuilder(carrierBillingStatus_).mergeFrom(value).buildPartial();
          } else {
            carrierBillingStatus_ = value;
          }
          onChanged();
        } else {
          carrierBillingStatusBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
       */
      public Builder clearCarrierBillingStatus() {
        if (carrierBillingStatusBuilder_ == null) {
          carrierBillingStatus_ = com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.getDefaultInstance();
          onChanged();
        } else {
          carrierBillingStatusBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.Builder getCarrierBillingStatusBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getCarrierBillingStatusFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatusOrBuilder getCarrierBillingStatusOrBuilder() {
        if (carrierBillingStatusBuilder_ != null) {
          return carrierBillingStatusBuilder_.getMessageOrBuilder();
        } else {
          return carrierBillingStatus_;
        }
      }
      /**
       * <code>optional .CarrierBillingInstrumentStatus carrierBillingStatus = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatusOrBuilder> 
          getCarrierBillingStatusFieldBuilder() {
        if (carrierBillingStatusBuilder_ == null) {
          carrierBillingStatusBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatus.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CarrierBillingInstrumentStatusOrBuilder>(
                  carrierBillingStatus_,
                  getParentForChildren(),
                  isClean());
          carrierBillingStatus_ = null;
        }
        return carrierBillingStatusBuilder_;
      }

      // optional string displayTitle = 8;
      private java.lang.Object displayTitle_ = "";
      /**
       * <code>optional string displayTitle = 8;</code>
       */
      public boolean hasDisplayTitle() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string displayTitle = 8;</code>
       */
      public java.lang.String getDisplayTitle() {
        java.lang.Object ref = displayTitle_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          displayTitle_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string displayTitle = 8;</code>
       */
      public com.google.protobuf.ByteString
          getDisplayTitleBytes() {
        java.lang.Object ref = displayTitle_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          displayTitle_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string displayTitle = 8;</code>
       */
      public Builder setDisplayTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        displayTitle_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string displayTitle = 8;</code>
       */
      public Builder clearDisplayTitle() {
        bitField0_ = (bitField0_ & ~0x00000080);
        displayTitle_ = getDefaultInstance().getDisplayTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string displayTitle = 8;</code>
       */
      public Builder setDisplayTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        displayTitle_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Instrument)
    }

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

    // @@protoc_insertion_point(class_scope:Instrument)
  }

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

    // optional string prompt = 1;
    /**
     * <code>optional string prompt = 1;</code>
     */
    boolean hasPrompt();
    /**
     * <code>optional string prompt = 1;</code>
     */
    java.lang.String getPrompt();
    /**
     * <code>optional string prompt = 1;</code>
     */
    com.google.protobuf.ByteString
        getPromptBytes();

    // optional string forgotPasswordUrl = 2;
    /**
     * <code>optional string forgotPasswordUrl = 2;</code>
     */
    boolean hasForgotPasswordUrl();
    /**
     * <code>optional string forgotPasswordUrl = 2;</code>
     */
    java.lang.String getForgotPasswordUrl();
    /**
     * <code>optional string forgotPasswordUrl = 2;</code>
     */
    com.google.protobuf.ByteString
        getForgotPasswordUrlBytes();
  }
  /**
   * Protobuf type {@code PasswordPrompt}
   */
  public static final class PasswordPrompt extends
      com.google.protobuf.GeneratedMessage
      implements PasswordPromptOrBuilder {
    // Use PasswordPrompt.newBuilder() to construct.
    private PasswordPrompt(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PasswordPrompt(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public PasswordPrompt getDefaultInstanceForType() {
      return defaultInstance;
    }

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

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PasswordPrompt_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.class, com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string prompt = 1;
    public static final int PROMPT_FIELD_NUMBER = 1;
    private java.lang.Object prompt_;
    /**
     * <code>optional string prompt = 1;</code>
     */
    public boolean hasPrompt() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string prompt = 1;</code>
     */
    public java.lang.String getPrompt() {
      java.lang.Object ref = prompt_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          prompt_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string prompt = 1;</code>
     */
    public com.google.protobuf.ByteString
        getPromptBytes() {
      java.lang.Object ref = prompt_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        prompt_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string forgotPasswordUrl = 2;
    public static final int FORGOTPASSWORDURL_FIELD_NUMBER = 2;
    private java.lang.Object forgotPasswordUrl_;
    /**
     * <code>optional string forgotPasswordUrl = 2;</code>
     */
    public boolean hasForgotPasswordUrl() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string forgotPasswordUrl = 2;</code>
     */
    public java.lang.String getForgotPasswordUrl() {
      java.lang.Object ref = forgotPasswordUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          forgotPasswordUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string forgotPasswordUrl = 2;</code>
     */
    public com.google.protobuf.ByteString
        getForgotPasswordUrlBytes() {
      java.lang.Object ref = forgotPasswordUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        forgotPasswordUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

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

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

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

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code PasswordPrompt}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.PasswordPromptOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PasswordPrompt_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PasswordPrompt_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.class, com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

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

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PasswordPrompt_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt build() {
        com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt result = new com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.prompt_ = prompt_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.forgotPasswordUrl_ = forgotPasswordUrl_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.PasswordPrompt.getDefaultInstance()) return this;
        if (other.hasPrompt()) {
          bitField0_ |= 0x00000001;
          prompt_ = other.prompt_;
          onChanged();
        }
        if (other.hasForgotPasswordUrl()) {
          bitField0_ |= 0x00000002;
          forgotPasswordUrl_ = other.forgotPasswordUrl_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string prompt = 1;
      private java.lang.Object prompt_ = "";
      /**
       * <code>optional string prompt = 1;</code>
       */
      public boolean hasPrompt() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string prompt = 1;</code>
       */
      public java.lang.String getPrompt() {
        java.lang.Object ref = prompt_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          prompt_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string prompt = 1;</code>
       */
      public com.google.protobuf.ByteString
          getPromptBytes() {
        java.lang.Object ref = prompt_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          prompt_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string prompt = 1;</code>
       */
      public Builder setPrompt(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        prompt_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string prompt = 1;</code>
       */
      public Builder clearPrompt() {
        bitField0_ = (bitField0_ & ~0x00000001);
        prompt_ = getDefaultInstance().getPrompt();
        onChanged();
        return this;
      }
      /**
       * <code>optional string prompt = 1;</code>
       */
      public Builder setPromptBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        prompt_ = value;
        onChanged();
        return this;
      }

      // optional string forgotPasswordUrl = 2;
      private java.lang.Object forgotPasswordUrl_ = "";
      /**
       * <code>optional string forgotPasswordUrl = 2;</code>
       */
      public boolean hasForgotPasswordUrl() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string forgotPasswordUrl = 2;</code>
       */
      public java.lang.String getForgotPasswordUrl() {
        java.lang.Object ref = forgotPasswordUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          forgotPasswordUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string forgotPasswordUrl = 2;</code>
       */
      public com.google.protobuf.ByteString
          getForgotPasswordUrlBytes() {
        java.lang.Object ref = forgotPasswordUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          forgotPasswordUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string forgotPasswordUrl = 2;</code>
       */
      public Builder setForgotPasswordUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        forgotPasswordUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string forgotPasswordUrl = 2;</code>
       */
      public Builder clearForgotPasswordUrl() {
        bitField0_ = (bitField0_ & ~0x00000002);
        forgotPasswordUrl_ = getDefaultInstance().getForgotPasswordUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string forgotPasswordUrl = 2;</code>
       */
      public Builder setForgotPasswordUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        forgotPasswordUrl_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:PasswordPrompt)
    }

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

    // @@protoc_insertion_point(class_scope:PasswordPrompt)
  }

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

    // optional string browseUrl = 1;
    /**
     * <code>optional string browseUrl = 1;</code>
     */
    boolean hasBrowseUrl();
    /**
     * <code>optional string browseUrl = 1;</code>
     */
    java.lang.String getBrowseUrl();
    /**
     * <code>optional string browseUrl = 1;</code>
     */
    com.google.protobuf.ByteString
        getBrowseUrlBytes();

    // optional string nextPageUrl = 2;
    /**
     * <code>optional string nextPageUrl = 2;</code>
     */
    boolean hasNextPageUrl();
    /**
     * <code>optional string nextPageUrl = 2;</code>
     */
    java.lang.String getNextPageUrl();
    /**
     * <code>optional string nextPageUrl = 2;</code>
     */
    com.google.protobuf.ByteString
        getNextPageUrlBytes();

    // optional double relevance = 3;
    /**
     * <code>optional double relevance = 3;</code>
     */
    boolean hasRelevance();
    /**
     * <code>optional double relevance = 3;</code>
     */
    double getRelevance();

    // optional int64 estimatedResults = 4;
    /**
     * <code>optional int64 estimatedResults = 4;</code>
     */
    boolean hasEstimatedResults();
    /**
     * <code>optional int64 estimatedResults = 4;</code>
     */
    long getEstimatedResults();

    // optional string analyticsCookie = 5;
    /**
     * <code>optional string analyticsCookie = 5;</code>
     */
    boolean hasAnalyticsCookie();
    /**
     * <code>optional string analyticsCookie = 5;</code>
     */
    java.lang.String getAnalyticsCookie();
    /**
     * <code>optional string analyticsCookie = 5;</code>
     */
    com.google.protobuf.ByteString
        getAnalyticsCookieBytes();

    // optional bool ordered = 6;
    /**
     * <code>optional bool ordered = 6;</code>
     */
    boolean hasOrdered();
    /**
     * <code>optional bool ordered = 6;</code>
     */
    boolean getOrdered();
  }
  /**
   * Protobuf type {@code ContainerMetadata}
   */
  public static final class ContainerMetadata extends
      com.google.protobuf.GeneratedMessage
      implements ContainerMetadataOrBuilder {
    // Use ContainerMetadata.newBuilder() to construct.
    private ContainerMetadata(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ContainerMetadata(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public ContainerMetadata getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ContainerMetadata(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              browseUrl_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              nextPageUrl_ = input.readBytes();
              break;
            }
            case 25: {
              bitField0_ |= 0x00000004;
              relevance_ = input.readDouble();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              estimatedResults_ = input.readInt64();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              analyticsCookie_ = input.readBytes();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              ordered_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ContainerMetadata_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ContainerMetadata_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.class, com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string browseUrl = 1;
    public static final int BROWSEURL_FIELD_NUMBER = 1;
    private java.lang.Object browseUrl_;
    /**
     * <code>optional string browseUrl = 1;</code>
     */
    public boolean hasBrowseUrl() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string browseUrl = 1;</code>
     */
    public java.lang.String getBrowseUrl() {
      java.lang.Object ref = browseUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          browseUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string browseUrl = 1;</code>
     */
    public com.google.protobuf.ByteString
        getBrowseUrlBytes() {
      java.lang.Object ref = browseUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        browseUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string nextPageUrl = 2;
    public static final int NEXTPAGEURL_FIELD_NUMBER = 2;
    private java.lang.Object nextPageUrl_;
    /**
     * <code>optional string nextPageUrl = 2;</code>
     */
    public boolean hasNextPageUrl() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string nextPageUrl = 2;</code>
     */
    public java.lang.String getNextPageUrl() {
      java.lang.Object ref = nextPageUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          nextPageUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string nextPageUrl = 2;</code>
     */
    public com.google.protobuf.ByteString
        getNextPageUrlBytes() {
      java.lang.Object ref = nextPageUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        nextPageUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional double relevance = 3;
    public static final int RELEVANCE_FIELD_NUMBER = 3;
    private double relevance_;
    /**
     * <code>optional double relevance = 3;</code>
     */
    public boolean hasRelevance() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional double relevance = 3;</code>
     */
    public double getRelevance() {
      return relevance_;
    }

    // optional int64 estimatedResults = 4;
    public static final int ESTIMATEDRESULTS_FIELD_NUMBER = 4;
    private long estimatedResults_;
    /**
     * <code>optional int64 estimatedResults = 4;</code>
     */
    public boolean hasEstimatedResults() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 estimatedResults = 4;</code>
     */
    public long getEstimatedResults() {
      return estimatedResults_;
    }

    // optional string analyticsCookie = 5;
    public static final int ANALYTICSCOOKIE_FIELD_NUMBER = 5;
    private java.lang.Object analyticsCookie_;
    /**
     * <code>optional string analyticsCookie = 5;</code>
     */
    public boolean hasAnalyticsCookie() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string analyticsCookie = 5;</code>
     */
    public java.lang.String getAnalyticsCookie() {
      java.lang.Object ref = analyticsCookie_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          analyticsCookie_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string analyticsCookie = 5;</code>
     */
    public com.google.protobuf.ByteString
        getAnalyticsCookieBytes() {
      java.lang.Object ref = analyticsCookie_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        analyticsCookie_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool ordered = 6;
    public static final int ORDERED_FIELD_NUMBER = 6;
    private boolean ordered_;
    /**
     * <code>optional bool ordered = 6;</code>
     */
    public boolean hasOrdered() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional bool ordered = 6;</code>
     */
    public boolean getOrdered() {
      return ordered_;
    }

    private void initFields() {
      browseUrl_ = "";
      nextPageUrl_ = "";
      relevance_ = 0D;
      estimatedResults_ = 0L;
      analyticsCookie_ = "";
      ordered_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getBrowseUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getNextPageUrlBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeDouble(3, relevance_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(4, estimatedResults_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getAnalyticsCookieBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(6, ordered_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getBrowseUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getNextPageUrlBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, relevance_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, estimatedResults_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getAnalyticsCookieBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, ordered_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code ContainerMetadata}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ContainerMetadata_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ContainerMetadata_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.class, com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        browseUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        nextPageUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        relevance_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000004);
        estimatedResults_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        analyticsCookie_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        ordered_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ContainerMetadata_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata build() {
        com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata result = new com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.browseUrl_ = browseUrl_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.nextPageUrl_ = nextPageUrl_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.relevance_ = relevance_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.estimatedResults_ = estimatedResults_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.analyticsCookie_ = analyticsCookie_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.ordered_ = ordered_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.getDefaultInstance()) return this;
        if (other.hasBrowseUrl()) {
          bitField0_ |= 0x00000001;
          browseUrl_ = other.browseUrl_;
          onChanged();
        }
        if (other.hasNextPageUrl()) {
          bitField0_ |= 0x00000002;
          nextPageUrl_ = other.nextPageUrl_;
          onChanged();
        }
        if (other.hasRelevance()) {
          setRelevance(other.getRelevance());
        }
        if (other.hasEstimatedResults()) {
          setEstimatedResults(other.getEstimatedResults());
        }
        if (other.hasAnalyticsCookie()) {
          bitField0_ |= 0x00000010;
          analyticsCookie_ = other.analyticsCookie_;
          onChanged();
        }
        if (other.hasOrdered()) {
          setOrdered(other.getOrdered());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string browseUrl = 1;
      private java.lang.Object browseUrl_ = "";
      /**
       * <code>optional string browseUrl = 1;</code>
       */
      public boolean hasBrowseUrl() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string browseUrl = 1;</code>
       */
      public java.lang.String getBrowseUrl() {
        java.lang.Object ref = browseUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          browseUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string browseUrl = 1;</code>
       */
      public com.google.protobuf.ByteString
          getBrowseUrlBytes() {
        java.lang.Object ref = browseUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          browseUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string browseUrl = 1;</code>
       */
      public Builder setBrowseUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        browseUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string browseUrl = 1;</code>
       */
      public Builder clearBrowseUrl() {
        bitField0_ = (bitField0_ & ~0x00000001);
        browseUrl_ = getDefaultInstance().getBrowseUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string browseUrl = 1;</code>
       */
      public Builder setBrowseUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        browseUrl_ = value;
        onChanged();
        return this;
      }

      // optional string nextPageUrl = 2;
      private java.lang.Object nextPageUrl_ = "";
      /**
       * <code>optional string nextPageUrl = 2;</code>
       */
      public boolean hasNextPageUrl() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string nextPageUrl = 2;</code>
       */
      public java.lang.String getNextPageUrl() {
        java.lang.Object ref = nextPageUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          nextPageUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string nextPageUrl = 2;</code>
       */
      public com.google.protobuf.ByteString
          getNextPageUrlBytes() {
        java.lang.Object ref = nextPageUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          nextPageUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string nextPageUrl = 2;</code>
       */
      public Builder setNextPageUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        nextPageUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string nextPageUrl = 2;</code>
       */
      public Builder clearNextPageUrl() {
        bitField0_ = (bitField0_ & ~0x00000002);
        nextPageUrl_ = getDefaultInstance().getNextPageUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string nextPageUrl = 2;</code>
       */
      public Builder setNextPageUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        nextPageUrl_ = value;
        onChanged();
        return this;
      }

      // optional double relevance = 3;
      private double relevance_ ;
      /**
       * <code>optional double relevance = 3;</code>
       */
      public boolean hasRelevance() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional double relevance = 3;</code>
       */
      public double getRelevance() {
        return relevance_;
      }
      /**
       * <code>optional double relevance = 3;</code>
       */
      public Builder setRelevance(double value) {
        bitField0_ |= 0x00000004;
        relevance_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional double relevance = 3;</code>
       */
      public Builder clearRelevance() {
        bitField0_ = (bitField0_ & ~0x00000004);
        relevance_ = 0D;
        onChanged();
        return this;
      }

      // optional int64 estimatedResults = 4;
      private long estimatedResults_ ;
      /**
       * <code>optional int64 estimatedResults = 4;</code>
       */
      public boolean hasEstimatedResults() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 estimatedResults = 4;</code>
       */
      public long getEstimatedResults() {
        return estimatedResults_;
      }
      /**
       * <code>optional int64 estimatedResults = 4;</code>
       */
      public Builder setEstimatedResults(long value) {
        bitField0_ |= 0x00000008;
        estimatedResults_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 estimatedResults = 4;</code>
       */
      public Builder clearEstimatedResults() {
        bitField0_ = (bitField0_ & ~0x00000008);
        estimatedResults_ = 0L;
        onChanged();
        return this;
      }

      // optional string analyticsCookie = 5;
      private java.lang.Object analyticsCookie_ = "";
      /**
       * <code>optional string analyticsCookie = 5;</code>
       */
      public boolean hasAnalyticsCookie() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string analyticsCookie = 5;</code>
       */
      public java.lang.String getAnalyticsCookie() {
        java.lang.Object ref = analyticsCookie_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          analyticsCookie_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string analyticsCookie = 5;</code>
       */
      public com.google.protobuf.ByteString
          getAnalyticsCookieBytes() {
        java.lang.Object ref = analyticsCookie_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          analyticsCookie_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string analyticsCookie = 5;</code>
       */
      public Builder setAnalyticsCookie(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        analyticsCookie_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string analyticsCookie = 5;</code>
       */
      public Builder clearAnalyticsCookie() {
        bitField0_ = (bitField0_ & ~0x00000010);
        analyticsCookie_ = getDefaultInstance().getAnalyticsCookie();
        onChanged();
        return this;
      }
      /**
       * <code>optional string analyticsCookie = 5;</code>
       */
      public Builder setAnalyticsCookieBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        analyticsCookie_ = value;
        onChanged();
        return this;
      }

      // optional bool ordered = 6;
      private boolean ordered_ ;
      /**
       * <code>optional bool ordered = 6;</code>
       */
      public boolean hasOrdered() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bool ordered = 6;</code>
       */
      public boolean getOrdered() {
        return ordered_;
      }
      /**
       * <code>optional bool ordered = 6;</code>
       */
      public Builder setOrdered(boolean value) {
        bitField0_ |= 0x00000020;
        ordered_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool ordered = 6;</code>
       */
      public Builder clearOrdered() {
        bitField0_ = (bitField0_ & ~0x00000020);
        ordered_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:ContainerMetadata)
    }

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

    // @@protoc_insertion_point(class_scope:ContainerMetadata)
  }

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

    // repeated string message = 1;
    /**
     * <code>repeated string message = 1;</code>
     */
    java.util.List<java.lang.String>
    getMessageList();
    /**
     * <code>repeated string message = 1;</code>
     */
    int getMessageCount();
    /**
     * <code>repeated string message = 1;</code>
     */
    java.lang.String getMessage(int index);
    /**
     * <code>repeated string message = 1;</code>
     */
    com.google.protobuf.ByteString
        getMessageBytes(int index);

    // repeated group Timing = 2 {
    /**
     * <code>repeated group Timing = 2 { ... }</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing> 
        getTimingList();
    /**
     * <code>repeated group Timing = 2 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing getTiming(int index);
    /**
     * <code>repeated group Timing = 2 { ... }</code>
     */
    int getTimingCount();
    /**
     * <code>repeated group Timing = 2 { ... }</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.TimingOrBuilder> 
        getTimingOrBuilderList();
    /**
     * <code>repeated group Timing = 2 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.TimingOrBuilder getTimingOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code DebugInfo}
   */
  public static final class DebugInfo extends
      com.google.protobuf.GeneratedMessage
      implements DebugInfoOrBuilder {
    // Use DebugInfo.newBuilder() to construct.
    private DebugInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DebugInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public DebugInfo getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DebugInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                message_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              message_.add(input.readBytes());
              break;
            }
            case 19: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                timing_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing>();
                mutable_bitField0_ |= 0x00000002;
              }
              timing_.add(input.readGroup(2, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.PARSER,
                  extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          message_ = new com.google.protobuf.UnmodifiableLazyStringList(message_);
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          timing_ = java.util.Collections.unmodifiableList(timing_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DebugInfo_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DebugInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.class, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Builder.class);
    }

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

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

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

      // optional string name = 3;
      /**
       * <code>optional string name = 3;</code>
       */
      boolean hasName();
      /**
       * <code>optional string name = 3;</code>
       */
      java.lang.String getName();
      /**
       * <code>optional string name = 3;</code>
       */
      com.google.protobuf.ByteString
          getNameBytes();

      // optional double timeInMs = 4;
      /**
       * <code>optional double timeInMs = 4;</code>
       */
      boolean hasTimeInMs();
      /**
       * <code>optional double timeInMs = 4;</code>
       */
      double getTimeInMs();
    }
    /**
     * Protobuf type {@code DebugInfo.Timing}
     */
    public static final class Timing extends
        com.google.protobuf.GeneratedMessage
        implements TimingOrBuilder {
      // Use Timing.newBuilder() to construct.
      private Timing(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Timing(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

      public Timing getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Timing(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 26: {
                bitField0_ |= 0x00000001;
                name_ = input.readBytes();
                break;
              }
              case 33: {
                bitField0_ |= 0x00000002;
                timeInMs_ = input.readDouble();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DebugInfo_Timing_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DebugInfo_Timing_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.class, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.Builder.class);
      }

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

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

      private int bitField0_;
      // optional string name = 3;
      public static final int NAME_FIELD_NUMBER = 3;
      private java.lang.Object name_;
      /**
       * <code>optional string name = 3;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 3;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string name = 3;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // optional double timeInMs = 4;
      public static final int TIMEINMS_FIELD_NUMBER = 4;
      private double timeInMs_;
      /**
       * <code>optional double timeInMs = 4;</code>
       */
      public boolean hasTimeInMs() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional double timeInMs = 4;</code>
       */
      public double getTimeInMs() {
        return timeInMs_;
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(3, getNameBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeDouble(4, timeInMs_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(3, getNameBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeDoubleSize(4, timeInMs_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

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

      public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code DebugInfo.Timing}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.TimingOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DebugInfo_Timing_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DebugInfo_Timing_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.class, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.Builder.class);
        }

        // Construct using com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

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

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

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

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DebugInfo_Timing_descriptor;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing getDefaultInstanceForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.getDefaultInstance();
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing build() {
          com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing buildPartial() {
          com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing result = new com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.name_ = name_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.timeInMs_ = timeInMs_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing) {
            return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing other) {
          if (other == com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.getDefaultInstance()) return this;
          if (other.hasName()) {
            bitField0_ |= 0x00000001;
            name_ = other.name_;
            onChanged();
          }
          if (other.hasTimeInMs()) {
            setTimeInMs(other.getTimeInMs());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

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

        // optional string name = 3;
        private java.lang.Object name_ = "";
        /**
         * <code>optional string name = 3;</code>
         */
        public boolean hasName() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string name = 3;</code>
         */
        public java.lang.String getName() {
          java.lang.Object ref = name_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            name_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string name = 3;</code>
         */
        public com.google.protobuf.ByteString
            getNameBytes() {
          java.lang.Object ref = name_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            name_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string name = 3;</code>
         */
        public Builder setName(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          name_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string name = 3;</code>
         */
        public Builder clearName() {
          bitField0_ = (bitField0_ & ~0x00000001);
          name_ = getDefaultInstance().getName();
          onChanged();
          return this;
        }
        /**
         * <code>optional string name = 3;</code>
         */
        public Builder setNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          name_ = value;
          onChanged();
          return this;
        }

        // optional double timeInMs = 4;
        private double timeInMs_ ;
        /**
         * <code>optional double timeInMs = 4;</code>
         */
        public boolean hasTimeInMs() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional double timeInMs = 4;</code>
         */
        public double getTimeInMs() {
          return timeInMs_;
        }
        /**
         * <code>optional double timeInMs = 4;</code>
         */
        public Builder setTimeInMs(double value) {
          bitField0_ |= 0x00000002;
          timeInMs_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional double timeInMs = 4;</code>
         */
        public Builder clearTimeInMs() {
          bitField0_ = (bitField0_ & ~0x00000002);
          timeInMs_ = 0D;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:DebugInfo.Timing)
      }

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

      // @@protoc_insertion_point(class_scope:DebugInfo.Timing)
    }

    // repeated string message = 1;
    public static final int MESSAGE_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList message_;
    /**
     * <code>repeated string message = 1;</code>
     */
    public java.util.List<java.lang.String>
        getMessageList() {
      return message_;
    }
    /**
     * <code>repeated string message = 1;</code>
     */
    public int getMessageCount() {
      return message_.size();
    }
    /**
     * <code>repeated string message = 1;</code>
     */
    public java.lang.String getMessage(int index) {
      return message_.get(index);
    }
    /**
     * <code>repeated string message = 1;</code>
     */
    public com.google.protobuf.ByteString
        getMessageBytes(int index) {
      return message_.getByteString(index);
    }

    // repeated group Timing = 2 {
    public static final int TIMING_FIELD_NUMBER = 2;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing> timing_;
    /**
     * <code>repeated group Timing = 2 { ... }</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing> getTimingList() {
      return timing_;
    }
    /**
     * <code>repeated group Timing = 2 { ... }</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.TimingOrBuilder> 
        getTimingOrBuilderList() {
      return timing_;
    }
    /**
     * <code>repeated group Timing = 2 { ... }</code>
     */
    public int getTimingCount() {
      return timing_.size();
    }
    /**
     * <code>repeated group Timing = 2 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing getTiming(int index) {
      return timing_.get(index);
    }
    /**
     * <code>repeated group Timing = 2 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.TimingOrBuilder getTimingOrBuilder(
        int index) {
      return timing_.get(index);
    }

    private void initFields() {
      message_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      timing_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < message_.size(); i++) {
        output.writeBytes(1, message_.getByteString(i));
      }
      for (int i = 0; i < timing_.size(); i++) {
        output.writeGroup(2, timing_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < message_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(message_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getMessageList().size();
      }
      for (int i = 0; i < timing_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeGroupSize(2, timing_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code DebugInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.DebugInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DebugInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DebugInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.class, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        message_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (timingBuilder_ == null) {
          timing_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          timingBuilder_.clear();
        }
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DebugInfo_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo build() {
        com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo result = new com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo(this);
        int from_bitField0_ = bitField0_;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          message_ = new com.google.protobuf.UnmodifiableLazyStringList(
              message_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.message_ = message_;
        if (timingBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            timing_ = java.util.Collections.unmodifiableList(timing_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.timing_ = timing_;
        } else {
          result.timing_ = timingBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.getDefaultInstance()) return this;
        if (!other.message_.isEmpty()) {
          if (message_.isEmpty()) {
            message_ = other.message_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureMessageIsMutable();
            message_.addAll(other.message_);
          }
          onChanged();
        }
        if (timingBuilder_ == null) {
          if (!other.timing_.isEmpty()) {
            if (timing_.isEmpty()) {
              timing_ = other.timing_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureTimingIsMutable();
              timing_.addAll(other.timing_);
            }
            onChanged();
          }
        } else {
          if (!other.timing_.isEmpty()) {
            if (timingBuilder_.isEmpty()) {
              timingBuilder_.dispose();
              timingBuilder_ = null;
              timing_ = other.timing_;
              bitField0_ = (bitField0_ & ~0x00000002);
              timingBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getTimingFieldBuilder() : null;
            } else {
              timingBuilder_.addAllMessages(other.timing_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // repeated string message = 1;
      private com.google.protobuf.LazyStringList message_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureMessageIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          message_ = new com.google.protobuf.LazyStringArrayList(message_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated string message = 1;</code>
       */
      public java.util.List<java.lang.String>
          getMessageList() {
        return java.util.Collections.unmodifiableList(message_);
      }
      /**
       * <code>repeated string message = 1;</code>
       */
      public int getMessageCount() {
        return message_.size();
      }
      /**
       * <code>repeated string message = 1;</code>
       */
      public java.lang.String getMessage(int index) {
        return message_.get(index);
      }
      /**
       * <code>repeated string message = 1;</code>
       */
      public com.google.protobuf.ByteString
          getMessageBytes(int index) {
        return message_.getByteString(index);
      }
      /**
       * <code>repeated string message = 1;</code>
       */
      public Builder setMessage(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMessageIsMutable();
        message_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string message = 1;</code>
       */
      public Builder addMessage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMessageIsMutable();
        message_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string message = 1;</code>
       */
      public Builder addAllMessage(
          java.lang.Iterable<java.lang.String> values) {
        ensureMessageIsMutable();
        super.addAll(values, message_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string message = 1;</code>
       */
      public Builder clearMessage() {
        message_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string message = 1;</code>
       */
      public Builder addMessageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMessageIsMutable();
        message_.add(value);
        onChanged();
        return this;
      }

      // repeated group Timing = 2 {
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing> timing_ =
        java.util.Collections.emptyList();
      private void ensureTimingIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          timing_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing>(timing_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.TimingOrBuilder> timingBuilder_;

      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing> getTimingList() {
        if (timingBuilder_ == null) {
          return java.util.Collections.unmodifiableList(timing_);
        } else {
          return timingBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public int getTimingCount() {
        if (timingBuilder_ == null) {
          return timing_.size();
        } else {
          return timingBuilder_.getCount();
        }
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing getTiming(int index) {
        if (timingBuilder_ == null) {
          return timing_.get(index);
        } else {
          return timingBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public Builder setTiming(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing value) {
        if (timingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTimingIsMutable();
          timing_.set(index, value);
          onChanged();
        } else {
          timingBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public Builder setTiming(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.Builder builderForValue) {
        if (timingBuilder_ == null) {
          ensureTimingIsMutable();
          timing_.set(index, builderForValue.build());
          onChanged();
        } else {
          timingBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public Builder addTiming(com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing value) {
        if (timingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTimingIsMutable();
          timing_.add(value);
          onChanged();
        } else {
          timingBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public Builder addTiming(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing value) {
        if (timingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTimingIsMutable();
          timing_.add(index, value);
          onChanged();
        } else {
          timingBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public Builder addTiming(
          com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.Builder builderForValue) {
        if (timingBuilder_ == null) {
          ensureTimingIsMutable();
          timing_.add(builderForValue.build());
          onChanged();
        } else {
          timingBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public Builder addTiming(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.Builder builderForValue) {
        if (timingBuilder_ == null) {
          ensureTimingIsMutable();
          timing_.add(index, builderForValue.build());
          onChanged();
        } else {
          timingBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public Builder addAllTiming(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing> values) {
        if (timingBuilder_ == null) {
          ensureTimingIsMutable();
          super.addAll(values, timing_);
          onChanged();
        } else {
          timingBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public Builder clearTiming() {
        if (timingBuilder_ == null) {
          timing_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          timingBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public Builder removeTiming(int index) {
        if (timingBuilder_ == null) {
          ensureTimingIsMutable();
          timing_.remove(index);
          onChanged();
        } else {
          timingBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.Builder getTimingBuilder(
          int index) {
        return getTimingFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.TimingOrBuilder getTimingOrBuilder(
          int index) {
        if (timingBuilder_ == null) {
          return timing_.get(index);  } else {
          return timingBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.TimingOrBuilder> 
           getTimingOrBuilderList() {
        if (timingBuilder_ != null) {
          return timingBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(timing_);
        }
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.Builder addTimingBuilder() {
        return getTimingFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.getDefaultInstance());
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.Builder addTimingBuilder(
          int index) {
        return getTimingFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.getDefaultInstance());
      }
      /**
       * <code>repeated group Timing = 2 { ... }</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.Builder> 
           getTimingBuilderList() {
        return getTimingFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.TimingOrBuilder> 
          getTimingFieldBuilder() {
        if (timingBuilder_ == null) {
          timingBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.Timing.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DebugInfo.TimingOrBuilder>(
                  timing_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          timing_ = null;
        }
        return timingBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:DebugInfo)
    }

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

    // @@protoc_insertion_point(class_scope:DebugInfo)
  }

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

    // optional .DocV2 doc = 1;
    /**
     * <code>optional .DocV2 doc = 1;</code>
     */
    boolean hasDoc();
    /**
     * <code>optional .DocV2 doc = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getDoc();
    /**
     * <code>optional .DocV2 doc = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getDocOrBuilder();
  }
  /**
   * Protobuf type {@code BulkDetailsEntry}
   */
  public static final class BulkDetailsEntry extends
      com.google.protobuf.GeneratedMessage
      implements BulkDetailsEntryOrBuilder {
    // Use BulkDetailsEntry.newBuilder() to construct.
    private BulkDetailsEntry(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private BulkDetailsEntry(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public BulkDetailsEntry getDefaultInstanceForType() {
      return defaultInstance;
    }

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

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BulkDetailsEntry_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.class, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.Builder.class);
    }

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

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

    private int bitField0_;
    // optional .DocV2 doc = 1;
    public static final int DOC_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.DocV2 doc_;
    /**
     * <code>optional .DocV2 doc = 1;</code>
     */
    public boolean hasDoc() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .DocV2 doc = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getDoc() {
      return doc_;
    }
    /**
     * <code>optional .DocV2 doc = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getDocOrBuilder() {
      return doc_;
    }

    private void initFields() {
      doc_ = com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

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

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

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

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code BulkDetailsEntry}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntryOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BulkDetailsEntry_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BulkDetailsEntry_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.class, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        if (docBuilder_ == null) {
          doc_ = com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance();
        } else {
          docBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BulkDetailsEntry_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry build() {
        com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry result = new com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (docBuilder_ == null) {
          result.doc_ = doc_;
        } else {
          result.doc_ = docBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.getDefaultInstance()) return this;
        if (other.hasDoc()) {
          mergeDoc(other.getDoc());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional .DocV2 doc = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.DocV2 doc_ = com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> docBuilder_;
      /**
       * <code>optional .DocV2 doc = 1;</code>
       */
      public boolean hasDoc() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .DocV2 doc = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getDoc() {
        if (docBuilder_ == null) {
          return doc_;
        } else {
          return docBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .DocV2 doc = 1;</code>
       */
      public Builder setDoc(com.akdeniz.googleplaycrawler.GooglePlay.DocV2 value) {
        if (docBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          doc_ = value;
          onChanged();
        } else {
          docBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .DocV2 doc = 1;</code>
       */
      public Builder setDoc(
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder builderForValue) {
        if (docBuilder_ == null) {
          doc_ = builderForValue.build();
          onChanged();
        } else {
          docBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .DocV2 doc = 1;</code>
       */
      public Builder mergeDoc(com.akdeniz.googleplaycrawler.GooglePlay.DocV2 value) {
        if (docBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              doc_ != com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance()) {
            doc_ =
              com.akdeniz.googleplaycrawler.GooglePlay.DocV2.newBuilder(doc_).mergeFrom(value).buildPartial();
          } else {
            doc_ = value;
          }
          onChanged();
        } else {
          docBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .DocV2 doc = 1;</code>
       */
      public Builder clearDoc() {
        if (docBuilder_ == null) {
          doc_ = com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance();
          onChanged();
        } else {
          docBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .DocV2 doc = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder getDocBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getDocFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .DocV2 doc = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getDocOrBuilder() {
        if (docBuilder_ != null) {
          return docBuilder_.getMessageOrBuilder();
        } else {
          return doc_;
        }
      }
      /**
       * <code>optional .DocV2 doc = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> 
          getDocFieldBuilder() {
        if (docBuilder_ == null) {
          docBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder>(
                  doc_,
                  getParentForChildren(),
                  isClean());
          doc_ = null;
        }
        return docBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:BulkDetailsEntry)
    }

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

    // @@protoc_insertion_point(class_scope:BulkDetailsEntry)
  }

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

    // repeated string docid = 1;
    /**
     * <code>repeated string docid = 1;</code>
     */
    java.util.List<java.lang.String>
    getDocidList();
    /**
     * <code>repeated string docid = 1;</code>
     */
    int getDocidCount();
    /**
     * <code>repeated string docid = 1;</code>
     */
    java.lang.String getDocid(int index);
    /**
     * <code>repeated string docid = 1;</code>
     */
    com.google.protobuf.ByteString
        getDocidBytes(int index);

    // optional bool includeChildDocs = 2;
    /**
     * <code>optional bool includeChildDocs = 2;</code>
     */
    boolean hasIncludeChildDocs();
    /**
     * <code>optional bool includeChildDocs = 2;</code>
     */
    boolean getIncludeChildDocs();
  }
  /**
   * Protobuf type {@code BulkDetailsRequest}
   */
  public static final class BulkDetailsRequest extends
      com.google.protobuf.GeneratedMessage
      implements BulkDetailsRequestOrBuilder {
    // Use BulkDetailsRequest.newBuilder() to construct.
    private BulkDetailsRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private BulkDetailsRequest(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public BulkDetailsRequest getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private BulkDetailsRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                docid_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              docid_.add(input.readBytes());
              break;
            }
            case 16: {
              bitField0_ |= 0x00000001;
              includeChildDocs_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          docid_ = new com.google.protobuf.UnmodifiableLazyStringList(docid_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BulkDetailsRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BulkDetailsRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest.class, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest.Builder.class);
    }

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

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

    private int bitField0_;
    // repeated string docid = 1;
    public static final int DOCID_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList docid_;
    /**
     * <code>repeated string docid = 1;</code>
     */
    public java.util.List<java.lang.String>
        getDocidList() {
      return docid_;
    }
    /**
     * <code>repeated string docid = 1;</code>
     */
    public int getDocidCount() {
      return docid_.size();
    }
    /**
     * <code>repeated string docid = 1;</code>
     */
    public java.lang.String getDocid(int index) {
      return docid_.get(index);
    }
    /**
     * <code>repeated string docid = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDocidBytes(int index) {
      return docid_.getByteString(index);
    }

    // optional bool includeChildDocs = 2;
    public static final int INCLUDECHILDDOCS_FIELD_NUMBER = 2;
    private boolean includeChildDocs_;
    /**
     * <code>optional bool includeChildDocs = 2;</code>
     */
    public boolean hasIncludeChildDocs() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool includeChildDocs = 2;</code>
     */
    public boolean getIncludeChildDocs() {
      return includeChildDocs_;
    }

    private void initFields() {
      docid_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      includeChildDocs_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < docid_.size(); i++) {
        output.writeBytes(1, docid_.getByteString(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(2, includeChildDocs_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < docid_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(docid_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getDocidList().size();
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, includeChildDocs_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code BulkDetailsRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BulkDetailsRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BulkDetailsRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest.class, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        docid_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        includeChildDocs_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BulkDetailsRequest_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest build() {
        com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest result = new com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          docid_ = new com.google.protobuf.UnmodifiableLazyStringList(
              docid_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.docid_ = docid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000001;
        }
        result.includeChildDocs_ = includeChildDocs_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsRequest.getDefaultInstance()) return this;
        if (!other.docid_.isEmpty()) {
          if (docid_.isEmpty()) {
            docid_ = other.docid_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureDocidIsMutable();
            docid_.addAll(other.docid_);
          }
          onChanged();
        }
        if (other.hasIncludeChildDocs()) {
          setIncludeChildDocs(other.getIncludeChildDocs());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // repeated string docid = 1;
      private com.google.protobuf.LazyStringList docid_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureDocidIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          docid_ = new com.google.protobuf.LazyStringArrayList(docid_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated string docid = 1;</code>
       */
      public java.util.List<java.lang.String>
          getDocidList() {
        return java.util.Collections.unmodifiableList(docid_);
      }
      /**
       * <code>repeated string docid = 1;</code>
       */
      public int getDocidCount() {
        return docid_.size();
      }
      /**
       * <code>repeated string docid = 1;</code>
       */
      public java.lang.String getDocid(int index) {
        return docid_.get(index);
      }
      /**
       * <code>repeated string docid = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDocidBytes(int index) {
        return docid_.getByteString(index);
      }
      /**
       * <code>repeated string docid = 1;</code>
       */
      public Builder setDocid(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDocidIsMutable();
        docid_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string docid = 1;</code>
       */
      public Builder addDocid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDocidIsMutable();
        docid_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string docid = 1;</code>
       */
      public Builder addAllDocid(
          java.lang.Iterable<java.lang.String> values) {
        ensureDocidIsMutable();
        super.addAll(values, docid_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string docid = 1;</code>
       */
      public Builder clearDocid() {
        docid_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string docid = 1;</code>
       */
      public Builder addDocidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDocidIsMutable();
        docid_.add(value);
        onChanged();
        return this;
      }

      // optional bool includeChildDocs = 2;
      private boolean includeChildDocs_ ;
      /**
       * <code>optional bool includeChildDocs = 2;</code>
       */
      public boolean hasIncludeChildDocs() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool includeChildDocs = 2;</code>
       */
      public boolean getIncludeChildDocs() {
        return includeChildDocs_;
      }
      /**
       * <code>optional bool includeChildDocs = 2;</code>
       */
      public Builder setIncludeChildDocs(boolean value) {
        bitField0_ |= 0x00000002;
        includeChildDocs_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool includeChildDocs = 2;</code>
       */
      public Builder clearIncludeChildDocs() {
        bitField0_ = (bitField0_ & ~0x00000002);
        includeChildDocs_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:BulkDetailsRequest)
    }

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

    // @@protoc_insertion_point(class_scope:BulkDetailsRequest)
  }

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

    // repeated .BulkDetailsEntry entry = 1;
    /**
     * <code>repeated .BulkDetailsEntry entry = 1;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry> 
        getEntryList();
    /**
     * <code>repeated .BulkDetailsEntry entry = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry getEntry(int index);
    /**
     * <code>repeated .BulkDetailsEntry entry = 1;</code>
     */
    int getEntryCount();
    /**
     * <code>repeated .BulkDetailsEntry entry = 1;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntryOrBuilder> 
        getEntryOrBuilderList();
    /**
     * <code>repeated .BulkDetailsEntry entry = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntryOrBuilder getEntryOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code BulkDetailsResponse}
   */
  public static final class BulkDetailsResponse extends
      com.google.protobuf.GeneratedMessage
      implements BulkDetailsResponseOrBuilder {
    // Use BulkDetailsResponse.newBuilder() to construct.
    private BulkDetailsResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private BulkDetailsResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public BulkDetailsResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

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

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BulkDetailsResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.Builder.class);
    }

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

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

    // repeated .BulkDetailsEntry entry = 1;
    public static final int ENTRY_FIELD_NUMBER = 1;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry> entry_;
    /**
     * <code>repeated .BulkDetailsEntry entry = 1;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry> getEntryList() {
      return entry_;
    }
    /**
     * <code>repeated .BulkDetailsEntry entry = 1;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntryOrBuilder> 
        getEntryOrBuilderList() {
      return entry_;
    }
    /**
     * <code>repeated .BulkDetailsEntry entry = 1;</code>
     */
    public int getEntryCount() {
      return entry_.size();
    }
    /**
     * <code>repeated .BulkDetailsEntry entry = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry getEntry(int index) {
      return entry_.get(index);
    }
    /**
     * <code>repeated .BulkDetailsEntry entry = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntryOrBuilder getEntryOrBuilder(
        int index) {
      return entry_.get(index);
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

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

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

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

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code BulkDetailsResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BulkDetailsResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BulkDetailsResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

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

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_BulkDetailsResponse_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse build() {
        com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse result = new com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse(this);
        int from_bitField0_ = bitField0_;
        if (entryBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            entry_ = java.util.Collections.unmodifiableList(entry_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.entry_ = entry_;
        } else {
          result.entry_ = entryBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.getDefaultInstance()) return this;
        if (entryBuilder_ == null) {
          if (!other.entry_.isEmpty()) {
            if (entry_.isEmpty()) {
              entry_ = other.entry_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureEntryIsMutable();
              entry_.addAll(other.entry_);
            }
            onChanged();
          }
        } else {
          if (!other.entry_.isEmpty()) {
            if (entryBuilder_.isEmpty()) {
              entryBuilder_.dispose();
              entryBuilder_ = null;
              entry_ = other.entry_;
              bitField0_ = (bitField0_ & ~0x00000001);
              entryBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getEntryFieldBuilder() : null;
            } else {
              entryBuilder_.addAllMessages(other.entry_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // repeated .BulkDetailsEntry entry = 1;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry> entry_ =
        java.util.Collections.emptyList();
      private void ensureEntryIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          entry_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry>(entry_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntryOrBuilder> entryBuilder_;

      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry> getEntryList() {
        if (entryBuilder_ == null) {
          return java.util.Collections.unmodifiableList(entry_);
        } else {
          return entryBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public int getEntryCount() {
        if (entryBuilder_ == null) {
          return entry_.size();
        } else {
          return entryBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry getEntry(int index) {
        if (entryBuilder_ == null) {
          return entry_.get(index);
        } else {
          return entryBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public Builder setEntry(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry value) {
        if (entryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEntryIsMutable();
          entry_.set(index, value);
          onChanged();
        } else {
          entryBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public Builder setEntry(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.Builder builderForValue) {
        if (entryBuilder_ == null) {
          ensureEntryIsMutable();
          entry_.set(index, builderForValue.build());
          onChanged();
        } else {
          entryBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public Builder addEntry(com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry value) {
        if (entryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEntryIsMutable();
          entry_.add(value);
          onChanged();
        } else {
          entryBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public Builder addEntry(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry value) {
        if (entryBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEntryIsMutable();
          entry_.add(index, value);
          onChanged();
        } else {
          entryBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public Builder addEntry(
          com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.Builder builderForValue) {
        if (entryBuilder_ == null) {
          ensureEntryIsMutable();
          entry_.add(builderForValue.build());
          onChanged();
        } else {
          entryBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public Builder addEntry(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.Builder builderForValue) {
        if (entryBuilder_ == null) {
          ensureEntryIsMutable();
          entry_.add(index, builderForValue.build());
          onChanged();
        } else {
          entryBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public Builder addAllEntry(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry> values) {
        if (entryBuilder_ == null) {
          ensureEntryIsMutable();
          super.addAll(values, entry_);
          onChanged();
        } else {
          entryBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public Builder clearEntry() {
        if (entryBuilder_ == null) {
          entry_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          entryBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public Builder removeEntry(int index) {
        if (entryBuilder_ == null) {
          ensureEntryIsMutable();
          entry_.remove(index);
          onChanged();
        } else {
          entryBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.Builder getEntryBuilder(
          int index) {
        return getEntryFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntryOrBuilder getEntryOrBuilder(
          int index) {
        if (entryBuilder_ == null) {
          return entry_.get(index);  } else {
          return entryBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntryOrBuilder> 
           getEntryOrBuilderList() {
        if (entryBuilder_ != null) {
          return entryBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(entry_);
        }
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.Builder addEntryBuilder() {
        return getEntryFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.getDefaultInstance());
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.Builder addEntryBuilder(
          int index) {
        return getEntryFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.getDefaultInstance());
      }
      /**
       * <code>repeated .BulkDetailsEntry entry = 1;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.Builder> 
           getEntryBuilderList() {
        return getEntryFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntryOrBuilder> 
          getEntryFieldBuilder() {
        if (entryBuilder_ == null) {
          entryBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntry.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsEntryOrBuilder>(
                  entry_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          entry_ = null;
        }
        return entryBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:BulkDetailsResponse)
    }

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

    // @@protoc_insertion_point(class_scope:BulkDetailsResponse)
  }

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

    // optional .DocV1 docV1 = 1;
    /**
     * <code>optional .DocV1 docV1 = 1;</code>
     */
    boolean hasDocV1();
    /**
     * <code>optional .DocV1 docV1 = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocV1 getDocV1();
    /**
     * <code>optional .DocV1 docV1 = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder getDocV1OrBuilder();

    // optional string analyticsCookie = 2;
    /**
     * <code>optional string analyticsCookie = 2;</code>
     */
    boolean hasAnalyticsCookie();
    /**
     * <code>optional string analyticsCookie = 2;</code>
     */
    java.lang.String getAnalyticsCookie();
    /**
     * <code>optional string analyticsCookie = 2;</code>
     */
    com.google.protobuf.ByteString
        getAnalyticsCookieBytes();

    // optional .Review userReview = 3;
    /**
     * <code>optional .Review userReview = 3;</code>
     */
    boolean hasUserReview();
    /**
     * <code>optional .Review userReview = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Review getUserReview();
    /**
     * <code>optional .Review userReview = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder getUserReviewOrBuilder();

    // optional .DocV2 docV2 = 4;
    /**
     * <code>optional .DocV2 docV2 = 4;</code>
     */
    boolean hasDocV2();
    /**
     * <code>optional .DocV2 docV2 = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getDocV2();
    /**
     * <code>optional .DocV2 docV2 = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getDocV2OrBuilder();

    // optional string footerHtml = 5;
    /**
     * <code>optional string footerHtml = 5;</code>
     */
    boolean hasFooterHtml();
    /**
     * <code>optional string footerHtml = 5;</code>
     */
    java.lang.String getFooterHtml();
    /**
     * <code>optional string footerHtml = 5;</code>
     */
    com.google.protobuf.ByteString
        getFooterHtmlBytes();
  }
  /**
   * Protobuf type {@code DetailsResponse}
   */
  public static final class DetailsResponse extends
      com.google.protobuf.GeneratedMessage
      implements DetailsResponseOrBuilder {
    // Use DetailsResponse.newBuilder() to construct.
    private DetailsResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DetailsResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public DetailsResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DetailsResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = docV1_.toBuilder();
              }
              docV1_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.DocV1.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(docV1_);
                docV1_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              analyticsCookie_ = input.readBytes();
              break;
            }
            case 26: {
              com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = userReview_.toBuilder();
              }
              userReview_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Review.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(userReview_);
                userReview_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 34: {
              com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = docV2_.toBuilder();
              }
              docV2_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.DocV2.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(docV2_);
                docV2_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              footerHtml_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DetailsResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DetailsResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.Builder.class);
    }

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

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

    private int bitField0_;
    // optional .DocV1 docV1 = 1;
    public static final int DOCV1_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.DocV1 docV1_;
    /**
     * <code>optional .DocV1 docV1 = 1;</code>
     */
    public boolean hasDocV1() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .DocV1 docV1 = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocV1 getDocV1() {
      return docV1_;
    }
    /**
     * <code>optional .DocV1 docV1 = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder getDocV1OrBuilder() {
      return docV1_;
    }

    // optional string analyticsCookie = 2;
    public static final int ANALYTICSCOOKIE_FIELD_NUMBER = 2;
    private java.lang.Object analyticsCookie_;
    /**
     * <code>optional string analyticsCookie = 2;</code>
     */
    public boolean hasAnalyticsCookie() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string analyticsCookie = 2;</code>
     */
    public java.lang.String getAnalyticsCookie() {
      java.lang.Object ref = analyticsCookie_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          analyticsCookie_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string analyticsCookie = 2;</code>
     */
    public com.google.protobuf.ByteString
        getAnalyticsCookieBytes() {
      java.lang.Object ref = analyticsCookie_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        analyticsCookie_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .Review userReview = 3;
    public static final int USERREVIEW_FIELD_NUMBER = 3;
    private com.akdeniz.googleplaycrawler.GooglePlay.Review userReview_;
    /**
     * <code>optional .Review userReview = 3;</code>
     */
    public boolean hasUserReview() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .Review userReview = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Review getUserReview() {
      return userReview_;
    }
    /**
     * <code>optional .Review userReview = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder getUserReviewOrBuilder() {
      return userReview_;
    }

    // optional .DocV2 docV2 = 4;
    public static final int DOCV2_FIELD_NUMBER = 4;
    private com.akdeniz.googleplaycrawler.GooglePlay.DocV2 docV2_;
    /**
     * <code>optional .DocV2 docV2 = 4;</code>
     */
    public boolean hasDocV2() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .DocV2 docV2 = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getDocV2() {
      return docV2_;
    }
    /**
     * <code>optional .DocV2 docV2 = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getDocV2OrBuilder() {
      return docV2_;
    }

    // optional string footerHtml = 5;
    public static final int FOOTERHTML_FIELD_NUMBER = 5;
    private java.lang.Object footerHtml_;
    /**
     * <code>optional string footerHtml = 5;</code>
     */
    public boolean hasFooterHtml() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string footerHtml = 5;</code>
     */
    public java.lang.String getFooterHtml() {
      java.lang.Object ref = footerHtml_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          footerHtml_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string footerHtml = 5;</code>
     */
    public com.google.protobuf.ByteString
        getFooterHtmlBytes() {
      java.lang.Object ref = footerHtml_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        footerHtml_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      docV1_ = com.akdeniz.googleplaycrawler.GooglePlay.DocV1.getDefaultInstance();
      analyticsCookie_ = "";
      userReview_ = com.akdeniz.googleplaycrawler.GooglePlay.Review.getDefaultInstance();
      docV2_ = com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance();
      footerHtml_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, docV1_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getAnalyticsCookieBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, userReview_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, docV2_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getFooterHtmlBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, docV1_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getAnalyticsCookieBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, userReview_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, docV2_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getFooterHtmlBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code DetailsResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DetailsResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DetailsResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        if (docV1Builder_ == null) {
          docV1_ = com.akdeniz.googleplaycrawler.GooglePlay.DocV1.getDefaultInstance();
        } else {
          docV1Builder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        analyticsCookie_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (userReviewBuilder_ == null) {
          userReview_ = com.akdeniz.googleplaycrawler.GooglePlay.Review.getDefaultInstance();
        } else {
          userReviewBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (docV2Builder_ == null) {
          docV2_ = com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance();
        } else {
          docV2Builder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        footerHtml_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DetailsResponse_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse build() {
        com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse result = new com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (docV1Builder_ == null) {
          result.docV1_ = docV1_;
        } else {
          result.docV1_ = docV1Builder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.analyticsCookie_ = analyticsCookie_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (userReviewBuilder_ == null) {
          result.userReview_ = userReview_;
        } else {
          result.userReview_ = userReviewBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (docV2Builder_ == null) {
          result.docV2_ = docV2_;
        } else {
          result.docV2_ = docV2Builder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.footerHtml_ = footerHtml_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.getDefaultInstance()) return this;
        if (other.hasDocV1()) {
          mergeDocV1(other.getDocV1());
        }
        if (other.hasAnalyticsCookie()) {
          bitField0_ |= 0x00000002;
          analyticsCookie_ = other.analyticsCookie_;
          onChanged();
        }
        if (other.hasUserReview()) {
          mergeUserReview(other.getUserReview());
        }
        if (other.hasDocV2()) {
          mergeDocV2(other.getDocV2());
        }
        if (other.hasFooterHtml()) {
          bitField0_ |= 0x00000010;
          footerHtml_ = other.footerHtml_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional .DocV1 docV1 = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.DocV1 docV1_ = com.akdeniz.googleplaycrawler.GooglePlay.DocV1.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocV1, com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder> docV1Builder_;
      /**
       * <code>optional .DocV1 docV1 = 1;</code>
       */
      public boolean hasDocV1() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .DocV1 docV1 = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV1 getDocV1() {
        if (docV1Builder_ == null) {
          return docV1_;
        } else {
          return docV1Builder_.getMessage();
        }
      }
      /**
       * <code>optional .DocV1 docV1 = 1;</code>
       */
      public Builder setDocV1(com.akdeniz.googleplaycrawler.GooglePlay.DocV1 value) {
        if (docV1Builder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          docV1_ = value;
          onChanged();
        } else {
          docV1Builder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .DocV1 docV1 = 1;</code>
       */
      public Builder setDocV1(
          com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder builderForValue) {
        if (docV1Builder_ == null) {
          docV1_ = builderForValue.build();
          onChanged();
        } else {
          docV1Builder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .DocV1 docV1 = 1;</code>
       */
      public Builder mergeDocV1(com.akdeniz.googleplaycrawler.GooglePlay.DocV1 value) {
        if (docV1Builder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              docV1_ != com.akdeniz.googleplaycrawler.GooglePlay.DocV1.getDefaultInstance()) {
            docV1_ =
              com.akdeniz.googleplaycrawler.GooglePlay.DocV1.newBuilder(docV1_).mergeFrom(value).buildPartial();
          } else {
            docV1_ = value;
          }
          onChanged();
        } else {
          docV1Builder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .DocV1 docV1 = 1;</code>
       */
      public Builder clearDocV1() {
        if (docV1Builder_ == null) {
          docV1_ = com.akdeniz.googleplaycrawler.GooglePlay.DocV1.getDefaultInstance();
          onChanged();
        } else {
          docV1Builder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .DocV1 docV1 = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder getDocV1Builder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getDocV1FieldBuilder().getBuilder();
      }
      /**
       * <code>optional .DocV1 docV1 = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder getDocV1OrBuilder() {
        if (docV1Builder_ != null) {
          return docV1Builder_.getMessageOrBuilder();
        } else {
          return docV1_;
        }
      }
      /**
       * <code>optional .DocV1 docV1 = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocV1, com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder> 
          getDocV1FieldBuilder() {
        if (docV1Builder_ == null) {
          docV1Builder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DocV1, com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder>(
                  docV1_,
                  getParentForChildren(),
                  isClean());
          docV1_ = null;
        }
        return docV1Builder_;
      }

      // optional string analyticsCookie = 2;
      private java.lang.Object analyticsCookie_ = "";
      /**
       * <code>optional string analyticsCookie = 2;</code>
       */
      public boolean hasAnalyticsCookie() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string analyticsCookie = 2;</code>
       */
      public java.lang.String getAnalyticsCookie() {
        java.lang.Object ref = analyticsCookie_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          analyticsCookie_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string analyticsCookie = 2;</code>
       */
      public com.google.protobuf.ByteString
          getAnalyticsCookieBytes() {
        java.lang.Object ref = analyticsCookie_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          analyticsCookie_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string analyticsCookie = 2;</code>
       */
      public Builder setAnalyticsCookie(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        analyticsCookie_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string analyticsCookie = 2;</code>
       */
      public Builder clearAnalyticsCookie() {
        bitField0_ = (bitField0_ & ~0x00000002);
        analyticsCookie_ = getDefaultInstance().getAnalyticsCookie();
        onChanged();
        return this;
      }
      /**
       * <code>optional string analyticsCookie = 2;</code>
       */
      public Builder setAnalyticsCookieBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        analyticsCookie_ = value;
        onChanged();
        return this;
      }

      // optional .Review userReview = 3;
      private com.akdeniz.googleplaycrawler.GooglePlay.Review userReview_ = com.akdeniz.googleplaycrawler.GooglePlay.Review.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Review, com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder> userReviewBuilder_;
      /**
       * <code>optional .Review userReview = 3;</code>
       */
      public boolean hasUserReview() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .Review userReview = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Review getUserReview() {
        if (userReviewBuilder_ == null) {
          return userReview_;
        } else {
          return userReviewBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Review userReview = 3;</code>
       */
      public Builder setUserReview(com.akdeniz.googleplaycrawler.GooglePlay.Review value) {
        if (userReviewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          userReview_ = value;
          onChanged();
        } else {
          userReviewBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Review userReview = 3;</code>
       */
      public Builder setUserReview(
          com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder builderForValue) {
        if (userReviewBuilder_ == null) {
          userReview_ = builderForValue.build();
          onChanged();
        } else {
          userReviewBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Review userReview = 3;</code>
       */
      public Builder mergeUserReview(com.akdeniz.googleplaycrawler.GooglePlay.Review value) {
        if (userReviewBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              userReview_ != com.akdeniz.googleplaycrawler.GooglePlay.Review.getDefaultInstance()) {
            userReview_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Review.newBuilder(userReview_).mergeFrom(value).buildPartial();
          } else {
            userReview_ = value;
          }
          onChanged();
        } else {
          userReviewBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Review userReview = 3;</code>
       */
      public Builder clearUserReview() {
        if (userReviewBuilder_ == null) {
          userReview_ = com.akdeniz.googleplaycrawler.GooglePlay.Review.getDefaultInstance();
          onChanged();
        } else {
          userReviewBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .Review userReview = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder getUserReviewBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getUserReviewFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Review userReview = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder getUserReviewOrBuilder() {
        if (userReviewBuilder_ != null) {
          return userReviewBuilder_.getMessageOrBuilder();
        } else {
          return userReview_;
        }
      }
      /**
       * <code>optional .Review userReview = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Review, com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder> 
          getUserReviewFieldBuilder() {
        if (userReviewBuilder_ == null) {
          userReviewBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Review, com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder>(
                  userReview_,
                  getParentForChildren(),
                  isClean());
          userReview_ = null;
        }
        return userReviewBuilder_;
      }

      // optional .DocV2 docV2 = 4;
      private com.akdeniz.googleplaycrawler.GooglePlay.DocV2 docV2_ = com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> docV2Builder_;
      /**
       * <code>optional .DocV2 docV2 = 4;</code>
       */
      public boolean hasDocV2() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .DocV2 docV2 = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getDocV2() {
        if (docV2Builder_ == null) {
          return docV2_;
        } else {
          return docV2Builder_.getMessage();
        }
      }
      /**
       * <code>optional .DocV2 docV2 = 4;</code>
       */
      public Builder setDocV2(com.akdeniz.googleplaycrawler.GooglePlay.DocV2 value) {
        if (docV2Builder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          docV2_ = value;
          onChanged();
        } else {
          docV2Builder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .DocV2 docV2 = 4;</code>
       */
      public Builder setDocV2(
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder builderForValue) {
        if (docV2Builder_ == null) {
          docV2_ = builderForValue.build();
          onChanged();
        } else {
          docV2Builder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .DocV2 docV2 = 4;</code>
       */
      public Builder mergeDocV2(com.akdeniz.googleplaycrawler.GooglePlay.DocV2 value) {
        if (docV2Builder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              docV2_ != com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance()) {
            docV2_ =
              com.akdeniz.googleplaycrawler.GooglePlay.DocV2.newBuilder(docV2_).mergeFrom(value).buildPartial();
          } else {
            docV2_ = value;
          }
          onChanged();
        } else {
          docV2Builder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .DocV2 docV2 = 4;</code>
       */
      public Builder clearDocV2() {
        if (docV2Builder_ == null) {
          docV2_ = com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance();
          onChanged();
        } else {
          docV2Builder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .DocV2 docV2 = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder getDocV2Builder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getDocV2FieldBuilder().getBuilder();
      }
      /**
       * <code>optional .DocV2 docV2 = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getDocV2OrBuilder() {
        if (docV2Builder_ != null) {
          return docV2Builder_.getMessageOrBuilder();
        } else {
          return docV2_;
        }
      }
      /**
       * <code>optional .DocV2 docV2 = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> 
          getDocV2FieldBuilder() {
        if (docV2Builder_ == null) {
          docV2Builder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder>(
                  docV2_,
                  getParentForChildren(),
                  isClean());
          docV2_ = null;
        }
        return docV2Builder_;
      }

      // optional string footerHtml = 5;
      private java.lang.Object footerHtml_ = "";
      /**
       * <code>optional string footerHtml = 5;</code>
       */
      public boolean hasFooterHtml() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string footerHtml = 5;</code>
       */
      public java.lang.String getFooterHtml() {
        java.lang.Object ref = footerHtml_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          footerHtml_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string footerHtml = 5;</code>
       */
      public com.google.protobuf.ByteString
          getFooterHtmlBytes() {
        java.lang.Object ref = footerHtml_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          footerHtml_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string footerHtml = 5;</code>
       */
      public Builder setFooterHtml(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        footerHtml_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string footerHtml = 5;</code>
       */
      public Builder clearFooterHtml() {
        bitField0_ = (bitField0_ & ~0x00000010);
        footerHtml_ = getDefaultInstance().getFooterHtml();
        onChanged();
        return this;
      }
      /**
       * <code>optional string footerHtml = 5;</code>
       */
      public Builder setFooterHtmlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        footerHtml_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:DetailsResponse)
    }

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

    // @@protoc_insertion_point(class_scope:DetailsResponse)
  }

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

    // optional int32 touchScreen = 1;
    /**
     * <code>optional int32 touchScreen = 1;</code>
     */
    boolean hasTouchScreen();
    /**
     * <code>optional int32 touchScreen = 1;</code>
     */
    int getTouchScreen();

    // optional int32 keyboard = 2;
    /**
     * <code>optional int32 keyboard = 2;</code>
     */
    boolean hasKeyboard();
    /**
     * <code>optional int32 keyboard = 2;</code>
     */
    int getKeyboard();

    // optional int32 navigation = 3;
    /**
     * <code>optional int32 navigation = 3;</code>
     */
    boolean hasNavigation();
    /**
     * <code>optional int32 navigation = 3;</code>
     */
    int getNavigation();

    // optional int32 screenLayout = 4;
    /**
     * <code>optional int32 screenLayout = 4;</code>
     */
    boolean hasScreenLayout();
    /**
     * <code>optional int32 screenLayout = 4;</code>
     */
    int getScreenLayout();

    // optional bool hasHardKeyboard = 5;
    /**
     * <code>optional bool hasHardKeyboard = 5;</code>
     */
    boolean hasHasHardKeyboard();
    /**
     * <code>optional bool hasHardKeyboard = 5;</code>
     */
    boolean getHasHardKeyboard();

    // optional bool hasFiveWayNavigation = 6;
    /**
     * <code>optional bool hasFiveWayNavigation = 6;</code>
     */
    boolean hasHasFiveWayNavigation();
    /**
     * <code>optional bool hasFiveWayNavigation = 6;</code>
     */
    boolean getHasFiveWayNavigation();

    // optional int32 screenDensity = 7;
    /**
     * <code>optional int32 screenDensity = 7;</code>
     */
    boolean hasScreenDensity();
    /**
     * <code>optional int32 screenDensity = 7;</code>
     */
    int getScreenDensity();

    // optional int32 glEsVersion = 8;
    /**
     * <code>optional int32 glEsVersion = 8;</code>
     */
    boolean hasGlEsVersion();
    /**
     * <code>optional int32 glEsVersion = 8;</code>
     */
    int getGlEsVersion();

    // repeated string systemSharedLibrary = 9;
    /**
     * <code>repeated string systemSharedLibrary = 9;</code>
     */
    java.util.List<java.lang.String>
    getSystemSharedLibraryList();
    /**
     * <code>repeated string systemSharedLibrary = 9;</code>
     */
    int getSystemSharedLibraryCount();
    /**
     * <code>repeated string systemSharedLibrary = 9;</code>
     */
    java.lang.String getSystemSharedLibrary(int index);
    /**
     * <code>repeated string systemSharedLibrary = 9;</code>
     */
    com.google.protobuf.ByteString
        getSystemSharedLibraryBytes(int index);

    // repeated string systemAvailableFeature = 10;
    /**
     * <code>repeated string systemAvailableFeature = 10;</code>
     */
    java.util.List<java.lang.String>
    getSystemAvailableFeatureList();
    /**
     * <code>repeated string systemAvailableFeature = 10;</code>
     */
    int getSystemAvailableFeatureCount();
    /**
     * <code>repeated string systemAvailableFeature = 10;</code>
     */
    java.lang.String getSystemAvailableFeature(int index);
    /**
     * <code>repeated string systemAvailableFeature = 10;</code>
     */
    com.google.protobuf.ByteString
        getSystemAvailableFeatureBytes(int index);

    // repeated string nativePlatform = 11;
    /**
     * <code>repeated string nativePlatform = 11;</code>
     */
    java.util.List<java.lang.String>
    getNativePlatformList();
    /**
     * <code>repeated string nativePlatform = 11;</code>
     */
    int getNativePlatformCount();
    /**
     * <code>repeated string nativePlatform = 11;</code>
     */
    java.lang.String getNativePlatform(int index);
    /**
     * <code>repeated string nativePlatform = 11;</code>
     */
    com.google.protobuf.ByteString
        getNativePlatformBytes(int index);

    // optional int32 screenWidth = 12;
    /**
     * <code>optional int32 screenWidth = 12;</code>
     */
    boolean hasScreenWidth();
    /**
     * <code>optional int32 screenWidth = 12;</code>
     */
    int getScreenWidth();

    // optional int32 screenHeight = 13;
    /**
     * <code>optional int32 screenHeight = 13;</code>
     */
    boolean hasScreenHeight();
    /**
     * <code>optional int32 screenHeight = 13;</code>
     */
    int getScreenHeight();

    // repeated string systemSupportedLocale = 14;
    /**
     * <code>repeated string systemSupportedLocale = 14;</code>
     */
    java.util.List<java.lang.String>
    getSystemSupportedLocaleList();
    /**
     * <code>repeated string systemSupportedLocale = 14;</code>
     */
    int getSystemSupportedLocaleCount();
    /**
     * <code>repeated string systemSupportedLocale = 14;</code>
     */
    java.lang.String getSystemSupportedLocale(int index);
    /**
     * <code>repeated string systemSupportedLocale = 14;</code>
     */
    com.google.protobuf.ByteString
        getSystemSupportedLocaleBytes(int index);

    // repeated string glExtension = 15;
    /**
     * <code>repeated string glExtension = 15;</code>
     */
    java.util.List<java.lang.String>
    getGlExtensionList();
    /**
     * <code>repeated string glExtension = 15;</code>
     */
    int getGlExtensionCount();
    /**
     * <code>repeated string glExtension = 15;</code>
     */
    java.lang.String getGlExtension(int index);
    /**
     * <code>repeated string glExtension = 15;</code>
     */
    com.google.protobuf.ByteString
        getGlExtensionBytes(int index);

    // optional int32 deviceClass = 16;
    /**
     * <code>optional int32 deviceClass = 16;</code>
     */
    boolean hasDeviceClass();
    /**
     * <code>optional int32 deviceClass = 16;</code>
     */
    int getDeviceClass();

    // optional int32 maxApkDownloadSizeMb = 17;
    /**
     * <code>optional int32 maxApkDownloadSizeMb = 17;</code>
     */
    boolean hasMaxApkDownloadSizeMb();
    /**
     * <code>optional int32 maxApkDownloadSizeMb = 17;</code>
     */
    int getMaxApkDownloadSizeMb();
  }
  /**
   * Protobuf type {@code DeviceConfigurationProto}
   */
  public static final class DeviceConfigurationProto extends
      com.google.protobuf.GeneratedMessage
      implements DeviceConfigurationProtoOrBuilder {
    // Use DeviceConfigurationProto.newBuilder() to construct.
    private DeviceConfigurationProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DeviceConfigurationProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public DeviceConfigurationProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DeviceConfigurationProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              touchScreen_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              keyboard_ = input.readInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              navigation_ = input.readInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              screenLayout_ = input.readInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              hasHardKeyboard_ = input.readBool();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              hasFiveWayNavigation_ = input.readBool();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              screenDensity_ = input.readInt32();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000080;
              glEsVersion_ = input.readInt32();
              break;
            }
            case 74: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                systemSharedLibrary_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000100;
              }
              systemSharedLibrary_.add(input.readBytes());
              break;
            }
            case 82: {
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                systemAvailableFeature_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000200;
              }
              systemAvailableFeature_.add(input.readBytes());
              break;
            }
            case 90: {
              if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
                nativePlatform_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000400;
              }
              nativePlatform_.add(input.readBytes());
              break;
            }
            case 96: {
              bitField0_ |= 0x00000100;
              screenWidth_ = input.readInt32();
              break;
            }
            case 104: {
              bitField0_ |= 0x00000200;
              screenHeight_ = input.readInt32();
              break;
            }
            case 114: {
              if (!((mutable_bitField0_ & 0x00002000) == 0x00002000)) {
                systemSupportedLocale_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00002000;
              }
              systemSupportedLocale_.add(input.readBytes());
              break;
            }
            case 122: {
              if (!((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
                glExtension_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00004000;
              }
              glExtension_.add(input.readBytes());
              break;
            }
            case 128: {
              bitField0_ |= 0x00000400;
              deviceClass_ = input.readInt32();
              break;
            }
            case 136: {
              bitField0_ |= 0x00000800;
              maxApkDownloadSizeMb_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          systemSharedLibrary_ = new com.google.protobuf.UnmodifiableLazyStringList(systemSharedLibrary_);
        }
        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
          systemAvailableFeature_ = new com.google.protobuf.UnmodifiableLazyStringList(systemAvailableFeature_);
        }
        if (((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
          nativePlatform_ = new com.google.protobuf.UnmodifiableLazyStringList(nativePlatform_);
        }
        if (((mutable_bitField0_ & 0x00002000) == 0x00002000)) {
          systemSupportedLocale_ = new com.google.protobuf.UnmodifiableLazyStringList(systemSupportedLocale_);
        }
        if (((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
          glExtension_ = new com.google.protobuf.UnmodifiableLazyStringList(glExtension_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DeviceConfigurationProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DeviceConfigurationProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.class, com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 touchScreen = 1;
    public static final int TOUCHSCREEN_FIELD_NUMBER = 1;
    private int touchScreen_;
    /**
     * <code>optional int32 touchScreen = 1;</code>
     */
    public boolean hasTouchScreen() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 touchScreen = 1;</code>
     */
    public int getTouchScreen() {
      return touchScreen_;
    }

    // optional int32 keyboard = 2;
    public static final int KEYBOARD_FIELD_NUMBER = 2;
    private int keyboard_;
    /**
     * <code>optional int32 keyboard = 2;</code>
     */
    public boolean hasKeyboard() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 keyboard = 2;</code>
     */
    public int getKeyboard() {
      return keyboard_;
    }

    // optional int32 navigation = 3;
    public static final int NAVIGATION_FIELD_NUMBER = 3;
    private int navigation_;
    /**
     * <code>optional int32 navigation = 3;</code>
     */
    public boolean hasNavigation() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int32 navigation = 3;</code>
     */
    public int getNavigation() {
      return navigation_;
    }

    // optional int32 screenLayout = 4;
    public static final int SCREENLAYOUT_FIELD_NUMBER = 4;
    private int screenLayout_;
    /**
     * <code>optional int32 screenLayout = 4;</code>
     */
    public boolean hasScreenLayout() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int32 screenLayout = 4;</code>
     */
    public int getScreenLayout() {
      return screenLayout_;
    }

    // optional bool hasHardKeyboard = 5;
    public static final int HASHARDKEYBOARD_FIELD_NUMBER = 5;
    private boolean hasHardKeyboard_;
    /**
     * <code>optional bool hasHardKeyboard = 5;</code>
     */
    public boolean hasHasHardKeyboard() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional bool hasHardKeyboard = 5;</code>
     */
    public boolean getHasHardKeyboard() {
      return hasHardKeyboard_;
    }

    // optional bool hasFiveWayNavigation = 6;
    public static final int HASFIVEWAYNAVIGATION_FIELD_NUMBER = 6;
    private boolean hasFiveWayNavigation_;
    /**
     * <code>optional bool hasFiveWayNavigation = 6;</code>
     */
    public boolean hasHasFiveWayNavigation() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional bool hasFiveWayNavigation = 6;</code>
     */
    public boolean getHasFiveWayNavigation() {
      return hasFiveWayNavigation_;
    }

    // optional int32 screenDensity = 7;
    public static final int SCREENDENSITY_FIELD_NUMBER = 7;
    private int screenDensity_;
    /**
     * <code>optional int32 screenDensity = 7;</code>
     */
    public boolean hasScreenDensity() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional int32 screenDensity = 7;</code>
     */
    public int getScreenDensity() {
      return screenDensity_;
    }

    // optional int32 glEsVersion = 8;
    public static final int GLESVERSION_FIELD_NUMBER = 8;
    private int glEsVersion_;
    /**
     * <code>optional int32 glEsVersion = 8;</code>
     */
    public boolean hasGlEsVersion() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional int32 glEsVersion = 8;</code>
     */
    public int getGlEsVersion() {
      return glEsVersion_;
    }

    // repeated string systemSharedLibrary = 9;
    public static final int SYSTEMSHAREDLIBRARY_FIELD_NUMBER = 9;
    private com.google.protobuf.LazyStringList systemSharedLibrary_;
    /**
     * <code>repeated string systemSharedLibrary = 9;</code>
     */
    public java.util.List<java.lang.String>
        getSystemSharedLibraryList() {
      return systemSharedLibrary_;
    }
    /**
     * <code>repeated string systemSharedLibrary = 9;</code>
     */
    public int getSystemSharedLibraryCount() {
      return systemSharedLibrary_.size();
    }
    /**
     * <code>repeated string systemSharedLibrary = 9;</code>
     */
    public java.lang.String getSystemSharedLibrary(int index) {
      return systemSharedLibrary_.get(index);
    }
    /**
     * <code>repeated string systemSharedLibrary = 9;</code>
     */
    public com.google.protobuf.ByteString
        getSystemSharedLibraryBytes(int index) {
      return systemSharedLibrary_.getByteString(index);
    }

    // repeated string systemAvailableFeature = 10;
    public static final int SYSTEMAVAILABLEFEATURE_FIELD_NUMBER = 10;
    private com.google.protobuf.LazyStringList systemAvailableFeature_;
    /**
     * <code>repeated string systemAvailableFeature = 10;</code>
     */
    public java.util.List<java.lang.String>
        getSystemAvailableFeatureList() {
      return systemAvailableFeature_;
    }
    /**
     * <code>repeated string systemAvailableFeature = 10;</code>
     */
    public int getSystemAvailableFeatureCount() {
      return systemAvailableFeature_.size();
    }
    /**
     * <code>repeated string systemAvailableFeature = 10;</code>
     */
    public java.lang.String getSystemAvailableFeature(int index) {
      return systemAvailableFeature_.get(index);
    }
    /**
     * <code>repeated string systemAvailableFeature = 10;</code>
     */
    public com.google.protobuf.ByteString
        getSystemAvailableFeatureBytes(int index) {
      return systemAvailableFeature_.getByteString(index);
    }

    // repeated string nativePlatform = 11;
    public static final int NATIVEPLATFORM_FIELD_NUMBER = 11;
    private com.google.protobuf.LazyStringList nativePlatform_;
    /**
     * <code>repeated string nativePlatform = 11;</code>
     */
    public java.util.List<java.lang.String>
        getNativePlatformList() {
      return nativePlatform_;
    }
    /**
     * <code>repeated string nativePlatform = 11;</code>
     */
    public int getNativePlatformCount() {
      return nativePlatform_.size();
    }
    /**
     * <code>repeated string nativePlatform = 11;</code>
     */
    public java.lang.String getNativePlatform(int index) {
      return nativePlatform_.get(index);
    }
    /**
     * <code>repeated string nativePlatform = 11;</code>
     */
    public com.google.protobuf.ByteString
        getNativePlatformBytes(int index) {
      return nativePlatform_.getByteString(index);
    }

    // optional int32 screenWidth = 12;
    public static final int SCREENWIDTH_FIELD_NUMBER = 12;
    private int screenWidth_;
    /**
     * <code>optional int32 screenWidth = 12;</code>
     */
    public boolean hasScreenWidth() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional int32 screenWidth = 12;</code>
     */
    public int getScreenWidth() {
      return screenWidth_;
    }

    // optional int32 screenHeight = 13;
    public static final int SCREENHEIGHT_FIELD_NUMBER = 13;
    private int screenHeight_;
    /**
     * <code>optional int32 screenHeight = 13;</code>
     */
    public boolean hasScreenHeight() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional int32 screenHeight = 13;</code>
     */
    public int getScreenHeight() {
      return screenHeight_;
    }

    // repeated string systemSupportedLocale = 14;
    public static final int SYSTEMSUPPORTEDLOCALE_FIELD_NUMBER = 14;
    private com.google.protobuf.LazyStringList systemSupportedLocale_;
    /**
     * <code>repeated string systemSupportedLocale = 14;</code>
     */
    public java.util.List<java.lang.String>
        getSystemSupportedLocaleList() {
      return systemSupportedLocale_;
    }
    /**
     * <code>repeated string systemSupportedLocale = 14;</code>
     */
    public int getSystemSupportedLocaleCount() {
      return systemSupportedLocale_.size();
    }
    /**
     * <code>repeated string systemSupportedLocale = 14;</code>
     */
    public java.lang.String getSystemSupportedLocale(int index) {
      return systemSupportedLocale_.get(index);
    }
    /**
     * <code>repeated string systemSupportedLocale = 14;</code>
     */
    public com.google.protobuf.ByteString
        getSystemSupportedLocaleBytes(int index) {
      return systemSupportedLocale_.getByteString(index);
    }

    // repeated string glExtension = 15;
    public static final int GLEXTENSION_FIELD_NUMBER = 15;
    private com.google.protobuf.LazyStringList glExtension_;
    /**
     * <code>repeated string glExtension = 15;</code>
     */
    public java.util.List<java.lang.String>
        getGlExtensionList() {
      return glExtension_;
    }
    /**
     * <code>repeated string glExtension = 15;</code>
     */
    public int getGlExtensionCount() {
      return glExtension_.size();
    }
    /**
     * <code>repeated string glExtension = 15;</code>
     */
    public java.lang.String getGlExtension(int index) {
      return glExtension_.get(index);
    }
    /**
     * <code>repeated string glExtension = 15;</code>
     */
    public com.google.protobuf.ByteString
        getGlExtensionBytes(int index) {
      return glExtension_.getByteString(index);
    }

    // optional int32 deviceClass = 16;
    public static final int DEVICECLASS_FIELD_NUMBER = 16;
    private int deviceClass_;
    /**
     * <code>optional int32 deviceClass = 16;</code>
     */
    public boolean hasDeviceClass() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional int32 deviceClass = 16;</code>
     */
    public int getDeviceClass() {
      return deviceClass_;
    }

    // optional int32 maxApkDownloadSizeMb = 17;
    public static final int MAXAPKDOWNLOADSIZEMB_FIELD_NUMBER = 17;
    private int maxApkDownloadSizeMb_;
    /**
     * <code>optional int32 maxApkDownloadSizeMb = 17;</code>
     */
    public boolean hasMaxApkDownloadSizeMb() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional int32 maxApkDownloadSizeMb = 17;</code>
     */
    public int getMaxApkDownloadSizeMb() {
      return maxApkDownloadSizeMb_;
    }

    private void initFields() {
      touchScreen_ = 0;
      keyboard_ = 0;
      navigation_ = 0;
      screenLayout_ = 0;
      hasHardKeyboard_ = false;
      hasFiveWayNavigation_ = false;
      screenDensity_ = 0;
      glEsVersion_ = 0;
      systemSharedLibrary_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      systemAvailableFeature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      nativePlatform_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      screenWidth_ = 0;
      screenHeight_ = 0;
      systemSupportedLocale_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      glExtension_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      deviceClass_ = 0;
      maxApkDownloadSizeMb_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, touchScreen_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, keyboard_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(3, navigation_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, screenLayout_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBool(5, hasHardKeyboard_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBool(6, hasFiveWayNavigation_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt32(7, screenDensity_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeInt32(8, glEsVersion_);
      }
      for (int i = 0; i < systemSharedLibrary_.size(); i++) {
        output.writeBytes(9, systemSharedLibrary_.getByteString(i));
      }
      for (int i = 0; i < systemAvailableFeature_.size(); i++) {
        output.writeBytes(10, systemAvailableFeature_.getByteString(i));
      }
      for (int i = 0; i < nativePlatform_.size(); i++) {
        output.writeBytes(11, nativePlatform_.getByteString(i));
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeInt32(12, screenWidth_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeInt32(13, screenHeight_);
      }
      for (int i = 0; i < systemSupportedLocale_.size(); i++) {
        output.writeBytes(14, systemSupportedLocale_.getByteString(i));
      }
      for (int i = 0; i < glExtension_.size(); i++) {
        output.writeBytes(15, glExtension_.getByteString(i));
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeInt32(16, deviceClass_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeInt32(17, maxApkDownloadSizeMb_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, touchScreen_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, keyboard_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, navigation_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, screenLayout_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, hasHardKeyboard_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, hasFiveWayNavigation_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, screenDensity_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(8, glEsVersion_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < systemSharedLibrary_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(systemSharedLibrary_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getSystemSharedLibraryList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < systemAvailableFeature_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(systemAvailableFeature_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getSystemAvailableFeatureList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < nativePlatform_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(nativePlatform_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getNativePlatformList().size();
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(12, screenWidth_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(13, screenHeight_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < systemSupportedLocale_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(systemSupportedLocale_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getSystemSupportedLocaleList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < glExtension_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(glExtension_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getGlExtensionList().size();
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(16, deviceClass_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(17, maxApkDownloadSizeMb_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code DeviceConfigurationProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DeviceConfigurationProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DeviceConfigurationProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.class, com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        touchScreen_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        keyboard_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        navigation_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        screenLayout_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        hasHardKeyboard_ = false;
        bitField0_ = (bitField0_ & ~0x00000010);
        hasFiveWayNavigation_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        screenDensity_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        glEsVersion_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        systemSharedLibrary_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        systemAvailableFeature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000200);
        nativePlatform_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000400);
        screenWidth_ = 0;
        bitField0_ = (bitField0_ & ~0x00000800);
        screenHeight_ = 0;
        bitField0_ = (bitField0_ & ~0x00001000);
        systemSupportedLocale_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00002000);
        glExtension_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00004000);
        deviceClass_ = 0;
        bitField0_ = (bitField0_ & ~0x00008000);
        maxApkDownloadSizeMb_ = 0;
        bitField0_ = (bitField0_ & ~0x00010000);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DeviceConfigurationProto_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto build() {
        com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto result = new com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.touchScreen_ = touchScreen_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.keyboard_ = keyboard_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.navigation_ = navigation_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.screenLayout_ = screenLayout_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.hasHardKeyboard_ = hasHardKeyboard_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.hasFiveWayNavigation_ = hasFiveWayNavigation_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.screenDensity_ = screenDensity_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.glEsVersion_ = glEsVersion_;
        if (((bitField0_ & 0x00000100) == 0x00000100)) {
          systemSharedLibrary_ = new com.google.protobuf.UnmodifiableLazyStringList(
              systemSharedLibrary_);
          bitField0_ = (bitField0_ & ~0x00000100);
        }
        result.systemSharedLibrary_ = systemSharedLibrary_;
        if (((bitField0_ & 0x00000200) == 0x00000200)) {
          systemAvailableFeature_ = new com.google.protobuf.UnmodifiableLazyStringList(
              systemAvailableFeature_);
          bitField0_ = (bitField0_ & ~0x00000200);
        }
        result.systemAvailableFeature_ = systemAvailableFeature_;
        if (((bitField0_ & 0x00000400) == 0x00000400)) {
          nativePlatform_ = new com.google.protobuf.UnmodifiableLazyStringList(
              nativePlatform_);
          bitField0_ = (bitField0_ & ~0x00000400);
        }
        result.nativePlatform_ = nativePlatform_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000100;
        }
        result.screenWidth_ = screenWidth_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00000200;
        }
        result.screenHeight_ = screenHeight_;
        if (((bitField0_ & 0x00002000) == 0x00002000)) {
          systemSupportedLocale_ = new com.google.protobuf.UnmodifiableLazyStringList(
              systemSupportedLocale_);
          bitField0_ = (bitField0_ & ~0x00002000);
        }
        result.systemSupportedLocale_ = systemSupportedLocale_;
        if (((bitField0_ & 0x00004000) == 0x00004000)) {
          glExtension_ = new com.google.protobuf.UnmodifiableLazyStringList(
              glExtension_);
          bitField0_ = (bitField0_ & ~0x00004000);
        }
        result.glExtension_ = glExtension_;
        if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
          to_bitField0_ |= 0x00000400;
        }
        result.deviceClass_ = deviceClass_;
        if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x00000800;
        }
        result.maxApkDownloadSizeMb_ = maxApkDownloadSizeMb_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.getDefaultInstance()) return this;
        if (other.hasTouchScreen()) {
          setTouchScreen(other.getTouchScreen());
        }
        if (other.hasKeyboard()) {
          setKeyboard(other.getKeyboard());
        }
        if (other.hasNavigation()) {
          setNavigation(other.getNavigation());
        }
        if (other.hasScreenLayout()) {
          setScreenLayout(other.getScreenLayout());
        }
        if (other.hasHasHardKeyboard()) {
          setHasHardKeyboard(other.getHasHardKeyboard());
        }
        if (other.hasHasFiveWayNavigation()) {
          setHasFiveWayNavigation(other.getHasFiveWayNavigation());
        }
        if (other.hasScreenDensity()) {
          setScreenDensity(other.getScreenDensity());
        }
        if (other.hasGlEsVersion()) {
          setGlEsVersion(other.getGlEsVersion());
        }
        if (!other.systemSharedLibrary_.isEmpty()) {
          if (systemSharedLibrary_.isEmpty()) {
            systemSharedLibrary_ = other.systemSharedLibrary_;
            bitField0_ = (bitField0_ & ~0x00000100);
          } else {
            ensureSystemSharedLibraryIsMutable();
            systemSharedLibrary_.addAll(other.systemSharedLibrary_);
          }
          onChanged();
        }
        if (!other.systemAvailableFeature_.isEmpty()) {
          if (systemAvailableFeature_.isEmpty()) {
            systemAvailableFeature_ = other.systemAvailableFeature_;
            bitField0_ = (bitField0_ & ~0x00000200);
          } else {
            ensureSystemAvailableFeatureIsMutable();
            systemAvailableFeature_.addAll(other.systemAvailableFeature_);
          }
          onChanged();
        }
        if (!other.nativePlatform_.isEmpty()) {
          if (nativePlatform_.isEmpty()) {
            nativePlatform_ = other.nativePlatform_;
            bitField0_ = (bitField0_ & ~0x00000400);
          } else {
            ensureNativePlatformIsMutable();
            nativePlatform_.addAll(other.nativePlatform_);
          }
          onChanged();
        }
        if (other.hasScreenWidth()) {
          setScreenWidth(other.getScreenWidth());
        }
        if (other.hasScreenHeight()) {
          setScreenHeight(other.getScreenHeight());
        }
        if (!other.systemSupportedLocale_.isEmpty()) {
          if (systemSupportedLocale_.isEmpty()) {
            systemSupportedLocale_ = other.systemSupportedLocale_;
            bitField0_ = (bitField0_ & ~0x00002000);
          } else {
            ensureSystemSupportedLocaleIsMutable();
            systemSupportedLocale_.addAll(other.systemSupportedLocale_);
          }
          onChanged();
        }
        if (!other.glExtension_.isEmpty()) {
          if (glExtension_.isEmpty()) {
            glExtension_ = other.glExtension_;
            bitField0_ = (bitField0_ & ~0x00004000);
          } else {
            ensureGlExtensionIsMutable();
            glExtension_.addAll(other.glExtension_);
          }
          onChanged();
        }
        if (other.hasDeviceClass()) {
          setDeviceClass(other.getDeviceClass());
        }
        if (other.hasMaxApkDownloadSizeMb()) {
          setMaxApkDownloadSizeMb(other.getMaxApkDownloadSizeMb());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 touchScreen = 1;
      private int touchScreen_ ;
      /**
       * <code>optional int32 touchScreen = 1;</code>
       */
      public boolean hasTouchScreen() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 touchScreen = 1;</code>
       */
      public int getTouchScreen() {
        return touchScreen_;
      }
      /**
       * <code>optional int32 touchScreen = 1;</code>
       */
      public Builder setTouchScreen(int value) {
        bitField0_ |= 0x00000001;
        touchScreen_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 touchScreen = 1;</code>
       */
      public Builder clearTouchScreen() {
        bitField0_ = (bitField0_ & ~0x00000001);
        touchScreen_ = 0;
        onChanged();
        return this;
      }

      // optional int32 keyboard = 2;
      private int keyboard_ ;
      /**
       * <code>optional int32 keyboard = 2;</code>
       */
      public boolean hasKeyboard() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 keyboard = 2;</code>
       */
      public int getKeyboard() {
        return keyboard_;
      }
      /**
       * <code>optional int32 keyboard = 2;</code>
       */
      public Builder setKeyboard(int value) {
        bitField0_ |= 0x00000002;
        keyboard_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 keyboard = 2;</code>
       */
      public Builder clearKeyboard() {
        bitField0_ = (bitField0_ & ~0x00000002);
        keyboard_ = 0;
        onChanged();
        return this;
      }

      // optional int32 navigation = 3;
      private int navigation_ ;
      /**
       * <code>optional int32 navigation = 3;</code>
       */
      public boolean hasNavigation() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int32 navigation = 3;</code>
       */
      public int getNavigation() {
        return navigation_;
      }
      /**
       * <code>optional int32 navigation = 3;</code>
       */
      public Builder setNavigation(int value) {
        bitField0_ |= 0x00000004;
        navigation_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 navigation = 3;</code>
       */
      public Builder clearNavigation() {
        bitField0_ = (bitField0_ & ~0x00000004);
        navigation_ = 0;
        onChanged();
        return this;
      }

      // optional int32 screenLayout = 4;
      private int screenLayout_ ;
      /**
       * <code>optional int32 screenLayout = 4;</code>
       */
      public boolean hasScreenLayout() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int32 screenLayout = 4;</code>
       */
      public int getScreenLayout() {
        return screenLayout_;
      }
      /**
       * <code>optional int32 screenLayout = 4;</code>
       */
      public Builder setScreenLayout(int value) {
        bitField0_ |= 0x00000008;
        screenLayout_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 screenLayout = 4;</code>
       */
      public Builder clearScreenLayout() {
        bitField0_ = (bitField0_ & ~0x00000008);
        screenLayout_ = 0;
        onChanged();
        return this;
      }

      // optional bool hasHardKeyboard = 5;
      private boolean hasHardKeyboard_ ;
      /**
       * <code>optional bool hasHardKeyboard = 5;</code>
       */
      public boolean hasHasHardKeyboard() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bool hasHardKeyboard = 5;</code>
       */
      public boolean getHasHardKeyboard() {
        return hasHardKeyboard_;
      }
      /**
       * <code>optional bool hasHardKeyboard = 5;</code>
       */
      public Builder setHasHardKeyboard(boolean value) {
        bitField0_ |= 0x00000010;
        hasHardKeyboard_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool hasHardKeyboard = 5;</code>
       */
      public Builder clearHasHardKeyboard() {
        bitField0_ = (bitField0_ & ~0x00000010);
        hasHardKeyboard_ = false;
        onChanged();
        return this;
      }

      // optional bool hasFiveWayNavigation = 6;
      private boolean hasFiveWayNavigation_ ;
      /**
       * <code>optional bool hasFiveWayNavigation = 6;</code>
       */
      public boolean hasHasFiveWayNavigation() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bool hasFiveWayNavigation = 6;</code>
       */
      public boolean getHasFiveWayNavigation() {
        return hasFiveWayNavigation_;
      }
      /**
       * <code>optional bool hasFiveWayNavigation = 6;</code>
       */
      public Builder setHasFiveWayNavigation(boolean value) {
        bitField0_ |= 0x00000020;
        hasFiveWayNavigation_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool hasFiveWayNavigation = 6;</code>
       */
      public Builder clearHasFiveWayNavigation() {
        bitField0_ = (bitField0_ & ~0x00000020);
        hasFiveWayNavigation_ = false;
        onChanged();
        return this;
      }

      // optional int32 screenDensity = 7;
      private int screenDensity_ ;
      /**
       * <code>optional int32 screenDensity = 7;</code>
       */
      public boolean hasScreenDensity() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional int32 screenDensity = 7;</code>
       */
      public int getScreenDensity() {
        return screenDensity_;
      }
      /**
       * <code>optional int32 screenDensity = 7;</code>
       */
      public Builder setScreenDensity(int value) {
        bitField0_ |= 0x00000040;
        screenDensity_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 screenDensity = 7;</code>
       */
      public Builder clearScreenDensity() {
        bitField0_ = (bitField0_ & ~0x00000040);
        screenDensity_ = 0;
        onChanged();
        return this;
      }

      // optional int32 glEsVersion = 8;
      private int glEsVersion_ ;
      /**
       * <code>optional int32 glEsVersion = 8;</code>
       */
      public boolean hasGlEsVersion() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional int32 glEsVersion = 8;</code>
       */
      public int getGlEsVersion() {
        return glEsVersion_;
      }
      /**
       * <code>optional int32 glEsVersion = 8;</code>
       */
      public Builder setGlEsVersion(int value) {
        bitField0_ |= 0x00000080;
        glEsVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 glEsVersion = 8;</code>
       */
      public Builder clearGlEsVersion() {
        bitField0_ = (bitField0_ & ~0x00000080);
        glEsVersion_ = 0;
        onChanged();
        return this;
      }

      // repeated string systemSharedLibrary = 9;
      private com.google.protobuf.LazyStringList systemSharedLibrary_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureSystemSharedLibraryIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          systemSharedLibrary_ = new com.google.protobuf.LazyStringArrayList(systemSharedLibrary_);
          bitField0_ |= 0x00000100;
         }
      }
      /**
       * <code>repeated string systemSharedLibrary = 9;</code>
       */
      public java.util.List<java.lang.String>
          getSystemSharedLibraryList() {
        return java.util.Collections.unmodifiableList(systemSharedLibrary_);
      }
      /**
       * <code>repeated string systemSharedLibrary = 9;</code>
       */
      public int getSystemSharedLibraryCount() {
        return systemSharedLibrary_.size();
      }
      /**
       * <code>repeated string systemSharedLibrary = 9;</code>
       */
      public java.lang.String getSystemSharedLibrary(int index) {
        return systemSharedLibrary_.get(index);
      }
      /**
       * <code>repeated string systemSharedLibrary = 9;</code>
       */
      public com.google.protobuf.ByteString
          getSystemSharedLibraryBytes(int index) {
        return systemSharedLibrary_.getByteString(index);
      }
      /**
       * <code>repeated string systemSharedLibrary = 9;</code>
       */
      public Builder setSystemSharedLibrary(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSystemSharedLibraryIsMutable();
        systemSharedLibrary_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string systemSharedLibrary = 9;</code>
       */
      public Builder addSystemSharedLibrary(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSystemSharedLibraryIsMutable();
        systemSharedLibrary_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string systemSharedLibrary = 9;</code>
       */
      public Builder addAllSystemSharedLibrary(
          java.lang.Iterable<java.lang.String> values) {
        ensureSystemSharedLibraryIsMutable();
        super.addAll(values, systemSharedLibrary_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string systemSharedLibrary = 9;</code>
       */
      public Builder clearSystemSharedLibrary() {
        systemSharedLibrary_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string systemSharedLibrary = 9;</code>
       */
      public Builder addSystemSharedLibraryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSystemSharedLibraryIsMutable();
        systemSharedLibrary_.add(value);
        onChanged();
        return this;
      }

      // repeated string systemAvailableFeature = 10;
      private com.google.protobuf.LazyStringList systemAvailableFeature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureSystemAvailableFeatureIsMutable() {
        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
          systemAvailableFeature_ = new com.google.protobuf.LazyStringArrayList(systemAvailableFeature_);
          bitField0_ |= 0x00000200;
         }
      }
      /**
       * <code>repeated string systemAvailableFeature = 10;</code>
       */
      public java.util.List<java.lang.String>
          getSystemAvailableFeatureList() {
        return java.util.Collections.unmodifiableList(systemAvailableFeature_);
      }
      /**
       * <code>repeated string systemAvailableFeature = 10;</code>
       */
      public int getSystemAvailableFeatureCount() {
        return systemAvailableFeature_.size();
      }
      /**
       * <code>repeated string systemAvailableFeature = 10;</code>
       */
      public java.lang.String getSystemAvailableFeature(int index) {
        return systemAvailableFeature_.get(index);
      }
      /**
       * <code>repeated string systemAvailableFeature = 10;</code>
       */
      public com.google.protobuf.ByteString
          getSystemAvailableFeatureBytes(int index) {
        return systemAvailableFeature_.getByteString(index);
      }
      /**
       * <code>repeated string systemAvailableFeature = 10;</code>
       */
      public Builder setSystemAvailableFeature(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSystemAvailableFeatureIsMutable();
        systemAvailableFeature_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string systemAvailableFeature = 10;</code>
       */
      public Builder addSystemAvailableFeature(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSystemAvailableFeatureIsMutable();
        systemAvailableFeature_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string systemAvailableFeature = 10;</code>
       */
      public Builder addAllSystemAvailableFeature(
          java.lang.Iterable<java.lang.String> values) {
        ensureSystemAvailableFeatureIsMutable();
        super.addAll(values, systemAvailableFeature_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string systemAvailableFeature = 10;</code>
       */
      public Builder clearSystemAvailableFeature() {
        systemAvailableFeature_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000200);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string systemAvailableFeature = 10;</code>
       */
      public Builder addSystemAvailableFeatureBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSystemAvailableFeatureIsMutable();
        systemAvailableFeature_.add(value);
        onChanged();
        return this;
      }

      // repeated string nativePlatform = 11;
      private com.google.protobuf.LazyStringList nativePlatform_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureNativePlatformIsMutable() {
        if (!((bitField0_ & 0x00000400) == 0x00000400)) {
          nativePlatform_ = new com.google.protobuf.LazyStringArrayList(nativePlatform_);
          bitField0_ |= 0x00000400;
         }
      }
      /**
       * <code>repeated string nativePlatform = 11;</code>
       */
      public java.util.List<java.lang.String>
          getNativePlatformList() {
        return java.util.Collections.unmodifiableList(nativePlatform_);
      }
      /**
       * <code>repeated string nativePlatform = 11;</code>
       */
      public int getNativePlatformCount() {
        return nativePlatform_.size();
      }
      /**
       * <code>repeated string nativePlatform = 11;</code>
       */
      public java.lang.String getNativePlatform(int index) {
        return nativePlatform_.get(index);
      }
      /**
       * <code>repeated string nativePlatform = 11;</code>
       */
      public com.google.protobuf.ByteString
          getNativePlatformBytes(int index) {
        return nativePlatform_.getByteString(index);
      }
      /**
       * <code>repeated string nativePlatform = 11;</code>
       */
      public Builder setNativePlatform(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureNativePlatformIsMutable();
        nativePlatform_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string nativePlatform = 11;</code>
       */
      public Builder addNativePlatform(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureNativePlatformIsMutable();
        nativePlatform_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string nativePlatform = 11;</code>
       */
      public Builder addAllNativePlatform(
          java.lang.Iterable<java.lang.String> values) {
        ensureNativePlatformIsMutable();
        super.addAll(values, nativePlatform_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string nativePlatform = 11;</code>
       */
      public Builder clearNativePlatform() {
        nativePlatform_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000400);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string nativePlatform = 11;</code>
       */
      public Builder addNativePlatformBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureNativePlatformIsMutable();
        nativePlatform_.add(value);
        onChanged();
        return this;
      }

      // optional int32 screenWidth = 12;
      private int screenWidth_ ;
      /**
       * <code>optional int32 screenWidth = 12;</code>
       */
      public boolean hasScreenWidth() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional int32 screenWidth = 12;</code>
       */
      public int getScreenWidth() {
        return screenWidth_;
      }
      /**
       * <code>optional int32 screenWidth = 12;</code>
       */
      public Builder setScreenWidth(int value) {
        bitField0_ |= 0x00000800;
        screenWidth_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 screenWidth = 12;</code>
       */
      public Builder clearScreenWidth() {
        bitField0_ = (bitField0_ & ~0x00000800);
        screenWidth_ = 0;
        onChanged();
        return this;
      }

      // optional int32 screenHeight = 13;
      private int screenHeight_ ;
      /**
       * <code>optional int32 screenHeight = 13;</code>
       */
      public boolean hasScreenHeight() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional int32 screenHeight = 13;</code>
       */
      public int getScreenHeight() {
        return screenHeight_;
      }
      /**
       * <code>optional int32 screenHeight = 13;</code>
       */
      public Builder setScreenHeight(int value) {
        bitField0_ |= 0x00001000;
        screenHeight_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 screenHeight = 13;</code>
       */
      public Builder clearScreenHeight() {
        bitField0_ = (bitField0_ & ~0x00001000);
        screenHeight_ = 0;
        onChanged();
        return this;
      }

      // repeated string systemSupportedLocale = 14;
      private com.google.protobuf.LazyStringList systemSupportedLocale_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureSystemSupportedLocaleIsMutable() {
        if (!((bitField0_ & 0x00002000) == 0x00002000)) {
          systemSupportedLocale_ = new com.google.protobuf.LazyStringArrayList(systemSupportedLocale_);
          bitField0_ |= 0x00002000;
         }
      }
      /**
       * <code>repeated string systemSupportedLocale = 14;</code>
       */
      public java.util.List<java.lang.String>
          getSystemSupportedLocaleList() {
        return java.util.Collections.unmodifiableList(systemSupportedLocale_);
      }
      /**
       * <code>repeated string systemSupportedLocale = 14;</code>
       */
      public int getSystemSupportedLocaleCount() {
        return systemSupportedLocale_.size();
      }
      /**
       * <code>repeated string systemSupportedLocale = 14;</code>
       */
      public java.lang.String getSystemSupportedLocale(int index) {
        return systemSupportedLocale_.get(index);
      }
      /**
       * <code>repeated string systemSupportedLocale = 14;</code>
       */
      public com.google.protobuf.ByteString
          getSystemSupportedLocaleBytes(int index) {
        return systemSupportedLocale_.getByteString(index);
      }
      /**
       * <code>repeated string systemSupportedLocale = 14;</code>
       */
      public Builder setSystemSupportedLocale(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSystemSupportedLocaleIsMutable();
        systemSupportedLocale_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string systemSupportedLocale = 14;</code>
       */
      public Builder addSystemSupportedLocale(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSystemSupportedLocaleIsMutable();
        systemSupportedLocale_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string systemSupportedLocale = 14;</code>
       */
      public Builder addAllSystemSupportedLocale(
          java.lang.Iterable<java.lang.String> values) {
        ensureSystemSupportedLocaleIsMutable();
        super.addAll(values, systemSupportedLocale_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string systemSupportedLocale = 14;</code>
       */
      public Builder clearSystemSupportedLocale() {
        systemSupportedLocale_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00002000);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string systemSupportedLocale = 14;</code>
       */
      public Builder addSystemSupportedLocaleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSystemSupportedLocaleIsMutable();
        systemSupportedLocale_.add(value);
        onChanged();
        return this;
      }

      // repeated string glExtension = 15;
      private com.google.protobuf.LazyStringList glExtension_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureGlExtensionIsMutable() {
        if (!((bitField0_ & 0x00004000) == 0x00004000)) {
          glExtension_ = new com.google.protobuf.LazyStringArrayList(glExtension_);
          bitField0_ |= 0x00004000;
         }
      }
      /**
       * <code>repeated string glExtension = 15;</code>
       */
      public java.util.List<java.lang.String>
          getGlExtensionList() {
        return java.util.Collections.unmodifiableList(glExtension_);
      }
      /**
       * <code>repeated string glExtension = 15;</code>
       */
      public int getGlExtensionCount() {
        return glExtension_.size();
      }
      /**
       * <code>repeated string glExtension = 15;</code>
       */
      public java.lang.String getGlExtension(int index) {
        return glExtension_.get(index);
      }
      /**
       * <code>repeated string glExtension = 15;</code>
       */
      public com.google.protobuf.ByteString
          getGlExtensionBytes(int index) {
        return glExtension_.getByteString(index);
      }
      /**
       * <code>repeated string glExtension = 15;</code>
       */
      public Builder setGlExtension(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGlExtensionIsMutable();
        glExtension_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string glExtension = 15;</code>
       */
      public Builder addGlExtension(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGlExtensionIsMutable();
        glExtension_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string glExtension = 15;</code>
       */
      public Builder addAllGlExtension(
          java.lang.Iterable<java.lang.String> values) {
        ensureGlExtensionIsMutable();
        super.addAll(values, glExtension_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string glExtension = 15;</code>
       */
      public Builder clearGlExtension() {
        glExtension_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00004000);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string glExtension = 15;</code>
       */
      public Builder addGlExtensionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGlExtensionIsMutable();
        glExtension_.add(value);
        onChanged();
        return this;
      }

      // optional int32 deviceClass = 16;
      private int deviceClass_ ;
      /**
       * <code>optional int32 deviceClass = 16;</code>
       */
      public boolean hasDeviceClass() {
        return ((bitField0_ & 0x00008000) == 0x00008000);
      }
      /**
       * <code>optional int32 deviceClass = 16;</code>
       */
      public int getDeviceClass() {
        return deviceClass_;
      }
      /**
       * <code>optional int32 deviceClass = 16;</code>
       */
      public Builder setDeviceClass(int value) {
        bitField0_ |= 0x00008000;
        deviceClass_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 deviceClass = 16;</code>
       */
      public Builder clearDeviceClass() {
        bitField0_ = (bitField0_ & ~0x00008000);
        deviceClass_ = 0;
        onChanged();
        return this;
      }

      // optional int32 maxApkDownloadSizeMb = 17;
      private int maxApkDownloadSizeMb_ ;
      /**
       * <code>optional int32 maxApkDownloadSizeMb = 17;</code>
       */
      public boolean hasMaxApkDownloadSizeMb() {
        return ((bitField0_ & 0x00010000) == 0x00010000);
      }
      /**
       * <code>optional int32 maxApkDownloadSizeMb = 17;</code>
       */
      public int getMaxApkDownloadSizeMb() {
        return maxApkDownloadSizeMb_;
      }
      /**
       * <code>optional int32 maxApkDownloadSizeMb = 17;</code>
       */
      public Builder setMaxApkDownloadSizeMb(int value) {
        bitField0_ |= 0x00010000;
        maxApkDownloadSizeMb_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 maxApkDownloadSizeMb = 17;</code>
       */
      public Builder clearMaxApkDownloadSizeMb() {
        bitField0_ = (bitField0_ & ~0x00010000);
        maxApkDownloadSizeMb_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:DeviceConfigurationProto)
    }

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

    // @@protoc_insertion_point(class_scope:DeviceConfigurationProto)
  }

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

    // optional .Docid docid = 1;
    /**
     * <code>optional .Docid docid = 1;</code>
     */
    boolean hasDocid();
    /**
     * <code>optional .Docid docid = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Docid getDocid();
    /**
     * <code>optional .Docid docid = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getDocidOrBuilder();

    // optional .Docid fetchDocid = 2;
    /**
     * <code>optional .Docid fetchDocid = 2;</code>
     */
    boolean hasFetchDocid();
    /**
     * <code>optional .Docid fetchDocid = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Docid getFetchDocid();
    /**
     * <code>optional .Docid fetchDocid = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getFetchDocidOrBuilder();

    // optional .Docid sampleDocid = 3;
    /**
     * <code>optional .Docid sampleDocid = 3;</code>
     */
    boolean hasSampleDocid();
    /**
     * <code>optional .Docid sampleDocid = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Docid getSampleDocid();
    /**
     * <code>optional .Docid sampleDocid = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getSampleDocidOrBuilder();

    // optional string title = 4;
    /**
     * <code>optional string title = 4;</code>
     */
    boolean hasTitle();
    /**
     * <code>optional string title = 4;</code>
     */
    java.lang.String getTitle();
    /**
     * <code>optional string title = 4;</code>
     */
    com.google.protobuf.ByteString
        getTitleBytes();

    // optional string url = 5;
    /**
     * <code>optional string url = 5;</code>
     */
    boolean hasUrl();
    /**
     * <code>optional string url = 5;</code>
     */
    java.lang.String getUrl();
    /**
     * <code>optional string url = 5;</code>
     */
    com.google.protobuf.ByteString
        getUrlBytes();

    // repeated string snippet = 6;
    /**
     * <code>repeated string snippet = 6;</code>
     */
    java.util.List<java.lang.String>
    getSnippetList();
    /**
     * <code>repeated string snippet = 6;</code>
     */
    int getSnippetCount();
    /**
     * <code>repeated string snippet = 6;</code>
     */
    java.lang.String getSnippet(int index);
    /**
     * <code>repeated string snippet = 6;</code>
     */
    com.google.protobuf.ByteString
        getSnippetBytes(int index);

    // optional .Offer priceDeprecated = 7;
    /**
     * <code>optional .Offer priceDeprecated = 7;</code>
     */
    boolean hasPriceDeprecated();
    /**
     * <code>optional .Offer priceDeprecated = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Offer getPriceDeprecated();
    /**
     * <code>optional .Offer priceDeprecated = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getPriceDeprecatedOrBuilder();

    // optional .Availability availability = 9;
    /**
     * <code>optional .Availability availability = 9;</code>
     */
    boolean hasAvailability();
    /**
     * <code>optional .Availability availability = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Availability getAvailability();
    /**
     * <code>optional .Availability availability = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AvailabilityOrBuilder getAvailabilityOrBuilder();

    // repeated .Image image = 10;
    /**
     * <code>repeated .Image image = 10;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Image> 
        getImageList();
    /**
     * <code>repeated .Image image = 10;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Image getImage(int index);
    /**
     * <code>repeated .Image image = 10;</code>
     */
    int getImageCount();
    /**
     * <code>repeated .Image image = 10;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder> 
        getImageOrBuilderList();
    /**
     * <code>repeated .Image image = 10;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder getImageOrBuilder(
        int index);

    // repeated .Document child = 11;
    /**
     * <code>repeated .Document child = 11;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> 
        getChildList();
    /**
     * <code>repeated .Document child = 11;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Document getChild(int index);
    /**
     * <code>repeated .Document child = 11;</code>
     */
    int getChildCount();
    /**
     * <code>repeated .Document child = 11;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
        getChildOrBuilderList();
    /**
     * <code>repeated .Document child = 11;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getChildOrBuilder(
        int index);

    // optional .AggregateRating aggregateRating = 13;
    /**
     * <code>optional .AggregateRating aggregateRating = 13;</code>
     */
    boolean hasAggregateRating();
    /**
     * <code>optional .AggregateRating aggregateRating = 13;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating getAggregateRating();
    /**
     * <code>optional .AggregateRating aggregateRating = 13;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AggregateRatingOrBuilder getAggregateRatingOrBuilder();

    // repeated .Offer offer = 14;
    /**
     * <code>repeated .Offer offer = 14;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> 
        getOfferList();
    /**
     * <code>repeated .Offer offer = 14;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Offer getOffer(int index);
    /**
     * <code>repeated .Offer offer = 14;</code>
     */
    int getOfferCount();
    /**
     * <code>repeated .Offer offer = 14;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
        getOfferOrBuilderList();
    /**
     * <code>repeated .Offer offer = 14;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getOfferOrBuilder(
        int index);

    // repeated .TranslatedText translatedSnippet = 15;
    /**
     * <code>repeated .TranslatedText translatedSnippet = 15;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText> 
        getTranslatedSnippetList();
    /**
     * <code>repeated .TranslatedText translatedSnippet = 15;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText getTranslatedSnippet(int index);
    /**
     * <code>repeated .TranslatedText translatedSnippet = 15;</code>
     */
    int getTranslatedSnippetCount();
    /**
     * <code>repeated .TranslatedText translatedSnippet = 15;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder> 
        getTranslatedSnippetOrBuilderList();
    /**
     * <code>repeated .TranslatedText translatedSnippet = 15;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder getTranslatedSnippetOrBuilder(
        int index);

    // repeated .DocumentVariant documentVariant = 16;
    /**
     * <code>repeated .DocumentVariant documentVariant = 16;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant> 
        getDocumentVariantList();
    /**
     * <code>repeated .DocumentVariant documentVariant = 16;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant getDocumentVariant(int index);
    /**
     * <code>repeated .DocumentVariant documentVariant = 16;</code>
     */
    int getDocumentVariantCount();
    /**
     * <code>repeated .DocumentVariant documentVariant = 16;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariantOrBuilder> 
        getDocumentVariantOrBuilderList();
    /**
     * <code>repeated .DocumentVariant documentVariant = 16;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariantOrBuilder getDocumentVariantOrBuilder(
        int index);

    // repeated string categoryId = 17;
    /**
     * <code>repeated string categoryId = 17;</code>
     */
    java.util.List<java.lang.String>
    getCategoryIdList();
    /**
     * <code>repeated string categoryId = 17;</code>
     */
    int getCategoryIdCount();
    /**
     * <code>repeated string categoryId = 17;</code>
     */
    java.lang.String getCategoryId(int index);
    /**
     * <code>repeated string categoryId = 17;</code>
     */
    com.google.protobuf.ByteString
        getCategoryIdBytes(int index);

    // repeated .Document decoration = 18;
    /**
     * <code>repeated .Document decoration = 18;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> 
        getDecorationList();
    /**
     * <code>repeated .Document decoration = 18;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Document getDecoration(int index);
    /**
     * <code>repeated .Document decoration = 18;</code>
     */
    int getDecorationCount();
    /**
     * <code>repeated .Document decoration = 18;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
        getDecorationOrBuilderList();
    /**
     * <code>repeated .Document decoration = 18;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getDecorationOrBuilder(
        int index);

    // repeated .Document parent = 19;
    /**
     * <code>repeated .Document parent = 19;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> 
        getParentList();
    /**
     * <code>repeated .Document parent = 19;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Document getParent(int index);
    /**
     * <code>repeated .Document parent = 19;</code>
     */
    int getParentCount();
    /**
     * <code>repeated .Document parent = 19;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
        getParentOrBuilderList();
    /**
     * <code>repeated .Document parent = 19;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getParentOrBuilder(
        int index);

    // optional string privacyPolicyUrl = 20;
    /**
     * <code>optional string privacyPolicyUrl = 20;</code>
     */
    boolean hasPrivacyPolicyUrl();
    /**
     * <code>optional string privacyPolicyUrl = 20;</code>
     */
    java.lang.String getPrivacyPolicyUrl();
    /**
     * <code>optional string privacyPolicyUrl = 20;</code>
     */
    com.google.protobuf.ByteString
        getPrivacyPolicyUrlBytes();
  }
  /**
   * Protobuf type {@code Document}
   */
  public static final class Document extends
      com.google.protobuf.GeneratedMessage
      implements DocumentOrBuilder {
    // Use Document.newBuilder() to construct.
    private Document(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Document(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public Document getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Document(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = docid_.toBuilder();
              }
              docid_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Docid.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(docid_);
                docid_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = fetchDocid_.toBuilder();
              }
              fetchDocid_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Docid.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(fetchDocid_);
                fetchDocid_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = sampleDocid_.toBuilder();
              }
              sampleDocid_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Docid.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(sampleDocid_);
                sampleDocid_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              title_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              url_ = input.readBytes();
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                snippet_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000020;
              }
              snippet_.add(input.readBytes());
              break;
            }
            case 58: {
              com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = priceDeprecated_.toBuilder();
              }
              priceDeprecated_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Offer.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(priceDeprecated_);
                priceDeprecated_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 74: {
              com.akdeniz.googleplaycrawler.GooglePlay.Availability.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = availability_.toBuilder();
              }
              availability_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Availability.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(availability_);
                availability_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 82: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                image_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Image>();
                mutable_bitField0_ |= 0x00000100;
              }
              image_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Image.PARSER, extensionRegistry));
              break;
            }
            case 90: {
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                child_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Document>();
                mutable_bitField0_ |= 0x00000200;
              }
              child_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Document.PARSER, extensionRegistry));
              break;
            }
            case 106: {
              com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = aggregateRating_.toBuilder();
              }
              aggregateRating_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(aggregateRating_);
                aggregateRating_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 114: {
              if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
                offer_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Offer>();
                mutable_bitField0_ |= 0x00000800;
              }
              offer_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Offer.PARSER, extensionRegistry));
              break;
            }
            case 122: {
              if (!((mutable_bitField0_ & 0x00001000) == 0x00001000)) {
                translatedSnippet_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText>();
                mutable_bitField0_ |= 0x00001000;
              }
              translatedSnippet_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.PARSER, extensionRegistry));
              break;
            }
            case 130: {
              if (!((mutable_bitField0_ & 0x00002000) == 0x00002000)) {
                documentVariant_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant>();
                mutable_bitField0_ |= 0x00002000;
              }
              documentVariant_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.PARSER, extensionRegistry));
              break;
            }
            case 138: {
              if (!((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
                categoryId_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00004000;
              }
              categoryId_.add(input.readBytes());
              break;
            }
            case 146: {
              if (!((mutable_bitField0_ & 0x00008000) == 0x00008000)) {
                decoration_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Document>();
                mutable_bitField0_ |= 0x00008000;
              }
              decoration_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Document.PARSER, extensionRegistry));
              break;
            }
            case 154: {
              if (!((mutable_bitField0_ & 0x00010000) == 0x00010000)) {
                parent_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Document>();
                mutable_bitField0_ |= 0x00010000;
              }
              parent_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Document.PARSER, extensionRegistry));
              break;
            }
            case 162: {
              bitField0_ |= 0x00000100;
              privacyPolicyUrl_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          snippet_ = new com.google.protobuf.UnmodifiableLazyStringList(snippet_);
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          image_ = java.util.Collections.unmodifiableList(image_);
        }
        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
          child_ = java.util.Collections.unmodifiableList(child_);
        }
        if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) {
          offer_ = java.util.Collections.unmodifiableList(offer_);
        }
        if (((mutable_bitField0_ & 0x00001000) == 0x00001000)) {
          translatedSnippet_ = java.util.Collections.unmodifiableList(translatedSnippet_);
        }
        if (((mutable_bitField0_ & 0x00002000) == 0x00002000)) {
          documentVariant_ = java.util.Collections.unmodifiableList(documentVariant_);
        }
        if (((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
          categoryId_ = new com.google.protobuf.UnmodifiableLazyStringList(categoryId_);
        }
        if (((mutable_bitField0_ & 0x00008000) == 0x00008000)) {
          decoration_ = java.util.Collections.unmodifiableList(decoration_);
        }
        if (((mutable_bitField0_ & 0x00010000) == 0x00010000)) {
          parent_ = java.util.Collections.unmodifiableList(parent_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Document_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Document_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Document.class, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder.class);
    }

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

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

    private int bitField0_;
    // optional .Docid docid = 1;
    public static final int DOCID_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.Docid docid_;
    /**
     * <code>optional .Docid docid = 1;</code>
     */
    public boolean hasDocid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .Docid docid = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Docid getDocid() {
      return docid_;
    }
    /**
     * <code>optional .Docid docid = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getDocidOrBuilder() {
      return docid_;
    }

    // optional .Docid fetchDocid = 2;
    public static final int FETCHDOCID_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.Docid fetchDocid_;
    /**
     * <code>optional .Docid fetchDocid = 2;</code>
     */
    public boolean hasFetchDocid() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .Docid fetchDocid = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Docid getFetchDocid() {
      return fetchDocid_;
    }
    /**
     * <code>optional .Docid fetchDocid = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getFetchDocidOrBuilder() {
      return fetchDocid_;
    }

    // optional .Docid sampleDocid = 3;
    public static final int SAMPLEDOCID_FIELD_NUMBER = 3;
    private com.akdeniz.googleplaycrawler.GooglePlay.Docid sampleDocid_;
    /**
     * <code>optional .Docid sampleDocid = 3;</code>
     */
    public boolean hasSampleDocid() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .Docid sampleDocid = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Docid getSampleDocid() {
      return sampleDocid_;
    }
    /**
     * <code>optional .Docid sampleDocid = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getSampleDocidOrBuilder() {
      return sampleDocid_;
    }

    // optional string title = 4;
    public static final int TITLE_FIELD_NUMBER = 4;
    private java.lang.Object title_;
    /**
     * <code>optional string title = 4;</code>
     */
    public boolean hasTitle() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string title = 4;</code>
     */
    public java.lang.String getTitle() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          title_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string title = 4;</code>
     */
    public com.google.protobuf.ByteString
        getTitleBytes() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        title_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string url = 5;
    public static final int URL_FIELD_NUMBER = 5;
    private java.lang.Object url_;
    /**
     * <code>optional string url = 5;</code>
     */
    public boolean hasUrl() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string url = 5;</code>
     */
    public java.lang.String getUrl() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          url_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string url = 5;</code>
     */
    public com.google.protobuf.ByteString
        getUrlBytes() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        url_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated string snippet = 6;
    public static final int SNIPPET_FIELD_NUMBER = 6;
    private com.google.protobuf.LazyStringList snippet_;
    /**
     * <code>repeated string snippet = 6;</code>
     */
    public java.util.List<java.lang.String>
        getSnippetList() {
      return snippet_;
    }
    /**
     * <code>repeated string snippet = 6;</code>
     */
    public int getSnippetCount() {
      return snippet_.size();
    }
    /**
     * <code>repeated string snippet = 6;</code>
     */
    public java.lang.String getSnippet(int index) {
      return snippet_.get(index);
    }
    /**
     * <code>repeated string snippet = 6;</code>
     */
    public com.google.protobuf.ByteString
        getSnippetBytes(int index) {
      return snippet_.getByteString(index);
    }

    // optional .Offer priceDeprecated = 7;
    public static final int PRICEDEPRECATED_FIELD_NUMBER = 7;
    private com.akdeniz.googleplaycrawler.GooglePlay.Offer priceDeprecated_;
    /**
     * <code>optional .Offer priceDeprecated = 7;</code>
     */
    public boolean hasPriceDeprecated() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .Offer priceDeprecated = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Offer getPriceDeprecated() {
      return priceDeprecated_;
    }
    /**
     * <code>optional .Offer priceDeprecated = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getPriceDeprecatedOrBuilder() {
      return priceDeprecated_;
    }

    // optional .Availability availability = 9;
    public static final int AVAILABILITY_FIELD_NUMBER = 9;
    private com.akdeniz.googleplaycrawler.GooglePlay.Availability availability_;
    /**
     * <code>optional .Availability availability = 9;</code>
     */
    public boolean hasAvailability() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .Availability availability = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Availability getAvailability() {
      return availability_;
    }
    /**
     * <code>optional .Availability availability = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AvailabilityOrBuilder getAvailabilityOrBuilder() {
      return availability_;
    }

    // repeated .Image image = 10;
    public static final int IMAGE_FIELD_NUMBER = 10;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Image> image_;
    /**
     * <code>repeated .Image image = 10;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Image> getImageList() {
      return image_;
    }
    /**
     * <code>repeated .Image image = 10;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder> 
        getImageOrBuilderList() {
      return image_;
    }
    /**
     * <code>repeated .Image image = 10;</code>
     */
    public int getImageCount() {
      return image_.size();
    }
    /**
     * <code>repeated .Image image = 10;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Image getImage(int index) {
      return image_.get(index);
    }
    /**
     * <code>repeated .Image image = 10;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder getImageOrBuilder(
        int index) {
      return image_.get(index);
    }

    // repeated .Document child = 11;
    public static final int CHILD_FIELD_NUMBER = 11;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> child_;
    /**
     * <code>repeated .Document child = 11;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> getChildList() {
      return child_;
    }
    /**
     * <code>repeated .Document child = 11;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
        getChildOrBuilderList() {
      return child_;
    }
    /**
     * <code>repeated .Document child = 11;</code>
     */
    public int getChildCount() {
      return child_.size();
    }
    /**
     * <code>repeated .Document child = 11;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Document getChild(int index) {
      return child_.get(index);
    }
    /**
     * <code>repeated .Document child = 11;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getChildOrBuilder(
        int index) {
      return child_.get(index);
    }

    // optional .AggregateRating aggregateRating = 13;
    public static final int AGGREGATERATING_FIELD_NUMBER = 13;
    private com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating aggregateRating_;
    /**
     * <code>optional .AggregateRating aggregateRating = 13;</code>
     */
    public boolean hasAggregateRating() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional .AggregateRating aggregateRating = 13;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating getAggregateRating() {
      return aggregateRating_;
    }
    /**
     * <code>optional .AggregateRating aggregateRating = 13;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AggregateRatingOrBuilder getAggregateRatingOrBuilder() {
      return aggregateRating_;
    }

    // repeated .Offer offer = 14;
    public static final int OFFER_FIELD_NUMBER = 14;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> offer_;
    /**
     * <code>repeated .Offer offer = 14;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> getOfferList() {
      return offer_;
    }
    /**
     * <code>repeated .Offer offer = 14;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
        getOfferOrBuilderList() {
      return offer_;
    }
    /**
     * <code>repeated .Offer offer = 14;</code>
     */
    public int getOfferCount() {
      return offer_.size();
    }
    /**
     * <code>repeated .Offer offer = 14;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Offer getOffer(int index) {
      return offer_.get(index);
    }
    /**
     * <code>repeated .Offer offer = 14;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getOfferOrBuilder(
        int index) {
      return offer_.get(index);
    }

    // repeated .TranslatedText translatedSnippet = 15;
    public static final int TRANSLATEDSNIPPET_FIELD_NUMBER = 15;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText> translatedSnippet_;
    /**
     * <code>repeated .TranslatedText translatedSnippet = 15;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText> getTranslatedSnippetList() {
      return translatedSnippet_;
    }
    /**
     * <code>repeated .TranslatedText translatedSnippet = 15;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder> 
        getTranslatedSnippetOrBuilderList() {
      return translatedSnippet_;
    }
    /**
     * <code>repeated .TranslatedText translatedSnippet = 15;</code>
     */
    public int getTranslatedSnippetCount() {
      return translatedSnippet_.size();
    }
    /**
     * <code>repeated .TranslatedText translatedSnippet = 15;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText getTranslatedSnippet(int index) {
      return translatedSnippet_.get(index);
    }
    /**
     * <code>repeated .TranslatedText translatedSnippet = 15;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder getTranslatedSnippetOrBuilder(
        int index) {
      return translatedSnippet_.get(index);
    }

    // repeated .DocumentVariant documentVariant = 16;
    public static final int DOCUMENTVARIANT_FIELD_NUMBER = 16;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant> documentVariant_;
    /**
     * <code>repeated .DocumentVariant documentVariant = 16;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant> getDocumentVariantList() {
      return documentVariant_;
    }
    /**
     * <code>repeated .DocumentVariant documentVariant = 16;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariantOrBuilder> 
        getDocumentVariantOrBuilderList() {
      return documentVariant_;
    }
    /**
     * <code>repeated .DocumentVariant documentVariant = 16;</code>
     */
    public int getDocumentVariantCount() {
      return documentVariant_.size();
    }
    /**
     * <code>repeated .DocumentVariant documentVariant = 16;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant getDocumentVariant(int index) {
      return documentVariant_.get(index);
    }
    /**
     * <code>repeated .DocumentVariant documentVariant = 16;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariantOrBuilder getDocumentVariantOrBuilder(
        int index) {
      return documentVariant_.get(index);
    }

    // repeated string categoryId = 17;
    public static final int CATEGORYID_FIELD_NUMBER = 17;
    private com.google.protobuf.LazyStringList categoryId_;
    /**
     * <code>repeated string categoryId = 17;</code>
     */
    public java.util.List<java.lang.String>
        getCategoryIdList() {
      return categoryId_;
    }
    /**
     * <code>repeated string categoryId = 17;</code>
     */
    public int getCategoryIdCount() {
      return categoryId_.size();
    }
    /**
     * <code>repeated string categoryId = 17;</code>
     */
    public java.lang.String getCategoryId(int index) {
      return categoryId_.get(index);
    }
    /**
     * <code>repeated string categoryId = 17;</code>
     */
    public com.google.protobuf.ByteString
        getCategoryIdBytes(int index) {
      return categoryId_.getByteString(index);
    }

    // repeated .Document decoration = 18;
    public static final int DECORATION_FIELD_NUMBER = 18;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> decoration_;
    /**
     * <code>repeated .Document decoration = 18;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> getDecorationList() {
      return decoration_;
    }
    /**
     * <code>repeated .Document decoration = 18;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
        getDecorationOrBuilderList() {
      return decoration_;
    }
    /**
     * <code>repeated .Document decoration = 18;</code>
     */
    public int getDecorationCount() {
      return decoration_.size();
    }
    /**
     * <code>repeated .Document decoration = 18;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Document getDecoration(int index) {
      return decoration_.get(index);
    }
    /**
     * <code>repeated .Document decoration = 18;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getDecorationOrBuilder(
        int index) {
      return decoration_.get(index);
    }

    // repeated .Document parent = 19;
    public static final int PARENT_FIELD_NUMBER = 19;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> parent_;
    /**
     * <code>repeated .Document parent = 19;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> getParentList() {
      return parent_;
    }
    /**
     * <code>repeated .Document parent = 19;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
        getParentOrBuilderList() {
      return parent_;
    }
    /**
     * <code>repeated .Document parent = 19;</code>
     */
    public int getParentCount() {
      return parent_.size();
    }
    /**
     * <code>repeated .Document parent = 19;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Document getParent(int index) {
      return parent_.get(index);
    }
    /**
     * <code>repeated .Document parent = 19;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getParentOrBuilder(
        int index) {
      return parent_.get(index);
    }

    // optional string privacyPolicyUrl = 20;
    public static final int PRIVACYPOLICYURL_FIELD_NUMBER = 20;
    private java.lang.Object privacyPolicyUrl_;
    /**
     * <code>optional string privacyPolicyUrl = 20;</code>
     */
    public boolean hasPrivacyPolicyUrl() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional string privacyPolicyUrl = 20;</code>
     */
    public java.lang.String getPrivacyPolicyUrl() {
      java.lang.Object ref = privacyPolicyUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          privacyPolicyUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string privacyPolicyUrl = 20;</code>
     */
    public com.google.protobuf.ByteString
        getPrivacyPolicyUrlBytes() {
      java.lang.Object ref = privacyPolicyUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        privacyPolicyUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
      fetchDocid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
      sampleDocid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
      title_ = "";
      url_ = "";
      snippet_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      priceDeprecated_ = com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance();
      availability_ = com.akdeniz.googleplaycrawler.GooglePlay.Availability.getDefaultInstance();
      image_ = java.util.Collections.emptyList();
      child_ = java.util.Collections.emptyList();
      aggregateRating_ = com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.getDefaultInstance();
      offer_ = java.util.Collections.emptyList();
      translatedSnippet_ = java.util.Collections.emptyList();
      documentVariant_ = java.util.Collections.emptyList();
      categoryId_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      decoration_ = java.util.Collections.emptyList();
      parent_ = java.util.Collections.emptyList();
      privacyPolicyUrl_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, docid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, fetchDocid_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, sampleDocid_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getTitleBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getUrlBytes());
      }
      for (int i = 0; i < snippet_.size(); i++) {
        output.writeBytes(6, snippet_.getByteString(i));
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(7, priceDeprecated_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(9, availability_);
      }
      for (int i = 0; i < image_.size(); i++) {
        output.writeMessage(10, image_.get(i));
      }
      for (int i = 0; i < child_.size(); i++) {
        output.writeMessage(11, child_.get(i));
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(13, aggregateRating_);
      }
      for (int i = 0; i < offer_.size(); i++) {
        output.writeMessage(14, offer_.get(i));
      }
      for (int i = 0; i < translatedSnippet_.size(); i++) {
        output.writeMessage(15, translatedSnippet_.get(i));
      }
      for (int i = 0; i < documentVariant_.size(); i++) {
        output.writeMessage(16, documentVariant_.get(i));
      }
      for (int i = 0; i < categoryId_.size(); i++) {
        output.writeBytes(17, categoryId_.getByteString(i));
      }
      for (int i = 0; i < decoration_.size(); i++) {
        output.writeMessage(18, decoration_.get(i));
      }
      for (int i = 0; i < parent_.size(); i++) {
        output.writeMessage(19, parent_.get(i));
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBytes(20, getPrivacyPolicyUrlBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, docid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, fetchDocid_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, sampleDocid_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getTitleBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getUrlBytes());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < snippet_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(snippet_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getSnippetList().size();
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, priceDeprecated_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, availability_);
      }
      for (int i = 0; i < image_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, image_.get(i));
      }
      for (int i = 0; i < child_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, child_.get(i));
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(13, aggregateRating_);
      }
      for (int i = 0; i < offer_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(14, offer_.get(i));
      }
      for (int i = 0; i < translatedSnippet_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, translatedSnippet_.get(i));
      }
      for (int i = 0; i < documentVariant_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(16, documentVariant_.get(i));
      }
      {
        int dataSize = 0;
        for (int i = 0; i < categoryId_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(categoryId_.getByteString(i));
        }
        size += dataSize;
        size += 2 * getCategoryIdList().size();
      }
      for (int i = 0; i < decoration_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(18, decoration_.get(i));
      }
      for (int i = 0; i < parent_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(19, parent_.get(i));
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(20, getPrivacyPolicyUrlBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.Document parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Document parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Document parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Document parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Document parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Document parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Document parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Document parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Document parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Document parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Document prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Document}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Document_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Document_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Document.class, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Document.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getDocidFieldBuilder();
          getFetchDocidFieldBuilder();
          getSampleDocidFieldBuilder();
          getPriceDeprecatedFieldBuilder();
          getAvailabilityFieldBuilder();
          getImageFieldBuilder();
          getChildFieldBuilder();
          getAggregateRatingFieldBuilder();
          getOfferFieldBuilder();
          getTranslatedSnippetFieldBuilder();
          getDocumentVariantFieldBuilder();
          getDecorationFieldBuilder();
          getParentFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (docidBuilder_ == null) {
          docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
        } else {
          docidBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (fetchDocidBuilder_ == null) {
          fetchDocid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
        } else {
          fetchDocidBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (sampleDocidBuilder_ == null) {
          sampleDocid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
        } else {
          sampleDocidBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        title_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        url_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        snippet_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        if (priceDeprecatedBuilder_ == null) {
          priceDeprecated_ = com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance();
        } else {
          priceDeprecatedBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (availabilityBuilder_ == null) {
          availability_ = com.akdeniz.googleplaycrawler.GooglePlay.Availability.getDefaultInstance();
        } else {
          availabilityBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        if (imageBuilder_ == null) {
          image_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          imageBuilder_.clear();
        }
        if (childBuilder_ == null) {
          child_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
        } else {
          childBuilder_.clear();
        }
        if (aggregateRatingBuilder_ == null) {
          aggregateRating_ = com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.getDefaultInstance();
        } else {
          aggregateRatingBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        if (offerBuilder_ == null) {
          offer_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
        } else {
          offerBuilder_.clear();
        }
        if (translatedSnippetBuilder_ == null) {
          translatedSnippet_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00001000);
        } else {
          translatedSnippetBuilder_.clear();
        }
        if (documentVariantBuilder_ == null) {
          documentVariant_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
        } else {
          documentVariantBuilder_.clear();
        }
        categoryId_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00004000);
        if (decorationBuilder_ == null) {
          decoration_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
        } else {
          decorationBuilder_.clear();
        }
        if (parentBuilder_ == null) {
          parent_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00010000);
        } else {
          parentBuilder_.clear();
        }
        privacyPolicyUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00020000);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Document_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Document getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Document build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Document result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Document buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Document result = new com.akdeniz.googleplaycrawler.GooglePlay.Document(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (docidBuilder_ == null) {
          result.docid_ = docid_;
        } else {
          result.docid_ = docidBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (fetchDocidBuilder_ == null) {
          result.fetchDocid_ = fetchDocid_;
        } else {
          result.fetchDocid_ = fetchDocidBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (sampleDocidBuilder_ == null) {
          result.sampleDocid_ = sampleDocid_;
        } else {
          result.sampleDocid_ = sampleDocidBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.title_ = title_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.url_ = url_;
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          snippet_ = new com.google.protobuf.UnmodifiableLazyStringList(
              snippet_);
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.snippet_ = snippet_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000020;
        }
        if (priceDeprecatedBuilder_ == null) {
          result.priceDeprecated_ = priceDeprecated_;
        } else {
          result.priceDeprecated_ = priceDeprecatedBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000040;
        }
        if (availabilityBuilder_ == null) {
          result.availability_ = availability_;
        } else {
          result.availability_ = availabilityBuilder_.build();
        }
        if (imageBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            image_ = java.util.Collections.unmodifiableList(image_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.image_ = image_;
        } else {
          result.image_ = imageBuilder_.build();
        }
        if (childBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200)) {
            child_ = java.util.Collections.unmodifiableList(child_);
            bitField0_ = (bitField0_ & ~0x00000200);
          }
          result.child_ = child_;
        } else {
          result.child_ = childBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000080;
        }
        if (aggregateRatingBuilder_ == null) {
          result.aggregateRating_ = aggregateRating_;
        } else {
          result.aggregateRating_ = aggregateRatingBuilder_.build();
        }
        if (offerBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800)) {
            offer_ = java.util.Collections.unmodifiableList(offer_);
            bitField0_ = (bitField0_ & ~0x00000800);
          }
          result.offer_ = offer_;
        } else {
          result.offer_ = offerBuilder_.build();
        }
        if (translatedSnippetBuilder_ == null) {
          if (((bitField0_ & 0x00001000) == 0x00001000)) {
            translatedSnippet_ = java.util.Collections.unmodifiableList(translatedSnippet_);
            bitField0_ = (bitField0_ & ~0x00001000);
          }
          result.translatedSnippet_ = translatedSnippet_;
        } else {
          result.translatedSnippet_ = translatedSnippetBuilder_.build();
        }
        if (documentVariantBuilder_ == null) {
          if (((bitField0_ & 0x00002000) == 0x00002000)) {
            documentVariant_ = java.util.Collections.unmodifiableList(documentVariant_);
            bitField0_ = (bitField0_ & ~0x00002000);
          }
          result.documentVariant_ = documentVariant_;
        } else {
          result.documentVariant_ = documentVariantBuilder_.build();
        }
        if (((bitField0_ & 0x00004000) == 0x00004000)) {
          categoryId_ = new com.google.protobuf.UnmodifiableLazyStringList(
              categoryId_);
          bitField0_ = (bitField0_ & ~0x00004000);
        }
        result.categoryId_ = categoryId_;
        if (decorationBuilder_ == null) {
          if (((bitField0_ & 0x00008000) == 0x00008000)) {
            decoration_ = java.util.Collections.unmodifiableList(decoration_);
            bitField0_ = (bitField0_ & ~0x00008000);
          }
          result.decoration_ = decoration_;
        } else {
          result.decoration_ = decorationBuilder_.build();
        }
        if (parentBuilder_ == null) {
          if (((bitField0_ & 0x00010000) == 0x00010000)) {
            parent_ = java.util.Collections.unmodifiableList(parent_);
            bitField0_ = (bitField0_ & ~0x00010000);
          }
          result.parent_ = parent_;
        } else {
          result.parent_ = parentBuilder_.build();
        }
        if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
          to_bitField0_ |= 0x00000100;
        }
        result.privacyPolicyUrl_ = privacyPolicyUrl_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Document) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Document)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Document other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance()) return this;
        if (other.hasDocid()) {
          mergeDocid(other.getDocid());
        }
        if (other.hasFetchDocid()) {
          mergeFetchDocid(other.getFetchDocid());
        }
        if (other.hasSampleDocid()) {
          mergeSampleDocid(other.getSampleDocid());
        }
        if (other.hasTitle()) {
          bitField0_ |= 0x00000008;
          title_ = other.title_;
          onChanged();
        }
        if (other.hasUrl()) {
          bitField0_ |= 0x00000010;
          url_ = other.url_;
          onChanged();
        }
        if (!other.snippet_.isEmpty()) {
          if (snippet_.isEmpty()) {
            snippet_ = other.snippet_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureSnippetIsMutable();
            snippet_.addAll(other.snippet_);
          }
          onChanged();
        }
        if (other.hasPriceDeprecated()) {
          mergePriceDeprecated(other.getPriceDeprecated());
        }
        if (other.hasAvailability()) {
          mergeAvailability(other.getAvailability());
        }
        if (imageBuilder_ == null) {
          if (!other.image_.isEmpty()) {
            if (image_.isEmpty()) {
              image_ = other.image_;
              bitField0_ = (bitField0_ & ~0x00000100);
            } else {
              ensureImageIsMutable();
              image_.addAll(other.image_);
            }
            onChanged();
          }
        } else {
          if (!other.image_.isEmpty()) {
            if (imageBuilder_.isEmpty()) {
              imageBuilder_.dispose();
              imageBuilder_ = null;
              image_ = other.image_;
              bitField0_ = (bitField0_ & ~0x00000100);
              imageBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getImageFieldBuilder() : null;
            } else {
              imageBuilder_.addAllMessages(other.image_);
            }
          }
        }
        if (childBuilder_ == null) {
          if (!other.child_.isEmpty()) {
            if (child_.isEmpty()) {
              child_ = other.child_;
              bitField0_ = (bitField0_ & ~0x00000200);
            } else {
              ensureChildIsMutable();
              child_.addAll(other.child_);
            }
            onChanged();
          }
        } else {
          if (!other.child_.isEmpty()) {
            if (childBuilder_.isEmpty()) {
              childBuilder_.dispose();
              childBuilder_ = null;
              child_ = other.child_;
              bitField0_ = (bitField0_ & ~0x00000200);
              childBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getChildFieldBuilder() : null;
            } else {
              childBuilder_.addAllMessages(other.child_);
            }
          }
        }
        if (other.hasAggregateRating()) {
          mergeAggregateRating(other.getAggregateRating());
        }
        if (offerBuilder_ == null) {
          if (!other.offer_.isEmpty()) {
            if (offer_.isEmpty()) {
              offer_ = other.offer_;
              bitField0_ = (bitField0_ & ~0x00000800);
            } else {
              ensureOfferIsMutable();
              offer_.addAll(other.offer_);
            }
            onChanged();
          }
        } else {
          if (!other.offer_.isEmpty()) {
            if (offerBuilder_.isEmpty()) {
              offerBuilder_.dispose();
              offerBuilder_ = null;
              offer_ = other.offer_;
              bitField0_ = (bitField0_ & ~0x00000800);
              offerBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getOfferFieldBuilder() : null;
            } else {
              offerBuilder_.addAllMessages(other.offer_);
            }
          }
        }
        if (translatedSnippetBuilder_ == null) {
          if (!other.translatedSnippet_.isEmpty()) {
            if (translatedSnippet_.isEmpty()) {
              translatedSnippet_ = other.translatedSnippet_;
              bitField0_ = (bitField0_ & ~0x00001000);
            } else {
              ensureTranslatedSnippetIsMutable();
              translatedSnippet_.addAll(other.translatedSnippet_);
            }
            onChanged();
          }
        } else {
          if (!other.translatedSnippet_.isEmpty()) {
            if (translatedSnippetBuilder_.isEmpty()) {
              translatedSnippetBuilder_.dispose();
              translatedSnippetBuilder_ = null;
              translatedSnippet_ = other.translatedSnippet_;
              bitField0_ = (bitField0_ & ~0x00001000);
              translatedSnippetBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getTranslatedSnippetFieldBuilder() : null;
            } else {
              translatedSnippetBuilder_.addAllMessages(other.translatedSnippet_);
            }
          }
        }
        if (documentVariantBuilder_ == null) {
          if (!other.documentVariant_.isEmpty()) {
            if (documentVariant_.isEmpty()) {
              documentVariant_ = other.documentVariant_;
              bitField0_ = (bitField0_ & ~0x00002000);
            } else {
              ensureDocumentVariantIsMutable();
              documentVariant_.addAll(other.documentVariant_);
            }
            onChanged();
          }
        } else {
          if (!other.documentVariant_.isEmpty()) {
            if (documentVariantBuilder_.isEmpty()) {
              documentVariantBuilder_.dispose();
              documentVariantBuilder_ = null;
              documentVariant_ = other.documentVariant_;
              bitField0_ = (bitField0_ & ~0x00002000);
              documentVariantBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getDocumentVariantFieldBuilder() : null;
            } else {
              documentVariantBuilder_.addAllMessages(other.documentVariant_);
            }
          }
        }
        if (!other.categoryId_.isEmpty()) {
          if (categoryId_.isEmpty()) {
            categoryId_ = other.categoryId_;
            bitField0_ = (bitField0_ & ~0x00004000);
          } else {
            ensureCategoryIdIsMutable();
            categoryId_.addAll(other.categoryId_);
          }
          onChanged();
        }
        if (decorationBuilder_ == null) {
          if (!other.decoration_.isEmpty()) {
            if (decoration_.isEmpty()) {
              decoration_ = other.decoration_;
              bitField0_ = (bitField0_ & ~0x00008000);
            } else {
              ensureDecorationIsMutable();
              decoration_.addAll(other.decoration_);
            }
            onChanged();
          }
        } else {
          if (!other.decoration_.isEmpty()) {
            if (decorationBuilder_.isEmpty()) {
              decorationBuilder_.dispose();
              decorationBuilder_ = null;
              decoration_ = other.decoration_;
              bitField0_ = (bitField0_ & ~0x00008000);
              decorationBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getDecorationFieldBuilder() : null;
            } else {
              decorationBuilder_.addAllMessages(other.decoration_);
            }
          }
        }
        if (parentBuilder_ == null) {
          if (!other.parent_.isEmpty()) {
            if (parent_.isEmpty()) {
              parent_ = other.parent_;
              bitField0_ = (bitField0_ & ~0x00010000);
            } else {
              ensureParentIsMutable();
              parent_.addAll(other.parent_);
            }
            onChanged();
          }
        } else {
          if (!other.parent_.isEmpty()) {
            if (parentBuilder_.isEmpty()) {
              parentBuilder_.dispose();
              parentBuilder_ = null;
              parent_ = other.parent_;
              bitField0_ = (bitField0_ & ~0x00010000);
              parentBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getParentFieldBuilder() : null;
            } else {
              parentBuilder_.addAllMessages(other.parent_);
            }
          }
        }
        if (other.hasPrivacyPolicyUrl()) {
          bitField0_ |= 0x00020000;
          privacyPolicyUrl_ = other.privacyPolicyUrl_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional .Docid docid = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.Docid docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder> docidBuilder_;
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public boolean hasDocid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Docid getDocid() {
        if (docidBuilder_ == null) {
          return docid_;
        } else {
          return docidBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public Builder setDocid(com.akdeniz.googleplaycrawler.GooglePlay.Docid value) {
        if (docidBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          docid_ = value;
          onChanged();
        } else {
          docidBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public Builder setDocid(
          com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder builderForValue) {
        if (docidBuilder_ == null) {
          docid_ = builderForValue.build();
          onChanged();
        } else {
          docidBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public Builder mergeDocid(com.akdeniz.googleplaycrawler.GooglePlay.Docid value) {
        if (docidBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              docid_ != com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance()) {
            docid_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Docid.newBuilder(docid_).mergeFrom(value).buildPartial();
          } else {
            docid_ = value;
          }
          onChanged();
        } else {
          docidBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public Builder clearDocid() {
        if (docidBuilder_ == null) {
          docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
          onChanged();
        } else {
          docidBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder getDocidBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getDocidFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getDocidOrBuilder() {
        if (docidBuilder_ != null) {
          return docidBuilder_.getMessageOrBuilder();
        } else {
          return docid_;
        }
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder> 
          getDocidFieldBuilder() {
        if (docidBuilder_ == null) {
          docidBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder>(
                  docid_,
                  getParentForChildren(),
                  isClean());
          docid_ = null;
        }
        return docidBuilder_;
      }

      // optional .Docid fetchDocid = 2;
      private com.akdeniz.googleplaycrawler.GooglePlay.Docid fetchDocid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder> fetchDocidBuilder_;
      /**
       * <code>optional .Docid fetchDocid = 2;</code>
       */
      public boolean hasFetchDocid() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .Docid fetchDocid = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Docid getFetchDocid() {
        if (fetchDocidBuilder_ == null) {
          return fetchDocid_;
        } else {
          return fetchDocidBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Docid fetchDocid = 2;</code>
       */
      public Builder setFetchDocid(com.akdeniz.googleplaycrawler.GooglePlay.Docid value) {
        if (fetchDocidBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          fetchDocid_ = value;
          onChanged();
        } else {
          fetchDocidBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .Docid fetchDocid = 2;</code>
       */
      public Builder setFetchDocid(
          com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder builderForValue) {
        if (fetchDocidBuilder_ == null) {
          fetchDocid_ = builderForValue.build();
          onChanged();
        } else {
          fetchDocidBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .Docid fetchDocid = 2;</code>
       */
      public Builder mergeFetchDocid(com.akdeniz.googleplaycrawler.GooglePlay.Docid value) {
        if (fetchDocidBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              fetchDocid_ != com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance()) {
            fetchDocid_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Docid.newBuilder(fetchDocid_).mergeFrom(value).buildPartial();
          } else {
            fetchDocid_ = value;
          }
          onChanged();
        } else {
          fetchDocidBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .Docid fetchDocid = 2;</code>
       */
      public Builder clearFetchDocid() {
        if (fetchDocidBuilder_ == null) {
          fetchDocid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
          onChanged();
        } else {
          fetchDocidBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .Docid fetchDocid = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder getFetchDocidBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getFetchDocidFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Docid fetchDocid = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getFetchDocidOrBuilder() {
        if (fetchDocidBuilder_ != null) {
          return fetchDocidBuilder_.getMessageOrBuilder();
        } else {
          return fetchDocid_;
        }
      }
      /**
       * <code>optional .Docid fetchDocid = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder> 
          getFetchDocidFieldBuilder() {
        if (fetchDocidBuilder_ == null) {
          fetchDocidBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder>(
                  fetchDocid_,
                  getParentForChildren(),
                  isClean());
          fetchDocid_ = null;
        }
        return fetchDocidBuilder_;
      }

      // optional .Docid sampleDocid = 3;
      private com.akdeniz.googleplaycrawler.GooglePlay.Docid sampleDocid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder> sampleDocidBuilder_;
      /**
       * <code>optional .Docid sampleDocid = 3;</code>
       */
      public boolean hasSampleDocid() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .Docid sampleDocid = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Docid getSampleDocid() {
        if (sampleDocidBuilder_ == null) {
          return sampleDocid_;
        } else {
          return sampleDocidBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Docid sampleDocid = 3;</code>
       */
      public Builder setSampleDocid(com.akdeniz.googleplaycrawler.GooglePlay.Docid value) {
        if (sampleDocidBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          sampleDocid_ = value;
          onChanged();
        } else {
          sampleDocidBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Docid sampleDocid = 3;</code>
       */
      public Builder setSampleDocid(
          com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder builderForValue) {
        if (sampleDocidBuilder_ == null) {
          sampleDocid_ = builderForValue.build();
          onChanged();
        } else {
          sampleDocidBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Docid sampleDocid = 3;</code>
       */
      public Builder mergeSampleDocid(com.akdeniz.googleplaycrawler.GooglePlay.Docid value) {
        if (sampleDocidBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              sampleDocid_ != com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance()) {
            sampleDocid_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Docid.newBuilder(sampleDocid_).mergeFrom(value).buildPartial();
          } else {
            sampleDocid_ = value;
          }
          onChanged();
        } else {
          sampleDocidBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Docid sampleDocid = 3;</code>
       */
      public Builder clearSampleDocid() {
        if (sampleDocidBuilder_ == null) {
          sampleDocid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
          onChanged();
        } else {
          sampleDocidBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .Docid sampleDocid = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder getSampleDocidBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getSampleDocidFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Docid sampleDocid = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getSampleDocidOrBuilder() {
        if (sampleDocidBuilder_ != null) {
          return sampleDocidBuilder_.getMessageOrBuilder();
        } else {
          return sampleDocid_;
        }
      }
      /**
       * <code>optional .Docid sampleDocid = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder> 
          getSampleDocidFieldBuilder() {
        if (sampleDocidBuilder_ == null) {
          sampleDocidBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder>(
                  sampleDocid_,
                  getParentForChildren(),
                  isClean());
          sampleDocid_ = null;
        }
        return sampleDocidBuilder_;
      }

      // optional string title = 4;
      private java.lang.Object title_ = "";
      /**
       * <code>optional string title = 4;</code>
       */
      public boolean hasTitle() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string title = 4;</code>
       */
      public java.lang.String getTitle() {
        java.lang.Object ref = title_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          title_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string title = 4;</code>
       */
      public com.google.protobuf.ByteString
          getTitleBytes() {
        java.lang.Object ref = title_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          title_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string title = 4;</code>
       */
      public Builder setTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        title_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 4;</code>
       */
      public Builder clearTitle() {
        bitField0_ = (bitField0_ & ~0x00000008);
        title_ = getDefaultInstance().getTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 4;</code>
       */
      public Builder setTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        title_ = value;
        onChanged();
        return this;
      }

      // optional string url = 5;
      private java.lang.Object url_ = "";
      /**
       * <code>optional string url = 5;</code>
       */
      public boolean hasUrl() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string url = 5;</code>
       */
      public java.lang.String getUrl() {
        java.lang.Object ref = url_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          url_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string url = 5;</code>
       */
      public com.google.protobuf.ByteString
          getUrlBytes() {
        java.lang.Object ref = url_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          url_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string url = 5;</code>
       */
      public Builder setUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        url_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string url = 5;</code>
       */
      public Builder clearUrl() {
        bitField0_ = (bitField0_ & ~0x00000010);
        url_ = getDefaultInstance().getUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string url = 5;</code>
       */
      public Builder setUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        url_ = value;
        onChanged();
        return this;
      }

      // repeated string snippet = 6;
      private com.google.protobuf.LazyStringList snippet_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureSnippetIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          snippet_ = new com.google.protobuf.LazyStringArrayList(snippet_);
          bitField0_ |= 0x00000020;
         }
      }
      /**
       * <code>repeated string snippet = 6;</code>
       */
      public java.util.List<java.lang.String>
          getSnippetList() {
        return java.util.Collections.unmodifiableList(snippet_);
      }
      /**
       * <code>repeated string snippet = 6;</code>
       */
      public int getSnippetCount() {
        return snippet_.size();
      }
      /**
       * <code>repeated string snippet = 6;</code>
       */
      public java.lang.String getSnippet(int index) {
        return snippet_.get(index);
      }
      /**
       * <code>repeated string snippet = 6;</code>
       */
      public com.google.protobuf.ByteString
          getSnippetBytes(int index) {
        return snippet_.getByteString(index);
      }
      /**
       * <code>repeated string snippet = 6;</code>
       */
      public Builder setSnippet(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSnippetIsMutable();
        snippet_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string snippet = 6;</code>
       */
      public Builder addSnippet(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSnippetIsMutable();
        snippet_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string snippet = 6;</code>
       */
      public Builder addAllSnippet(
          java.lang.Iterable<java.lang.String> values) {
        ensureSnippetIsMutable();
        super.addAll(values, snippet_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string snippet = 6;</code>
       */
      public Builder clearSnippet() {
        snippet_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string snippet = 6;</code>
       */
      public Builder addSnippetBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSnippetIsMutable();
        snippet_.add(value);
        onChanged();
        return this;
      }

      // optional .Offer priceDeprecated = 7;
      private com.akdeniz.googleplaycrawler.GooglePlay.Offer priceDeprecated_ = com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> priceDeprecatedBuilder_;
      /**
       * <code>optional .Offer priceDeprecated = 7;</code>
       */
      public boolean hasPriceDeprecated() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .Offer priceDeprecated = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer getPriceDeprecated() {
        if (priceDeprecatedBuilder_ == null) {
          return priceDeprecated_;
        } else {
          return priceDeprecatedBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Offer priceDeprecated = 7;</code>
       */
      public Builder setPriceDeprecated(com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (priceDeprecatedBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          priceDeprecated_ = value;
          onChanged();
        } else {
          priceDeprecatedBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .Offer priceDeprecated = 7;</code>
       */
      public Builder setPriceDeprecated(
          com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder builderForValue) {
        if (priceDeprecatedBuilder_ == null) {
          priceDeprecated_ = builderForValue.build();
          onChanged();
        } else {
          priceDeprecatedBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .Offer priceDeprecated = 7;</code>
       */
      public Builder mergePriceDeprecated(com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (priceDeprecatedBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              priceDeprecated_ != com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance()) {
            priceDeprecated_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Offer.newBuilder(priceDeprecated_).mergeFrom(value).buildPartial();
          } else {
            priceDeprecated_ = value;
          }
          onChanged();
        } else {
          priceDeprecatedBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .Offer priceDeprecated = 7;</code>
       */
      public Builder clearPriceDeprecated() {
        if (priceDeprecatedBuilder_ == null) {
          priceDeprecated_ = com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance();
          onChanged();
        } else {
          priceDeprecatedBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .Offer priceDeprecated = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder getPriceDeprecatedBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getPriceDeprecatedFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Offer priceDeprecated = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getPriceDeprecatedOrBuilder() {
        if (priceDeprecatedBuilder_ != null) {
          return priceDeprecatedBuilder_.getMessageOrBuilder();
        } else {
          return priceDeprecated_;
        }
      }
      /**
       * <code>optional .Offer priceDeprecated = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
          getPriceDeprecatedFieldBuilder() {
        if (priceDeprecatedBuilder_ == null) {
          priceDeprecatedBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder>(
                  priceDeprecated_,
                  getParentForChildren(),
                  isClean());
          priceDeprecated_ = null;
        }
        return priceDeprecatedBuilder_;
      }

      // optional .Availability availability = 9;
      private com.akdeniz.googleplaycrawler.GooglePlay.Availability availability_ = com.akdeniz.googleplaycrawler.GooglePlay.Availability.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Availability, com.akdeniz.googleplaycrawler.GooglePlay.Availability.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AvailabilityOrBuilder> availabilityBuilder_;
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public boolean hasAvailability() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Availability getAvailability() {
        if (availabilityBuilder_ == null) {
          return availability_;
        } else {
          return availabilityBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public Builder setAvailability(com.akdeniz.googleplaycrawler.GooglePlay.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          availability_ = value;
          onChanged();
        } else {
          availabilityBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public Builder setAvailability(
          com.akdeniz.googleplaycrawler.GooglePlay.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          availability_ = builderForValue.build();
          onChanged();
        } else {
          availabilityBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public Builder mergeAvailability(com.akdeniz.googleplaycrawler.GooglePlay.Availability value) {
        if (availabilityBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              availability_ != com.akdeniz.googleplaycrawler.GooglePlay.Availability.getDefaultInstance()) {
            availability_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Availability.newBuilder(availability_).mergeFrom(value).buildPartial();
          } else {
            availability_ = value;
          }
          onChanged();
        } else {
          availabilityBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public Builder clearAvailability() {
        if (availabilityBuilder_ == null) {
          availability_ = com.akdeniz.googleplaycrawler.GooglePlay.Availability.getDefaultInstance();
          onChanged();
        } else {
          availabilityBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Availability.Builder getAvailabilityBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getAvailabilityFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AvailabilityOrBuilder getAvailabilityOrBuilder() {
        if (availabilityBuilder_ != null) {
          return availabilityBuilder_.getMessageOrBuilder();
        } else {
          return availability_;
        }
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Availability, com.akdeniz.googleplaycrawler.GooglePlay.Availability.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AvailabilityOrBuilder> 
          getAvailabilityFieldBuilder() {
        if (availabilityBuilder_ == null) {
          availabilityBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Availability, com.akdeniz.googleplaycrawler.GooglePlay.Availability.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AvailabilityOrBuilder>(
                  availability_,
                  getParentForChildren(),
                  isClean());
          availability_ = null;
        }
        return availabilityBuilder_;
      }

      // repeated .Image image = 10;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Image> image_ =
        java.util.Collections.emptyList();
      private void ensureImageIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          image_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Image>(image_);
          bitField0_ |= 0x00000100;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Image, com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder> imageBuilder_;

      /**
       * <code>repeated .Image image = 10;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Image> getImageList() {
        if (imageBuilder_ == null) {
          return java.util.Collections.unmodifiableList(image_);
        } else {
          return imageBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public int getImageCount() {
        if (imageBuilder_ == null) {
          return image_.size();
        } else {
          return imageBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Image getImage(int index) {
        if (imageBuilder_ == null) {
          return image_.get(index);
        } else {
          return imageBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder setImage(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Image value) {
        if (imageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureImageIsMutable();
          image_.set(index, value);
          onChanged();
        } else {
          imageBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder setImage(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder builderForValue) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          image_.set(index, builderForValue.build());
          onChanged();
        } else {
          imageBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder addImage(com.akdeniz.googleplaycrawler.GooglePlay.Image value) {
        if (imageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureImageIsMutable();
          image_.add(value);
          onChanged();
        } else {
          imageBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder addImage(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Image value) {
        if (imageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureImageIsMutable();
          image_.add(index, value);
          onChanged();
        } else {
          imageBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder addImage(
          com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder builderForValue) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          image_.add(builderForValue.build());
          onChanged();
        } else {
          imageBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder addImage(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder builderForValue) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          image_.add(index, builderForValue.build());
          onChanged();
        } else {
          imageBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder addAllImage(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Image> values) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          super.addAll(values, image_);
          onChanged();
        } else {
          imageBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder clearImage() {
        if (imageBuilder_ == null) {
          image_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          imageBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder removeImage(int index) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          image_.remove(index);
          onChanged();
        } else {
          imageBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder getImageBuilder(
          int index) {
        return getImageFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder getImageOrBuilder(
          int index) {
        if (imageBuilder_ == null) {
          return image_.get(index);  } else {
          return imageBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder> 
           getImageOrBuilderList() {
        if (imageBuilder_ != null) {
          return imageBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(image_);
        }
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder addImageBuilder() {
        return getImageFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Image.getDefaultInstance());
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder addImageBuilder(
          int index) {
        return getImageFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Image.getDefaultInstance());
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder> 
           getImageBuilderList() {
        return getImageFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Image, com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder> 
          getImageFieldBuilder() {
        if (imageBuilder_ == null) {
          imageBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Image, com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder>(
                  image_,
                  ((bitField0_ & 0x00000100) == 0x00000100),
                  getParentForChildren(),
                  isClean());
          image_ = null;
        }
        return imageBuilder_;
      }

      // repeated .Document child = 11;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> child_ =
        java.util.Collections.emptyList();
      private void ensureChildIsMutable() {
        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
          child_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Document>(child_);
          bitField0_ |= 0x00000200;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> childBuilder_;

      /**
       * <code>repeated .Document child = 11;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> getChildList() {
        if (childBuilder_ == null) {
          return java.util.Collections.unmodifiableList(child_);
        } else {
          return childBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public int getChildCount() {
        if (childBuilder_ == null) {
          return child_.size();
        } else {
          return childBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document getChild(int index) {
        if (childBuilder_ == null) {
          return child_.get(index);
        } else {
          return childBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public Builder setChild(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (childBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildIsMutable();
          child_.set(index, value);
          onChanged();
        } else {
          childBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public Builder setChild(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.set(index, builderForValue.build());
          onChanged();
        } else {
          childBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public Builder addChild(com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (childBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildIsMutable();
          child_.add(value);
          onChanged();
        } else {
          childBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public Builder addChild(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (childBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildIsMutable();
          child_.add(index, value);
          onChanged();
        } else {
          childBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public Builder addChild(
          com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.add(builderForValue.build());
          onChanged();
        } else {
          childBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public Builder addChild(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.add(index, builderForValue.build());
          onChanged();
        } else {
          childBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public Builder addAllChild(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Document> values) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          super.addAll(values, child_);
          onChanged();
        } else {
          childBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public Builder clearChild() {
        if (childBuilder_ == null) {
          child_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
          onChanged();
        } else {
          childBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public Builder removeChild(int index) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.remove(index);
          onChanged();
        } else {
          childBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder getChildBuilder(
          int index) {
        return getChildFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getChildOrBuilder(
          int index) {
        if (childBuilder_ == null) {
          return child_.get(index);  } else {
          return childBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
           getChildOrBuilderList() {
        if (childBuilder_ != null) {
          return childBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(child_);
        }
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder addChildBuilder() {
        return getChildFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance());
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder addChildBuilder(
          int index) {
        return getChildFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance());
      }
      /**
       * <code>repeated .Document child = 11;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder> 
           getChildBuilderList() {
        return getChildFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
          getChildFieldBuilder() {
        if (childBuilder_ == null) {
          childBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder>(
                  child_,
                  ((bitField0_ & 0x00000200) == 0x00000200),
                  getParentForChildren(),
                  isClean());
          child_ = null;
        }
        return childBuilder_;
      }

      // optional .AggregateRating aggregateRating = 13;
      private com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating aggregateRating_ = com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating, com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AggregateRatingOrBuilder> aggregateRatingBuilder_;
      /**
       * <code>optional .AggregateRating aggregateRating = 13;</code>
       */
      public boolean hasAggregateRating() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 13;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating getAggregateRating() {
        if (aggregateRatingBuilder_ == null) {
          return aggregateRating_;
        } else {
          return aggregateRatingBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 13;</code>
       */
      public Builder setAggregateRating(com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating value) {
        if (aggregateRatingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          aggregateRating_ = value;
          onChanged();
        } else {
          aggregateRatingBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 13;</code>
       */
      public Builder setAggregateRating(
          com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.Builder builderForValue) {
        if (aggregateRatingBuilder_ == null) {
          aggregateRating_ = builderForValue.build();
          onChanged();
        } else {
          aggregateRatingBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 13;</code>
       */
      public Builder mergeAggregateRating(com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating value) {
        if (aggregateRatingBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400) &&
              aggregateRating_ != com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.getDefaultInstance()) {
            aggregateRating_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.newBuilder(aggregateRating_).mergeFrom(value).buildPartial();
          } else {
            aggregateRating_ = value;
          }
          onChanged();
        } else {
          aggregateRatingBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 13;</code>
       */
      public Builder clearAggregateRating() {
        if (aggregateRatingBuilder_ == null) {
          aggregateRating_ = com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.getDefaultInstance();
          onChanged();
        } else {
          aggregateRatingBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 13;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.Builder getAggregateRatingBuilder() {
        bitField0_ |= 0x00000400;
        onChanged();
        return getAggregateRatingFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 13;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AggregateRatingOrBuilder getAggregateRatingOrBuilder() {
        if (aggregateRatingBuilder_ != null) {
          return aggregateRatingBuilder_.getMessageOrBuilder();
        } else {
          return aggregateRating_;
        }
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 13;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating, com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AggregateRatingOrBuilder> 
          getAggregateRatingFieldBuilder() {
        if (aggregateRatingBuilder_ == null) {
          aggregateRatingBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating, com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AggregateRatingOrBuilder>(
                  aggregateRating_,
                  getParentForChildren(),
                  isClean());
          aggregateRating_ = null;
        }
        return aggregateRatingBuilder_;
      }

      // repeated .Offer offer = 14;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> offer_ =
        java.util.Collections.emptyList();
      private void ensureOfferIsMutable() {
        if (!((bitField0_ & 0x00000800) == 0x00000800)) {
          offer_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Offer>(offer_);
          bitField0_ |= 0x00000800;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> offerBuilder_;

      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> getOfferList() {
        if (offerBuilder_ == null) {
          return java.util.Collections.unmodifiableList(offer_);
        } else {
          return offerBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public int getOfferCount() {
        if (offerBuilder_ == null) {
          return offer_.size();
        } else {
          return offerBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer getOffer(int index) {
        if (offerBuilder_ == null) {
          return offer_.get(index);
        } else {
          return offerBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public Builder setOffer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (offerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOfferIsMutable();
          offer_.set(index, value);
          onChanged();
        } else {
          offerBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public Builder setOffer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder builderForValue) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          offer_.set(index, builderForValue.build());
          onChanged();
        } else {
          offerBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public Builder addOffer(com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (offerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOfferIsMutable();
          offer_.add(value);
          onChanged();
        } else {
          offerBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public Builder addOffer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (offerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOfferIsMutable();
          offer_.add(index, value);
          onChanged();
        } else {
          offerBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public Builder addOffer(
          com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder builderForValue) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          offer_.add(builderForValue.build());
          onChanged();
        } else {
          offerBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public Builder addOffer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder builderForValue) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          offer_.add(index, builderForValue.build());
          onChanged();
        } else {
          offerBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public Builder addAllOffer(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Offer> values) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          super.addAll(values, offer_);
          onChanged();
        } else {
          offerBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public Builder clearOffer() {
        if (offerBuilder_ == null) {
          offer_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000800);
          onChanged();
        } else {
          offerBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public Builder removeOffer(int index) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          offer_.remove(index);
          onChanged();
        } else {
          offerBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder getOfferBuilder(
          int index) {
        return getOfferFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getOfferOrBuilder(
          int index) {
        if (offerBuilder_ == null) {
          return offer_.get(index);  } else {
          return offerBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
           getOfferOrBuilderList() {
        if (offerBuilder_ != null) {
          return offerBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(offer_);
        }
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder addOfferBuilder() {
        return getOfferFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance());
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder addOfferBuilder(
          int index) {
        return getOfferFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance());
      }
      /**
       * <code>repeated .Offer offer = 14;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder> 
           getOfferBuilderList() {
        return getOfferFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
          getOfferFieldBuilder() {
        if (offerBuilder_ == null) {
          offerBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder>(
                  offer_,
                  ((bitField0_ & 0x00000800) == 0x00000800),
                  getParentForChildren(),
                  isClean());
          offer_ = null;
        }
        return offerBuilder_;
      }

      // repeated .TranslatedText translatedSnippet = 15;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText> translatedSnippet_ =
        java.util.Collections.emptyList();
      private void ensureTranslatedSnippetIsMutable() {
        if (!((bitField0_ & 0x00001000) == 0x00001000)) {
          translatedSnippet_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText>(translatedSnippet_);
          bitField0_ |= 0x00001000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder> translatedSnippetBuilder_;

      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText> getTranslatedSnippetList() {
        if (translatedSnippetBuilder_ == null) {
          return java.util.Collections.unmodifiableList(translatedSnippet_);
        } else {
          return translatedSnippetBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public int getTranslatedSnippetCount() {
        if (translatedSnippetBuilder_ == null) {
          return translatedSnippet_.size();
        } else {
          return translatedSnippetBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText getTranslatedSnippet(int index) {
        if (translatedSnippetBuilder_ == null) {
          return translatedSnippet_.get(index);
        } else {
          return translatedSnippetBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public Builder setTranslatedSnippet(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText value) {
        if (translatedSnippetBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTranslatedSnippetIsMutable();
          translatedSnippet_.set(index, value);
          onChanged();
        } else {
          translatedSnippetBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public Builder setTranslatedSnippet(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder builderForValue) {
        if (translatedSnippetBuilder_ == null) {
          ensureTranslatedSnippetIsMutable();
          translatedSnippet_.set(index, builderForValue.build());
          onChanged();
        } else {
          translatedSnippetBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public Builder addTranslatedSnippet(com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText value) {
        if (translatedSnippetBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTranslatedSnippetIsMutable();
          translatedSnippet_.add(value);
          onChanged();
        } else {
          translatedSnippetBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public Builder addTranslatedSnippet(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText value) {
        if (translatedSnippetBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTranslatedSnippetIsMutable();
          translatedSnippet_.add(index, value);
          onChanged();
        } else {
          translatedSnippetBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public Builder addTranslatedSnippet(
          com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder builderForValue) {
        if (translatedSnippetBuilder_ == null) {
          ensureTranslatedSnippetIsMutable();
          translatedSnippet_.add(builderForValue.build());
          onChanged();
        } else {
          translatedSnippetBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public Builder addTranslatedSnippet(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder builderForValue) {
        if (translatedSnippetBuilder_ == null) {
          ensureTranslatedSnippetIsMutable();
          translatedSnippet_.add(index, builderForValue.build());
          onChanged();
        } else {
          translatedSnippetBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public Builder addAllTranslatedSnippet(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText> values) {
        if (translatedSnippetBuilder_ == null) {
          ensureTranslatedSnippetIsMutable();
          super.addAll(values, translatedSnippet_);
          onChanged();
        } else {
          translatedSnippetBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public Builder clearTranslatedSnippet() {
        if (translatedSnippetBuilder_ == null) {
          translatedSnippet_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00001000);
          onChanged();
        } else {
          translatedSnippetBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public Builder removeTranslatedSnippet(int index) {
        if (translatedSnippetBuilder_ == null) {
          ensureTranslatedSnippetIsMutable();
          translatedSnippet_.remove(index);
          onChanged();
        } else {
          translatedSnippetBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder getTranslatedSnippetBuilder(
          int index) {
        return getTranslatedSnippetFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder getTranslatedSnippetOrBuilder(
          int index) {
        if (translatedSnippetBuilder_ == null) {
          return translatedSnippet_.get(index);  } else {
          return translatedSnippetBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder> 
           getTranslatedSnippetOrBuilderList() {
        if (translatedSnippetBuilder_ != null) {
          return translatedSnippetBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(translatedSnippet_);
        }
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder addTranslatedSnippetBuilder() {
        return getTranslatedSnippetFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.getDefaultInstance());
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder addTranslatedSnippetBuilder(
          int index) {
        return getTranslatedSnippetFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.getDefaultInstance());
      }
      /**
       * <code>repeated .TranslatedText translatedSnippet = 15;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder> 
           getTranslatedSnippetBuilderList() {
        return getTranslatedSnippetFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder> 
          getTranslatedSnippetFieldBuilder() {
        if (translatedSnippetBuilder_ == null) {
          translatedSnippetBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder>(
                  translatedSnippet_,
                  ((bitField0_ & 0x00001000) == 0x00001000),
                  getParentForChildren(),
                  isClean());
          translatedSnippet_ = null;
        }
        return translatedSnippetBuilder_;
      }

      // repeated .DocumentVariant documentVariant = 16;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant> documentVariant_ =
        java.util.Collections.emptyList();
      private void ensureDocumentVariantIsMutable() {
        if (!((bitField0_ & 0x00002000) == 0x00002000)) {
          documentVariant_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant>(documentVariant_);
          bitField0_ |= 0x00002000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant, com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariantOrBuilder> documentVariantBuilder_;

      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant> getDocumentVariantList() {
        if (documentVariantBuilder_ == null) {
          return java.util.Collections.unmodifiableList(documentVariant_);
        } else {
          return documentVariantBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public int getDocumentVariantCount() {
        if (documentVariantBuilder_ == null) {
          return documentVariant_.size();
        } else {
          return documentVariantBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant getDocumentVariant(int index) {
        if (documentVariantBuilder_ == null) {
          return documentVariant_.get(index);
        } else {
          return documentVariantBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public Builder setDocumentVariant(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant value) {
        if (documentVariantBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocumentVariantIsMutable();
          documentVariant_.set(index, value);
          onChanged();
        } else {
          documentVariantBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public Builder setDocumentVariant(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.Builder builderForValue) {
        if (documentVariantBuilder_ == null) {
          ensureDocumentVariantIsMutable();
          documentVariant_.set(index, builderForValue.build());
          onChanged();
        } else {
          documentVariantBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public Builder addDocumentVariant(com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant value) {
        if (documentVariantBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocumentVariantIsMutable();
          documentVariant_.add(value);
          onChanged();
        } else {
          documentVariantBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public Builder addDocumentVariant(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant value) {
        if (documentVariantBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocumentVariantIsMutable();
          documentVariant_.add(index, value);
          onChanged();
        } else {
          documentVariantBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public Builder addDocumentVariant(
          com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.Builder builderForValue) {
        if (documentVariantBuilder_ == null) {
          ensureDocumentVariantIsMutable();
          documentVariant_.add(builderForValue.build());
          onChanged();
        } else {
          documentVariantBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public Builder addDocumentVariant(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.Builder builderForValue) {
        if (documentVariantBuilder_ == null) {
          ensureDocumentVariantIsMutable();
          documentVariant_.add(index, builderForValue.build());
          onChanged();
        } else {
          documentVariantBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public Builder addAllDocumentVariant(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant> values) {
        if (documentVariantBuilder_ == null) {
          ensureDocumentVariantIsMutable();
          super.addAll(values, documentVariant_);
          onChanged();
        } else {
          documentVariantBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public Builder clearDocumentVariant() {
        if (documentVariantBuilder_ == null) {
          documentVariant_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00002000);
          onChanged();
        } else {
          documentVariantBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public Builder removeDocumentVariant(int index) {
        if (documentVariantBuilder_ == null) {
          ensureDocumentVariantIsMutable();
          documentVariant_.remove(index);
          onChanged();
        } else {
          documentVariantBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.Builder getDocumentVariantBuilder(
          int index) {
        return getDocumentVariantFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariantOrBuilder getDocumentVariantOrBuilder(
          int index) {
        if (documentVariantBuilder_ == null) {
          return documentVariant_.get(index);  } else {
          return documentVariantBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariantOrBuilder> 
           getDocumentVariantOrBuilderList() {
        if (documentVariantBuilder_ != null) {
          return documentVariantBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(documentVariant_);
        }
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.Builder addDocumentVariantBuilder() {
        return getDocumentVariantFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.getDefaultInstance());
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.Builder addDocumentVariantBuilder(
          int index) {
        return getDocumentVariantFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.getDefaultInstance());
      }
      /**
       * <code>repeated .DocumentVariant documentVariant = 16;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.Builder> 
           getDocumentVariantBuilderList() {
        return getDocumentVariantFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant, com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariantOrBuilder> 
          getDocumentVariantFieldBuilder() {
        if (documentVariantBuilder_ == null) {
          documentVariantBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant, com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariantOrBuilder>(
                  documentVariant_,
                  ((bitField0_ & 0x00002000) == 0x00002000),
                  getParentForChildren(),
                  isClean());
          documentVariant_ = null;
        }
        return documentVariantBuilder_;
      }

      // repeated string categoryId = 17;
      private com.google.protobuf.LazyStringList categoryId_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureCategoryIdIsMutable() {
        if (!((bitField0_ & 0x00004000) == 0x00004000)) {
          categoryId_ = new com.google.protobuf.LazyStringArrayList(categoryId_);
          bitField0_ |= 0x00004000;
         }
      }
      /**
       * <code>repeated string categoryId = 17;</code>
       */
      public java.util.List<java.lang.String>
          getCategoryIdList() {
        return java.util.Collections.unmodifiableList(categoryId_);
      }
      /**
       * <code>repeated string categoryId = 17;</code>
       */
      public int getCategoryIdCount() {
        return categoryId_.size();
      }
      /**
       * <code>repeated string categoryId = 17;</code>
       */
      public java.lang.String getCategoryId(int index) {
        return categoryId_.get(index);
      }
      /**
       * <code>repeated string categoryId = 17;</code>
       */
      public com.google.protobuf.ByteString
          getCategoryIdBytes(int index) {
        return categoryId_.getByteString(index);
      }
      /**
       * <code>repeated string categoryId = 17;</code>
       */
      public Builder setCategoryId(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCategoryIdIsMutable();
        categoryId_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string categoryId = 17;</code>
       */
      public Builder addCategoryId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCategoryIdIsMutable();
        categoryId_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string categoryId = 17;</code>
       */
      public Builder addAllCategoryId(
          java.lang.Iterable<java.lang.String> values) {
        ensureCategoryIdIsMutable();
        super.addAll(values, categoryId_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string categoryId = 17;</code>
       */
      public Builder clearCategoryId() {
        categoryId_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00004000);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string categoryId = 17;</code>
       */
      public Builder addCategoryIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureCategoryIdIsMutable();
        categoryId_.add(value);
        onChanged();
        return this;
      }

      // repeated .Document decoration = 18;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> decoration_ =
        java.util.Collections.emptyList();
      private void ensureDecorationIsMutable() {
        if (!((bitField0_ & 0x00008000) == 0x00008000)) {
          decoration_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Document>(decoration_);
          bitField0_ |= 0x00008000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> decorationBuilder_;

      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> getDecorationList() {
        if (decorationBuilder_ == null) {
          return java.util.Collections.unmodifiableList(decoration_);
        } else {
          return decorationBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public int getDecorationCount() {
        if (decorationBuilder_ == null) {
          return decoration_.size();
        } else {
          return decorationBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document getDecoration(int index) {
        if (decorationBuilder_ == null) {
          return decoration_.get(index);
        } else {
          return decorationBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public Builder setDecoration(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (decorationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDecorationIsMutable();
          decoration_.set(index, value);
          onChanged();
        } else {
          decorationBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public Builder setDecoration(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (decorationBuilder_ == null) {
          ensureDecorationIsMutable();
          decoration_.set(index, builderForValue.build());
          onChanged();
        } else {
          decorationBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public Builder addDecoration(com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (decorationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDecorationIsMutable();
          decoration_.add(value);
          onChanged();
        } else {
          decorationBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public Builder addDecoration(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (decorationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDecorationIsMutable();
          decoration_.add(index, value);
          onChanged();
        } else {
          decorationBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public Builder addDecoration(
          com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (decorationBuilder_ == null) {
          ensureDecorationIsMutable();
          decoration_.add(builderForValue.build());
          onChanged();
        } else {
          decorationBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public Builder addDecoration(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (decorationBuilder_ == null) {
          ensureDecorationIsMutable();
          decoration_.add(index, builderForValue.build());
          onChanged();
        } else {
          decorationBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public Builder addAllDecoration(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Document> values) {
        if (decorationBuilder_ == null) {
          ensureDecorationIsMutable();
          super.addAll(values, decoration_);
          onChanged();
        } else {
          decorationBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public Builder clearDecoration() {
        if (decorationBuilder_ == null) {
          decoration_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
          onChanged();
        } else {
          decorationBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public Builder removeDecoration(int index) {
        if (decorationBuilder_ == null) {
          ensureDecorationIsMutable();
          decoration_.remove(index);
          onChanged();
        } else {
          decorationBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder getDecorationBuilder(
          int index) {
        return getDecorationFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getDecorationOrBuilder(
          int index) {
        if (decorationBuilder_ == null) {
          return decoration_.get(index);  } else {
          return decorationBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
           getDecorationOrBuilderList() {
        if (decorationBuilder_ != null) {
          return decorationBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(decoration_);
        }
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder addDecorationBuilder() {
        return getDecorationFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance());
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder addDecorationBuilder(
          int index) {
        return getDecorationFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance());
      }
      /**
       * <code>repeated .Document decoration = 18;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder> 
           getDecorationBuilderList() {
        return getDecorationFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
          getDecorationFieldBuilder() {
        if (decorationBuilder_ == null) {
          decorationBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder>(
                  decoration_,
                  ((bitField0_ & 0x00008000) == 0x00008000),
                  getParentForChildren(),
                  isClean());
          decoration_ = null;
        }
        return decorationBuilder_;
      }

      // repeated .Document parent = 19;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> parent_ =
        java.util.Collections.emptyList();
      private void ensureParentIsMutable() {
        if (!((bitField0_ & 0x00010000) == 0x00010000)) {
          parent_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Document>(parent_);
          bitField0_ |= 0x00010000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> parentBuilder_;

      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> getParentList() {
        if (parentBuilder_ == null) {
          return java.util.Collections.unmodifiableList(parent_);
        } else {
          return parentBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public int getParentCount() {
        if (parentBuilder_ == null) {
          return parent_.size();
        } else {
          return parentBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document getParent(int index) {
        if (parentBuilder_ == null) {
          return parent_.get(index);
        } else {
          return parentBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public Builder setParent(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (parentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureParentIsMutable();
          parent_.set(index, value);
          onChanged();
        } else {
          parentBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public Builder setParent(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (parentBuilder_ == null) {
          ensureParentIsMutable();
          parent_.set(index, builderForValue.build());
          onChanged();
        } else {
          parentBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public Builder addParent(com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (parentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureParentIsMutable();
          parent_.add(value);
          onChanged();
        } else {
          parentBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public Builder addParent(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (parentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureParentIsMutable();
          parent_.add(index, value);
          onChanged();
        } else {
          parentBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public Builder addParent(
          com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (parentBuilder_ == null) {
          ensureParentIsMutable();
          parent_.add(builderForValue.build());
          onChanged();
        } else {
          parentBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public Builder addParent(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (parentBuilder_ == null) {
          ensureParentIsMutable();
          parent_.add(index, builderForValue.build());
          onChanged();
        } else {
          parentBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public Builder addAllParent(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Document> values) {
        if (parentBuilder_ == null) {
          ensureParentIsMutable();
          super.addAll(values, parent_);
          onChanged();
        } else {
          parentBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public Builder clearParent() {
        if (parentBuilder_ == null) {
          parent_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00010000);
          onChanged();
        } else {
          parentBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public Builder removeParent(int index) {
        if (parentBuilder_ == null) {
          ensureParentIsMutable();
          parent_.remove(index);
          onChanged();
        } else {
          parentBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder getParentBuilder(
          int index) {
        return getParentFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getParentOrBuilder(
          int index) {
        if (parentBuilder_ == null) {
          return parent_.get(index);  } else {
          return parentBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
           getParentOrBuilderList() {
        if (parentBuilder_ != null) {
          return parentBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(parent_);
        }
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder addParentBuilder() {
        return getParentFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance());
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder addParentBuilder(
          int index) {
        return getParentFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance());
      }
      /**
       * <code>repeated .Document parent = 19;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder> 
           getParentBuilderList() {
        return getParentFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
          getParentFieldBuilder() {
        if (parentBuilder_ == null) {
          parentBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder>(
                  parent_,
                  ((bitField0_ & 0x00010000) == 0x00010000),
                  getParentForChildren(),
                  isClean());
          parent_ = null;
        }
        return parentBuilder_;
      }

      // optional string privacyPolicyUrl = 20;
      private java.lang.Object privacyPolicyUrl_ = "";
      /**
       * <code>optional string privacyPolicyUrl = 20;</code>
       */
      public boolean hasPrivacyPolicyUrl() {
        return ((bitField0_ & 0x00020000) == 0x00020000);
      }
      /**
       * <code>optional string privacyPolicyUrl = 20;</code>
       */
      public java.lang.String getPrivacyPolicyUrl() {
        java.lang.Object ref = privacyPolicyUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          privacyPolicyUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string privacyPolicyUrl = 20;</code>
       */
      public com.google.protobuf.ByteString
          getPrivacyPolicyUrlBytes() {
        java.lang.Object ref = privacyPolicyUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          privacyPolicyUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string privacyPolicyUrl = 20;</code>
       */
      public Builder setPrivacyPolicyUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00020000;
        privacyPolicyUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string privacyPolicyUrl = 20;</code>
       */
      public Builder clearPrivacyPolicyUrl() {
        bitField0_ = (bitField0_ & ~0x00020000);
        privacyPolicyUrl_ = getDefaultInstance().getPrivacyPolicyUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string privacyPolicyUrl = 20;</code>
       */
      public Builder setPrivacyPolicyUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00020000;
        privacyPolicyUrl_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Document)
    }

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

    // @@protoc_insertion_point(class_scope:Document)
  }

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

    // optional int32 variationType = 1;
    /**
     * <code>optional int32 variationType = 1;</code>
     */
    boolean hasVariationType();
    /**
     * <code>optional int32 variationType = 1;</code>
     */
    int getVariationType();

    // optional .Rule rule = 2;
    /**
     * <code>optional .Rule rule = 2;</code>
     */
    boolean hasRule();
    /**
     * <code>optional .Rule rule = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Rule getRule();
    /**
     * <code>optional .Rule rule = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder getRuleOrBuilder();

    // optional string title = 3;
    /**
     * <code>optional string title = 3;</code>
     */
    boolean hasTitle();
    /**
     * <code>optional string title = 3;</code>
     */
    java.lang.String getTitle();
    /**
     * <code>optional string title = 3;</code>
     */
    com.google.protobuf.ByteString
        getTitleBytes();

    // repeated string snippet = 4;
    /**
     * <code>repeated string snippet = 4;</code>
     */
    java.util.List<java.lang.String>
    getSnippetList();
    /**
     * <code>repeated string snippet = 4;</code>
     */
    int getSnippetCount();
    /**
     * <code>repeated string snippet = 4;</code>
     */
    java.lang.String getSnippet(int index);
    /**
     * <code>repeated string snippet = 4;</code>
     */
    com.google.protobuf.ByteString
        getSnippetBytes(int index);

    // optional string recentChanges = 5;
    /**
     * <code>optional string recentChanges = 5;</code>
     */
    boolean hasRecentChanges();
    /**
     * <code>optional string recentChanges = 5;</code>
     */
    java.lang.String getRecentChanges();
    /**
     * <code>optional string recentChanges = 5;</code>
     */
    com.google.protobuf.ByteString
        getRecentChangesBytes();

    // repeated .TranslatedText autoTranslation = 6;
    /**
     * <code>repeated .TranslatedText autoTranslation = 6;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText> 
        getAutoTranslationList();
    /**
     * <code>repeated .TranslatedText autoTranslation = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText getAutoTranslation(int index);
    /**
     * <code>repeated .TranslatedText autoTranslation = 6;</code>
     */
    int getAutoTranslationCount();
    /**
     * <code>repeated .TranslatedText autoTranslation = 6;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder> 
        getAutoTranslationOrBuilderList();
    /**
     * <code>repeated .TranslatedText autoTranslation = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder getAutoTranslationOrBuilder(
        int index);

    // repeated .Offer offer = 7;
    /**
     * <code>repeated .Offer offer = 7;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> 
        getOfferList();
    /**
     * <code>repeated .Offer offer = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Offer getOffer(int index);
    /**
     * <code>repeated .Offer offer = 7;</code>
     */
    int getOfferCount();
    /**
     * <code>repeated .Offer offer = 7;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
        getOfferOrBuilderList();
    /**
     * <code>repeated .Offer offer = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getOfferOrBuilder(
        int index);

    // optional int64 channelId = 9;
    /**
     * <code>optional int64 channelId = 9;</code>
     */
    boolean hasChannelId();
    /**
     * <code>optional int64 channelId = 9;</code>
     */
    long getChannelId();

    // repeated .Document child = 10;
    /**
     * <code>repeated .Document child = 10;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> 
        getChildList();
    /**
     * <code>repeated .Document child = 10;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Document getChild(int index);
    /**
     * <code>repeated .Document child = 10;</code>
     */
    int getChildCount();
    /**
     * <code>repeated .Document child = 10;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
        getChildOrBuilderList();
    /**
     * <code>repeated .Document child = 10;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getChildOrBuilder(
        int index);

    // repeated .Document decoration = 11;
    /**
     * <code>repeated .Document decoration = 11;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> 
        getDecorationList();
    /**
     * <code>repeated .Document decoration = 11;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Document getDecoration(int index);
    /**
     * <code>repeated .Document decoration = 11;</code>
     */
    int getDecorationCount();
    /**
     * <code>repeated .Document decoration = 11;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
        getDecorationOrBuilderList();
    /**
     * <code>repeated .Document decoration = 11;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getDecorationOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code DocumentVariant}
   */
  public static final class DocumentVariant extends
      com.google.protobuf.GeneratedMessage
      implements DocumentVariantOrBuilder {
    // Use DocumentVariant.newBuilder() to construct.
    private DocumentVariant(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DocumentVariant(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public DocumentVariant getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DocumentVariant(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              variationType_ = input.readInt32();
              break;
            }
            case 18: {
              com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = rule_.toBuilder();
              }
              rule_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Rule.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(rule_);
                rule_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              title_ = input.readBytes();
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                snippet_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000008;
              }
              snippet_.add(input.readBytes());
              break;
            }
            case 42: {
              bitField0_ |= 0x00000008;
              recentChanges_ = input.readBytes();
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                autoTranslation_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText>();
                mutable_bitField0_ |= 0x00000020;
              }
              autoTranslation_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.PARSER, extensionRegistry));
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                offer_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Offer>();
                mutable_bitField0_ |= 0x00000040;
              }
              offer_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Offer.PARSER, extensionRegistry));
              break;
            }
            case 72: {
              bitField0_ |= 0x00000010;
              channelId_ = input.readInt64();
              break;
            }
            case 82: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                child_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Document>();
                mutable_bitField0_ |= 0x00000100;
              }
              child_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Document.PARSER, extensionRegistry));
              break;
            }
            case 90: {
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                decoration_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Document>();
                mutable_bitField0_ |= 0x00000200;
              }
              decoration_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Document.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          snippet_ = new com.google.protobuf.UnmodifiableLazyStringList(snippet_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          autoTranslation_ = java.util.Collections.unmodifiableList(autoTranslation_);
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          offer_ = java.util.Collections.unmodifiableList(offer_);
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          child_ = java.util.Collections.unmodifiableList(child_);
        }
        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
          decoration_ = java.util.Collections.unmodifiableList(decoration_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocumentVariant_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocumentVariant_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.class, com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 variationType = 1;
    public static final int VARIATIONTYPE_FIELD_NUMBER = 1;
    private int variationType_;
    /**
     * <code>optional int32 variationType = 1;</code>
     */
    public boolean hasVariationType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 variationType = 1;</code>
     */
    public int getVariationType() {
      return variationType_;
    }

    // optional .Rule rule = 2;
    public static final int RULE_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.Rule rule_;
    /**
     * <code>optional .Rule rule = 2;</code>
     */
    public boolean hasRule() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .Rule rule = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Rule getRule() {
      return rule_;
    }
    /**
     * <code>optional .Rule rule = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder getRuleOrBuilder() {
      return rule_;
    }

    // optional string title = 3;
    public static final int TITLE_FIELD_NUMBER = 3;
    private java.lang.Object title_;
    /**
     * <code>optional string title = 3;</code>
     */
    public boolean hasTitle() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string title = 3;</code>
     */
    public java.lang.String getTitle() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          title_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string title = 3;</code>
     */
    public com.google.protobuf.ByteString
        getTitleBytes() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        title_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated string snippet = 4;
    public static final int SNIPPET_FIELD_NUMBER = 4;
    private com.google.protobuf.LazyStringList snippet_;
    /**
     * <code>repeated string snippet = 4;</code>
     */
    public java.util.List<java.lang.String>
        getSnippetList() {
      return snippet_;
    }
    /**
     * <code>repeated string snippet = 4;</code>
     */
    public int getSnippetCount() {
      return snippet_.size();
    }
    /**
     * <code>repeated string snippet = 4;</code>
     */
    public java.lang.String getSnippet(int index) {
      return snippet_.get(index);
    }
    /**
     * <code>repeated string snippet = 4;</code>
     */
    public com.google.protobuf.ByteString
        getSnippetBytes(int index) {
      return snippet_.getByteString(index);
    }

    // optional string recentChanges = 5;
    public static final int RECENTCHANGES_FIELD_NUMBER = 5;
    private java.lang.Object recentChanges_;
    /**
     * <code>optional string recentChanges = 5;</code>
     */
    public boolean hasRecentChanges() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string recentChanges = 5;</code>
     */
    public java.lang.String getRecentChanges() {
      java.lang.Object ref = recentChanges_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          recentChanges_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string recentChanges = 5;</code>
     */
    public com.google.protobuf.ByteString
        getRecentChangesBytes() {
      java.lang.Object ref = recentChanges_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        recentChanges_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated .TranslatedText autoTranslation = 6;
    public static final int AUTOTRANSLATION_FIELD_NUMBER = 6;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText> autoTranslation_;
    /**
     * <code>repeated .TranslatedText autoTranslation = 6;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText> getAutoTranslationList() {
      return autoTranslation_;
    }
    /**
     * <code>repeated .TranslatedText autoTranslation = 6;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder> 
        getAutoTranslationOrBuilderList() {
      return autoTranslation_;
    }
    /**
     * <code>repeated .TranslatedText autoTranslation = 6;</code>
     */
    public int getAutoTranslationCount() {
      return autoTranslation_.size();
    }
    /**
     * <code>repeated .TranslatedText autoTranslation = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText getAutoTranslation(int index) {
      return autoTranslation_.get(index);
    }
    /**
     * <code>repeated .TranslatedText autoTranslation = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder getAutoTranslationOrBuilder(
        int index) {
      return autoTranslation_.get(index);
    }

    // repeated .Offer offer = 7;
    public static final int OFFER_FIELD_NUMBER = 7;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> offer_;
    /**
     * <code>repeated .Offer offer = 7;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> getOfferList() {
      return offer_;
    }
    /**
     * <code>repeated .Offer offer = 7;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
        getOfferOrBuilderList() {
      return offer_;
    }
    /**
     * <code>repeated .Offer offer = 7;</code>
     */
    public int getOfferCount() {
      return offer_.size();
    }
    /**
     * <code>repeated .Offer offer = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Offer getOffer(int index) {
      return offer_.get(index);
    }
    /**
     * <code>repeated .Offer offer = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getOfferOrBuilder(
        int index) {
      return offer_.get(index);
    }

    // optional int64 channelId = 9;
    public static final int CHANNELID_FIELD_NUMBER = 9;
    private long channelId_;
    /**
     * <code>optional int64 channelId = 9;</code>
     */
    public boolean hasChannelId() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int64 channelId = 9;</code>
     */
    public long getChannelId() {
      return channelId_;
    }

    // repeated .Document child = 10;
    public static final int CHILD_FIELD_NUMBER = 10;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> child_;
    /**
     * <code>repeated .Document child = 10;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> getChildList() {
      return child_;
    }
    /**
     * <code>repeated .Document child = 10;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
        getChildOrBuilderList() {
      return child_;
    }
    /**
     * <code>repeated .Document child = 10;</code>
     */
    public int getChildCount() {
      return child_.size();
    }
    /**
     * <code>repeated .Document child = 10;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Document getChild(int index) {
      return child_.get(index);
    }
    /**
     * <code>repeated .Document child = 10;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getChildOrBuilder(
        int index) {
      return child_.get(index);
    }

    // repeated .Document decoration = 11;
    public static final int DECORATION_FIELD_NUMBER = 11;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> decoration_;
    /**
     * <code>repeated .Document decoration = 11;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> getDecorationList() {
      return decoration_;
    }
    /**
     * <code>repeated .Document decoration = 11;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
        getDecorationOrBuilderList() {
      return decoration_;
    }
    /**
     * <code>repeated .Document decoration = 11;</code>
     */
    public int getDecorationCount() {
      return decoration_.size();
    }
    /**
     * <code>repeated .Document decoration = 11;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Document getDecoration(int index) {
      return decoration_.get(index);
    }
    /**
     * <code>repeated .Document decoration = 11;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getDecorationOrBuilder(
        int index) {
      return decoration_.get(index);
    }

    private void initFields() {
      variationType_ = 0;
      rule_ = com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance();
      title_ = "";
      snippet_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      recentChanges_ = "";
      autoTranslation_ = java.util.Collections.emptyList();
      offer_ = java.util.Collections.emptyList();
      channelId_ = 0L;
      child_ = java.util.Collections.emptyList();
      decoration_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, variationType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, rule_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getTitleBytes());
      }
      for (int i = 0; i < snippet_.size(); i++) {
        output.writeBytes(4, snippet_.getByteString(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(5, getRecentChangesBytes());
      }
      for (int i = 0; i < autoTranslation_.size(); i++) {
        output.writeMessage(6, autoTranslation_.get(i));
      }
      for (int i = 0; i < offer_.size(); i++) {
        output.writeMessage(7, offer_.get(i));
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(9, channelId_);
      }
      for (int i = 0; i < child_.size(); i++) {
        output.writeMessage(10, child_.get(i));
      }
      for (int i = 0; i < decoration_.size(); i++) {
        output.writeMessage(11, decoration_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, variationType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, rule_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getTitleBytes());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < snippet_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(snippet_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getSnippetList().size();
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getRecentChangesBytes());
      }
      for (int i = 0; i < autoTranslation_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, autoTranslation_.get(i));
      }
      for (int i = 0; i < offer_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, offer_.get(i));
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(9, channelId_);
      }
      for (int i = 0; i < child_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, child_.get(i));
      }
      for (int i = 0; i < decoration_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, decoration_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code DocumentVariant}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariantOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocumentVariant_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocumentVariant_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.class, com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        variationType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (ruleBuilder_ == null) {
          rule_ = com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance();
        } else {
          ruleBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        title_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        snippet_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        recentChanges_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        if (autoTranslationBuilder_ == null) {
          autoTranslation_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          autoTranslationBuilder_.clear();
        }
        if (offerBuilder_ == null) {
          offer_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          offerBuilder_.clear();
        }
        channelId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000080);
        if (childBuilder_ == null) {
          child_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          childBuilder_.clear();
        }
        if (decorationBuilder_ == null) {
          decoration_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
        } else {
          decorationBuilder_.clear();
        }
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocumentVariant_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant build() {
        com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant result = new com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.variationType_ = variationType_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (ruleBuilder_ == null) {
          result.rule_ = rule_;
        } else {
          result.rule_ = ruleBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.title_ = title_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          snippet_ = new com.google.protobuf.UnmodifiableLazyStringList(
              snippet_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.snippet_ = snippet_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        result.recentChanges_ = recentChanges_;
        if (autoTranslationBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            autoTranslation_ = java.util.Collections.unmodifiableList(autoTranslation_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.autoTranslation_ = autoTranslation_;
        } else {
          result.autoTranslation_ = autoTranslationBuilder_.build();
        }
        if (offerBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            offer_ = java.util.Collections.unmodifiableList(offer_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.offer_ = offer_;
        } else {
          result.offer_ = offerBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000010;
        }
        result.channelId_ = channelId_;
        if (childBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            child_ = java.util.Collections.unmodifiableList(child_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.child_ = child_;
        } else {
          result.child_ = childBuilder_.build();
        }
        if (decorationBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200)) {
            decoration_ = java.util.Collections.unmodifiableList(decoration_);
            bitField0_ = (bitField0_ & ~0x00000200);
          }
          result.decoration_ = decoration_;
        } else {
          result.decoration_ = decorationBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.DocumentVariant.getDefaultInstance()) return this;
        if (other.hasVariationType()) {
          setVariationType(other.getVariationType());
        }
        if (other.hasRule()) {
          mergeRule(other.getRule());
        }
        if (other.hasTitle()) {
          bitField0_ |= 0x00000004;
          title_ = other.title_;
          onChanged();
        }
        if (!other.snippet_.isEmpty()) {
          if (snippet_.isEmpty()) {
            snippet_ = other.snippet_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureSnippetIsMutable();
            snippet_.addAll(other.snippet_);
          }
          onChanged();
        }
        if (other.hasRecentChanges()) {
          bitField0_ |= 0x00000010;
          recentChanges_ = other.recentChanges_;
          onChanged();
        }
        if (autoTranslationBuilder_ == null) {
          if (!other.autoTranslation_.isEmpty()) {
            if (autoTranslation_.isEmpty()) {
              autoTranslation_ = other.autoTranslation_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureAutoTranslationIsMutable();
              autoTranslation_.addAll(other.autoTranslation_);
            }
            onChanged();
          }
        } else {
          if (!other.autoTranslation_.isEmpty()) {
            if (autoTranslationBuilder_.isEmpty()) {
              autoTranslationBuilder_.dispose();
              autoTranslationBuilder_ = null;
              autoTranslation_ = other.autoTranslation_;
              bitField0_ = (bitField0_ & ~0x00000020);
              autoTranslationBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getAutoTranslationFieldBuilder() : null;
            } else {
              autoTranslationBuilder_.addAllMessages(other.autoTranslation_);
            }
          }
        }
        if (offerBuilder_ == null) {
          if (!other.offer_.isEmpty()) {
            if (offer_.isEmpty()) {
              offer_ = other.offer_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureOfferIsMutable();
              offer_.addAll(other.offer_);
            }
            onChanged();
          }
        } else {
          if (!other.offer_.isEmpty()) {
            if (offerBuilder_.isEmpty()) {
              offerBuilder_.dispose();
              offerBuilder_ = null;
              offer_ = other.offer_;
              bitField0_ = (bitField0_ & ~0x00000040);
              offerBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getOfferFieldBuilder() : null;
            } else {
              offerBuilder_.addAllMessages(other.offer_);
            }
          }
        }
        if (other.hasChannelId()) {
          setChannelId(other.getChannelId());
        }
        if (childBuilder_ == null) {
          if (!other.child_.isEmpty()) {
            if (child_.isEmpty()) {
              child_ = other.child_;
              bitField0_ = (bitField0_ & ~0x00000100);
            } else {
              ensureChildIsMutable();
              child_.addAll(other.child_);
            }
            onChanged();
          }
        } else {
          if (!other.child_.isEmpty()) {
            if (childBuilder_.isEmpty()) {
              childBuilder_.dispose();
              childBuilder_ = null;
              child_ = other.child_;
              bitField0_ = (bitField0_ & ~0x00000100);
              childBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getChildFieldBuilder() : null;
            } else {
              childBuilder_.addAllMessages(other.child_);
            }
          }
        }
        if (decorationBuilder_ == null) {
          if (!other.decoration_.isEmpty()) {
            if (decoration_.isEmpty()) {
              decoration_ = other.decoration_;
              bitField0_ = (bitField0_ & ~0x00000200);
            } else {
              ensureDecorationIsMutable();
              decoration_.addAll(other.decoration_);
            }
            onChanged();
          }
        } else {
          if (!other.decoration_.isEmpty()) {
            if (decorationBuilder_.isEmpty()) {
              decorationBuilder_.dispose();
              decorationBuilder_ = null;
              decoration_ = other.decoration_;
              bitField0_ = (bitField0_ & ~0x00000200);
              decorationBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getDecorationFieldBuilder() : null;
            } else {
              decorationBuilder_.addAllMessages(other.decoration_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 variationType = 1;
      private int variationType_ ;
      /**
       * <code>optional int32 variationType = 1;</code>
       */
      public boolean hasVariationType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 variationType = 1;</code>
       */
      public int getVariationType() {
        return variationType_;
      }
      /**
       * <code>optional int32 variationType = 1;</code>
       */
      public Builder setVariationType(int value) {
        bitField0_ |= 0x00000001;
        variationType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 variationType = 1;</code>
       */
      public Builder clearVariationType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        variationType_ = 0;
        onChanged();
        return this;
      }

      // optional .Rule rule = 2;
      private com.akdeniz.googleplaycrawler.GooglePlay.Rule rule_ = com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Rule, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder> ruleBuilder_;
      /**
       * <code>optional .Rule rule = 2;</code>
       */
      public boolean hasRule() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .Rule rule = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Rule getRule() {
        if (ruleBuilder_ == null) {
          return rule_;
        } else {
          return ruleBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Rule rule = 2;</code>
       */
      public Builder setRule(com.akdeniz.googleplaycrawler.GooglePlay.Rule value) {
        if (ruleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          rule_ = value;
          onChanged();
        } else {
          ruleBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .Rule rule = 2;</code>
       */
      public Builder setRule(
          com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder builderForValue) {
        if (ruleBuilder_ == null) {
          rule_ = builderForValue.build();
          onChanged();
        } else {
          ruleBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .Rule rule = 2;</code>
       */
      public Builder mergeRule(com.akdeniz.googleplaycrawler.GooglePlay.Rule value) {
        if (ruleBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              rule_ != com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance()) {
            rule_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Rule.newBuilder(rule_).mergeFrom(value).buildPartial();
          } else {
            rule_ = value;
          }
          onChanged();
        } else {
          ruleBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .Rule rule = 2;</code>
       */
      public Builder clearRule() {
        if (ruleBuilder_ == null) {
          rule_ = com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance();
          onChanged();
        } else {
          ruleBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .Rule rule = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder getRuleBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getRuleFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Rule rule = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder getRuleOrBuilder() {
        if (ruleBuilder_ != null) {
          return ruleBuilder_.getMessageOrBuilder();
        } else {
          return rule_;
        }
      }
      /**
       * <code>optional .Rule rule = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Rule, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder> 
          getRuleFieldBuilder() {
        if (ruleBuilder_ == null) {
          ruleBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Rule, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder>(
                  rule_,
                  getParentForChildren(),
                  isClean());
          rule_ = null;
        }
        return ruleBuilder_;
      }

      // optional string title = 3;
      private java.lang.Object title_ = "";
      /**
       * <code>optional string title = 3;</code>
       */
      public boolean hasTitle() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public java.lang.String getTitle() {
        java.lang.Object ref = title_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          title_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public com.google.protobuf.ByteString
          getTitleBytes() {
        java.lang.Object ref = title_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          title_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public Builder setTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        title_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public Builder clearTitle() {
        bitField0_ = (bitField0_ & ~0x00000004);
        title_ = getDefaultInstance().getTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public Builder setTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        title_ = value;
        onChanged();
        return this;
      }

      // repeated string snippet = 4;
      private com.google.protobuf.LazyStringList snippet_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureSnippetIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          snippet_ = new com.google.protobuf.LazyStringArrayList(snippet_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <code>repeated string snippet = 4;</code>
       */
      public java.util.List<java.lang.String>
          getSnippetList() {
        return java.util.Collections.unmodifiableList(snippet_);
      }
      /**
       * <code>repeated string snippet = 4;</code>
       */
      public int getSnippetCount() {
        return snippet_.size();
      }
      /**
       * <code>repeated string snippet = 4;</code>
       */
      public java.lang.String getSnippet(int index) {
        return snippet_.get(index);
      }
      /**
       * <code>repeated string snippet = 4;</code>
       */
      public com.google.protobuf.ByteString
          getSnippetBytes(int index) {
        return snippet_.getByteString(index);
      }
      /**
       * <code>repeated string snippet = 4;</code>
       */
      public Builder setSnippet(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSnippetIsMutable();
        snippet_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string snippet = 4;</code>
       */
      public Builder addSnippet(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSnippetIsMutable();
        snippet_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string snippet = 4;</code>
       */
      public Builder addAllSnippet(
          java.lang.Iterable<java.lang.String> values) {
        ensureSnippetIsMutable();
        super.addAll(values, snippet_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string snippet = 4;</code>
       */
      public Builder clearSnippet() {
        snippet_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string snippet = 4;</code>
       */
      public Builder addSnippetBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureSnippetIsMutable();
        snippet_.add(value);
        onChanged();
        return this;
      }

      // optional string recentChanges = 5;
      private java.lang.Object recentChanges_ = "";
      /**
       * <code>optional string recentChanges = 5;</code>
       */
      public boolean hasRecentChanges() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string recentChanges = 5;</code>
       */
      public java.lang.String getRecentChanges() {
        java.lang.Object ref = recentChanges_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          recentChanges_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string recentChanges = 5;</code>
       */
      public com.google.protobuf.ByteString
          getRecentChangesBytes() {
        java.lang.Object ref = recentChanges_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          recentChanges_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string recentChanges = 5;</code>
       */
      public Builder setRecentChanges(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        recentChanges_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string recentChanges = 5;</code>
       */
      public Builder clearRecentChanges() {
        bitField0_ = (bitField0_ & ~0x00000010);
        recentChanges_ = getDefaultInstance().getRecentChanges();
        onChanged();
        return this;
      }
      /**
       * <code>optional string recentChanges = 5;</code>
       */
      public Builder setRecentChangesBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        recentChanges_ = value;
        onChanged();
        return this;
      }

      // repeated .TranslatedText autoTranslation = 6;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText> autoTranslation_ =
        java.util.Collections.emptyList();
      private void ensureAutoTranslationIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          autoTranslation_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText>(autoTranslation_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder> autoTranslationBuilder_;

      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText> getAutoTranslationList() {
        if (autoTranslationBuilder_ == null) {
          return java.util.Collections.unmodifiableList(autoTranslation_);
        } else {
          return autoTranslationBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public int getAutoTranslationCount() {
        if (autoTranslationBuilder_ == null) {
          return autoTranslation_.size();
        } else {
          return autoTranslationBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText getAutoTranslation(int index) {
        if (autoTranslationBuilder_ == null) {
          return autoTranslation_.get(index);
        } else {
          return autoTranslationBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public Builder setAutoTranslation(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText value) {
        if (autoTranslationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAutoTranslationIsMutable();
          autoTranslation_.set(index, value);
          onChanged();
        } else {
          autoTranslationBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public Builder setAutoTranslation(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder builderForValue) {
        if (autoTranslationBuilder_ == null) {
          ensureAutoTranslationIsMutable();
          autoTranslation_.set(index, builderForValue.build());
          onChanged();
        } else {
          autoTranslationBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public Builder addAutoTranslation(com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText value) {
        if (autoTranslationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAutoTranslationIsMutable();
          autoTranslation_.add(value);
          onChanged();
        } else {
          autoTranslationBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public Builder addAutoTranslation(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText value) {
        if (autoTranslationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAutoTranslationIsMutable();
          autoTranslation_.add(index, value);
          onChanged();
        } else {
          autoTranslationBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public Builder addAutoTranslation(
          com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder builderForValue) {
        if (autoTranslationBuilder_ == null) {
          ensureAutoTranslationIsMutable();
          autoTranslation_.add(builderForValue.build());
          onChanged();
        } else {
          autoTranslationBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public Builder addAutoTranslation(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder builderForValue) {
        if (autoTranslationBuilder_ == null) {
          ensureAutoTranslationIsMutable();
          autoTranslation_.add(index, builderForValue.build());
          onChanged();
        } else {
          autoTranslationBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public Builder addAllAutoTranslation(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText> values) {
        if (autoTranslationBuilder_ == null) {
          ensureAutoTranslationIsMutable();
          super.addAll(values, autoTranslation_);
          onChanged();
        } else {
          autoTranslationBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public Builder clearAutoTranslation() {
        if (autoTranslationBuilder_ == null) {
          autoTranslation_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          autoTranslationBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public Builder removeAutoTranslation(int index) {
        if (autoTranslationBuilder_ == null) {
          ensureAutoTranslationIsMutable();
          autoTranslation_.remove(index);
          onChanged();
        } else {
          autoTranslationBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder getAutoTranslationBuilder(
          int index) {
        return getAutoTranslationFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder getAutoTranslationOrBuilder(
          int index) {
        if (autoTranslationBuilder_ == null) {
          return autoTranslation_.get(index);  } else {
          return autoTranslationBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder> 
           getAutoTranslationOrBuilderList() {
        if (autoTranslationBuilder_ != null) {
          return autoTranslationBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(autoTranslation_);
        }
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder addAutoTranslationBuilder() {
        return getAutoTranslationFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.getDefaultInstance());
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder addAutoTranslationBuilder(
          int index) {
        return getAutoTranslationFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.getDefaultInstance());
      }
      /**
       * <code>repeated .TranslatedText autoTranslation = 6;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder> 
           getAutoTranslationBuilderList() {
        return getAutoTranslationFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder> 
          getAutoTranslationFieldBuilder() {
        if (autoTranslationBuilder_ == null) {
          autoTranslationBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder>(
                  autoTranslation_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          autoTranslation_ = null;
        }
        return autoTranslationBuilder_;
      }

      // repeated .Offer offer = 7;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> offer_ =
        java.util.Collections.emptyList();
      private void ensureOfferIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          offer_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Offer>(offer_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> offerBuilder_;

      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> getOfferList() {
        if (offerBuilder_ == null) {
          return java.util.Collections.unmodifiableList(offer_);
        } else {
          return offerBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public int getOfferCount() {
        if (offerBuilder_ == null) {
          return offer_.size();
        } else {
          return offerBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer getOffer(int index) {
        if (offerBuilder_ == null) {
          return offer_.get(index);
        } else {
          return offerBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public Builder setOffer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (offerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOfferIsMutable();
          offer_.set(index, value);
          onChanged();
        } else {
          offerBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public Builder setOffer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder builderForValue) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          offer_.set(index, builderForValue.build());
          onChanged();
        } else {
          offerBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public Builder addOffer(com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (offerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOfferIsMutable();
          offer_.add(value);
          onChanged();
        } else {
          offerBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public Builder addOffer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (offerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOfferIsMutable();
          offer_.add(index, value);
          onChanged();
        } else {
          offerBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public Builder addOffer(
          com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder builderForValue) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          offer_.add(builderForValue.build());
          onChanged();
        } else {
          offerBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public Builder addOffer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder builderForValue) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          offer_.add(index, builderForValue.build());
          onChanged();
        } else {
          offerBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public Builder addAllOffer(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Offer> values) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          super.addAll(values, offer_);
          onChanged();
        } else {
          offerBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public Builder clearOffer() {
        if (offerBuilder_ == null) {
          offer_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          offerBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public Builder removeOffer(int index) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          offer_.remove(index);
          onChanged();
        } else {
          offerBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder getOfferBuilder(
          int index) {
        return getOfferFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getOfferOrBuilder(
          int index) {
        if (offerBuilder_ == null) {
          return offer_.get(index);  } else {
          return offerBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
           getOfferOrBuilderList() {
        if (offerBuilder_ != null) {
          return offerBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(offer_);
        }
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder addOfferBuilder() {
        return getOfferFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance());
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder addOfferBuilder(
          int index) {
        return getOfferFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance());
      }
      /**
       * <code>repeated .Offer offer = 7;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder> 
           getOfferBuilderList() {
        return getOfferFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
          getOfferFieldBuilder() {
        if (offerBuilder_ == null) {
          offerBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder>(
                  offer_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          offer_ = null;
        }
        return offerBuilder_;
      }

      // optional int64 channelId = 9;
      private long channelId_ ;
      /**
       * <code>optional int64 channelId = 9;</code>
       */
      public boolean hasChannelId() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional int64 channelId = 9;</code>
       */
      public long getChannelId() {
        return channelId_;
      }
      /**
       * <code>optional int64 channelId = 9;</code>
       */
      public Builder setChannelId(long value) {
        bitField0_ |= 0x00000080;
        channelId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 channelId = 9;</code>
       */
      public Builder clearChannelId() {
        bitField0_ = (bitField0_ & ~0x00000080);
        channelId_ = 0L;
        onChanged();
        return this;
      }

      // repeated .Document child = 10;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> child_ =
        java.util.Collections.emptyList();
      private void ensureChildIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          child_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Document>(child_);
          bitField0_ |= 0x00000100;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> childBuilder_;

      /**
       * <code>repeated .Document child = 10;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> getChildList() {
        if (childBuilder_ == null) {
          return java.util.Collections.unmodifiableList(child_);
        } else {
          return childBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public int getChildCount() {
        if (childBuilder_ == null) {
          return child_.size();
        } else {
          return childBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document getChild(int index) {
        if (childBuilder_ == null) {
          return child_.get(index);
        } else {
          return childBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public Builder setChild(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (childBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildIsMutable();
          child_.set(index, value);
          onChanged();
        } else {
          childBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public Builder setChild(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.set(index, builderForValue.build());
          onChanged();
        } else {
          childBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public Builder addChild(com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (childBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildIsMutable();
          child_.add(value);
          onChanged();
        } else {
          childBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public Builder addChild(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (childBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildIsMutable();
          child_.add(index, value);
          onChanged();
        } else {
          childBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public Builder addChild(
          com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.add(builderForValue.build());
          onChanged();
        } else {
          childBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public Builder addChild(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.add(index, builderForValue.build());
          onChanged();
        } else {
          childBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public Builder addAllChild(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Document> values) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          super.addAll(values, child_);
          onChanged();
        } else {
          childBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public Builder clearChild() {
        if (childBuilder_ == null) {
          child_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          childBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public Builder removeChild(int index) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.remove(index);
          onChanged();
        } else {
          childBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder getChildBuilder(
          int index) {
        return getChildFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getChildOrBuilder(
          int index) {
        if (childBuilder_ == null) {
          return child_.get(index);  } else {
          return childBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
           getChildOrBuilderList() {
        if (childBuilder_ != null) {
          return childBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(child_);
        }
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder addChildBuilder() {
        return getChildFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance());
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder addChildBuilder(
          int index) {
        return getChildFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance());
      }
      /**
       * <code>repeated .Document child = 10;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder> 
           getChildBuilderList() {
        return getChildFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
          getChildFieldBuilder() {
        if (childBuilder_ == null) {
          childBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder>(
                  child_,
                  ((bitField0_ & 0x00000100) == 0x00000100),
                  getParentForChildren(),
                  isClean());
          child_ = null;
        }
        return childBuilder_;
      }

      // repeated .Document decoration = 11;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> decoration_ =
        java.util.Collections.emptyList();
      private void ensureDecorationIsMutable() {
        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
          decoration_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Document>(decoration_);
          bitField0_ |= 0x00000200;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> decorationBuilder_;

      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document> getDecorationList() {
        if (decorationBuilder_ == null) {
          return java.util.Collections.unmodifiableList(decoration_);
        } else {
          return decorationBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public int getDecorationCount() {
        if (decorationBuilder_ == null) {
          return decoration_.size();
        } else {
          return decorationBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document getDecoration(int index) {
        if (decorationBuilder_ == null) {
          return decoration_.get(index);
        } else {
          return decorationBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public Builder setDecoration(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (decorationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDecorationIsMutable();
          decoration_.set(index, value);
          onChanged();
        } else {
          decorationBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public Builder setDecoration(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (decorationBuilder_ == null) {
          ensureDecorationIsMutable();
          decoration_.set(index, builderForValue.build());
          onChanged();
        } else {
          decorationBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public Builder addDecoration(com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (decorationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDecorationIsMutable();
          decoration_.add(value);
          onChanged();
        } else {
          decorationBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public Builder addDecoration(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (decorationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDecorationIsMutable();
          decoration_.add(index, value);
          onChanged();
        } else {
          decorationBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public Builder addDecoration(
          com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (decorationBuilder_ == null) {
          ensureDecorationIsMutable();
          decoration_.add(builderForValue.build());
          onChanged();
        } else {
          decorationBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public Builder addDecoration(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (decorationBuilder_ == null) {
          ensureDecorationIsMutable();
          decoration_.add(index, builderForValue.build());
          onChanged();
        } else {
          decorationBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public Builder addAllDecoration(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Document> values) {
        if (decorationBuilder_ == null) {
          ensureDecorationIsMutable();
          super.addAll(values, decoration_);
          onChanged();
        } else {
          decorationBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public Builder clearDecoration() {
        if (decorationBuilder_ == null) {
          decoration_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
          onChanged();
        } else {
          decorationBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public Builder removeDecoration(int index) {
        if (decorationBuilder_ == null) {
          ensureDecorationIsMutable();
          decoration_.remove(index);
          onChanged();
        } else {
          decorationBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder getDecorationBuilder(
          int index) {
        return getDecorationFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getDecorationOrBuilder(
          int index) {
        if (decorationBuilder_ == null) {
          return decoration_.get(index);  } else {
          return decorationBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
           getDecorationOrBuilderList() {
        if (decorationBuilder_ != null) {
          return decorationBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(decoration_);
        }
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder addDecorationBuilder() {
        return getDecorationFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance());
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder addDecorationBuilder(
          int index) {
        return getDecorationFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance());
      }
      /**
       * <code>repeated .Document decoration = 11;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder> 
           getDecorationBuilderList() {
        return getDecorationFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
          getDecorationFieldBuilder() {
        if (decorationBuilder_ == null) {
          decorationBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder>(
                  decoration_,
                  ((bitField0_ & 0x00000200) == 0x00000200),
                  getParentForChildren(),
                  isClean());
          decoration_ = null;
        }
        return decorationBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:DocumentVariant)
    }

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

    // @@protoc_insertion_point(class_scope:DocumentVariant)
  }

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

    // optional int32 imageType = 1;
    /**
     * <code>optional int32 imageType = 1;</code>
     */
    boolean hasImageType();
    /**
     * <code>optional int32 imageType = 1;</code>
     */
    int getImageType();

    // optional group Dimension = 2 {
    /**
     * <code>optional group Dimension = 2 { ... }</code>
     */
    boolean hasDimension();
    /**
     * <code>optional group Dimension = 2 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension getDimension();
    /**
     * <code>optional group Dimension = 2 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Image.DimensionOrBuilder getDimensionOrBuilder();

    // optional string imageUrl = 5;
    /**
     * <code>optional string imageUrl = 5;</code>
     */
    boolean hasImageUrl();
    /**
     * <code>optional string imageUrl = 5;</code>
     */
    java.lang.String getImageUrl();
    /**
     * <code>optional string imageUrl = 5;</code>
     */
    com.google.protobuf.ByteString
        getImageUrlBytes();

    // optional string altTextLocalized = 6;
    /**
     * <code>optional string altTextLocalized = 6;</code>
     */
    boolean hasAltTextLocalized();
    /**
     * <code>optional string altTextLocalized = 6;</code>
     */
    java.lang.String getAltTextLocalized();
    /**
     * <code>optional string altTextLocalized = 6;</code>
     */
    com.google.protobuf.ByteString
        getAltTextLocalizedBytes();

    // optional string secureUrl = 7;
    /**
     * <code>optional string secureUrl = 7;</code>
     */
    boolean hasSecureUrl();
    /**
     * <code>optional string secureUrl = 7;</code>
     */
    java.lang.String getSecureUrl();
    /**
     * <code>optional string secureUrl = 7;</code>
     */
    com.google.protobuf.ByteString
        getSecureUrlBytes();

    // optional int32 positionInSequence = 8;
    /**
     * <code>optional int32 positionInSequence = 8;</code>
     */
    boolean hasPositionInSequence();
    /**
     * <code>optional int32 positionInSequence = 8;</code>
     */
    int getPositionInSequence();

    // optional bool supportsFifeUrlOptions = 9;
    /**
     * <code>optional bool supportsFifeUrlOptions = 9;</code>
     */
    boolean hasSupportsFifeUrlOptions();
    /**
     * <code>optional bool supportsFifeUrlOptions = 9;</code>
     */
    boolean getSupportsFifeUrlOptions();

    // optional group Citation = 10 {
    /**
     * <code>optional group Citation = 10 { ... }</code>
     */
    boolean hasCitation();
    /**
     * <code>optional group Citation = 10 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation getCitation();
    /**
     * <code>optional group Citation = 10 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Image.CitationOrBuilder getCitationOrBuilder();
  }
  /**
   * Protobuf type {@code Image}
   */
  public static final class Image extends
      com.google.protobuf.GeneratedMessage
      implements ImageOrBuilder {
    // Use Image.newBuilder() to construct.
    private Image(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Image(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public Image getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Image(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              imageType_ = input.readInt32();
              break;
            }
            case 19: {
              com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = dimension_.toBuilder();
              }
              dimension_ = input.readGroup(2, com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.PARSER,
                  extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(dimension_);
                dimension_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 42: {
              bitField0_ |= 0x00000004;
              imageUrl_ = input.readBytes();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000008;
              altTextLocalized_ = input.readBytes();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000010;
              secureUrl_ = input.readBytes();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000020;
              positionInSequence_ = input.readInt32();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000040;
              supportsFifeUrlOptions_ = input.readBool();
              break;
            }
            case 83: {
              com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = citation_.toBuilder();
              }
              citation_ = input.readGroup(10, com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.PARSER,
                  extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(citation_);
                citation_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Image.class, com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder.class);
    }

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

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

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

      // optional int32 width = 3;
      /**
       * <code>optional int32 width = 3;</code>
       */
      boolean hasWidth();
      /**
       * <code>optional int32 width = 3;</code>
       */
      int getWidth();

      // optional int32 height = 4;
      /**
       * <code>optional int32 height = 4;</code>
       */
      boolean hasHeight();
      /**
       * <code>optional int32 height = 4;</code>
       */
      int getHeight();
    }
    /**
     * Protobuf type {@code Image.Dimension}
     */
    public static final class Dimension extends
        com.google.protobuf.GeneratedMessage
        implements DimensionOrBuilder {
      // Use Dimension.newBuilder() to construct.
      private Dimension(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Dimension(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

      public Dimension getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Dimension(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 24: {
                bitField0_ |= 0x00000001;
                width_ = input.readInt32();
                break;
              }
              case 32: {
                bitField0_ |= 0x00000002;
                height_ = input.readInt32();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_Dimension_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_Dimension_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.class, com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.Builder.class);
      }

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

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

      private int bitField0_;
      // optional int32 width = 3;
      public static final int WIDTH_FIELD_NUMBER = 3;
      private int width_;
      /**
       * <code>optional int32 width = 3;</code>
       */
      public boolean hasWidth() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 width = 3;</code>
       */
      public int getWidth() {
        return width_;
      }

      // optional int32 height = 4;
      public static final int HEIGHT_FIELD_NUMBER = 4;
      private int height_;
      /**
       * <code>optional int32 height = 4;</code>
       */
      public boolean hasHeight() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 height = 4;</code>
       */
      public int getHeight() {
        return height_;
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeInt32(3, width_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeInt32(4, height_);
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(3, width_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(4, height_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

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

      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code Image.Dimension}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.akdeniz.googleplaycrawler.GooglePlay.Image.DimensionOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_Dimension_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_Dimension_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.class, com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.Builder.class);
        }

        // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

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

        public Builder clear() {
          super.clear();
          width_ = 0;
          bitField0_ = (bitField0_ & ~0x00000001);
          height_ = 0;
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

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

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_Dimension_descriptor;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension getDefaultInstanceForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.getDefaultInstance();
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension build() {
          com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension buildPartial() {
          com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension result = new com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.width_ = width_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.height_ = height_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension) {
            return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension other) {
          if (other == com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.getDefaultInstance()) return this;
          if (other.hasWidth()) {
            setWidth(other.getWidth());
          }
          if (other.hasHeight()) {
            setHeight(other.getHeight());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

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

        // optional int32 width = 3;
        private int width_ ;
        /**
         * <code>optional int32 width = 3;</code>
         */
        public boolean hasWidth() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional int32 width = 3;</code>
         */
        public int getWidth() {
          return width_;
        }
        /**
         * <code>optional int32 width = 3;</code>
         */
        public Builder setWidth(int value) {
          bitField0_ |= 0x00000001;
          width_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional int32 width = 3;</code>
         */
        public Builder clearWidth() {
          bitField0_ = (bitField0_ & ~0x00000001);
          width_ = 0;
          onChanged();
          return this;
        }

        // optional int32 height = 4;
        private int height_ ;
        /**
         * <code>optional int32 height = 4;</code>
         */
        public boolean hasHeight() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional int32 height = 4;</code>
         */
        public int getHeight() {
          return height_;
        }
        /**
         * <code>optional int32 height = 4;</code>
         */
        public Builder setHeight(int value) {
          bitField0_ |= 0x00000002;
          height_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional int32 height = 4;</code>
         */
        public Builder clearHeight() {
          bitField0_ = (bitField0_ & ~0x00000002);
          height_ = 0;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:Image.Dimension)
      }

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

      // @@protoc_insertion_point(class_scope:Image.Dimension)
    }

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

      // optional string titleLocalized = 11;
      /**
       * <code>optional string titleLocalized = 11;</code>
       */
      boolean hasTitleLocalized();
      /**
       * <code>optional string titleLocalized = 11;</code>
       */
      java.lang.String getTitleLocalized();
      /**
       * <code>optional string titleLocalized = 11;</code>
       */
      com.google.protobuf.ByteString
          getTitleLocalizedBytes();

      // optional string url = 12;
      /**
       * <code>optional string url = 12;</code>
       */
      boolean hasUrl();
      /**
       * <code>optional string url = 12;</code>
       */
      java.lang.String getUrl();
      /**
       * <code>optional string url = 12;</code>
       */
      com.google.protobuf.ByteString
          getUrlBytes();
    }
    /**
     * Protobuf type {@code Image.Citation}
     */
    public static final class Citation extends
        com.google.protobuf.GeneratedMessage
        implements CitationOrBuilder {
      // Use Citation.newBuilder() to construct.
      private Citation(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Citation(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

      public Citation getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Citation(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 90: {
                bitField0_ |= 0x00000001;
                titleLocalized_ = input.readBytes();
                break;
              }
              case 98: {
                bitField0_ |= 0x00000002;
                url_ = input.readBytes();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_Citation_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_Citation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.class, com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.Builder.class);
      }

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

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

      private int bitField0_;
      // optional string titleLocalized = 11;
      public static final int TITLELOCALIZED_FIELD_NUMBER = 11;
      private java.lang.Object titleLocalized_;
      /**
       * <code>optional string titleLocalized = 11;</code>
       */
      public boolean hasTitleLocalized() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string titleLocalized = 11;</code>
       */
      public java.lang.String getTitleLocalized() {
        java.lang.Object ref = titleLocalized_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            titleLocalized_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string titleLocalized = 11;</code>
       */
      public com.google.protobuf.ByteString
          getTitleLocalizedBytes() {
        java.lang.Object ref = titleLocalized_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          titleLocalized_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // optional string url = 12;
      public static final int URL_FIELD_NUMBER = 12;
      private java.lang.Object url_;
      /**
       * <code>optional string url = 12;</code>
       */
      public boolean hasUrl() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string url = 12;</code>
       */
      public java.lang.String getUrl() {
        java.lang.Object ref = url_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            url_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string url = 12;</code>
       */
      public com.google.protobuf.ByteString
          getUrlBytes() {
        java.lang.Object ref = url_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          url_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

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

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(11, getTitleLocalizedBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(12, getUrlBytes());
        }
        getUnknownFields().writeTo(output);
      }

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

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(11, getTitleLocalizedBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(12, getUrlBytes());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

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

      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code Image.Citation}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.akdeniz.googleplaycrawler.GooglePlay.Image.CitationOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_Citation_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_Citation_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.class, com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.Builder.class);
        }

        // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

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

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

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

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_Citation_descriptor;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation getDefaultInstanceForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.getDefaultInstance();
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation build() {
          com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation buildPartial() {
          com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation result = new com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.titleLocalized_ = titleLocalized_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.url_ = url_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation) {
            return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation other) {
          if (other == com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.getDefaultInstance()) return this;
          if (other.hasTitleLocalized()) {
            bitField0_ |= 0x00000001;
            titleLocalized_ = other.titleLocalized_;
            onChanged();
          }
          if (other.hasUrl()) {
            bitField0_ |= 0x00000002;
            url_ = other.url_;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

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

        // optional string titleLocalized = 11;
        private java.lang.Object titleLocalized_ = "";
        /**
         * <code>optional string titleLocalized = 11;</code>
         */
        public boolean hasTitleLocalized() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string titleLocalized = 11;</code>
         */
        public java.lang.String getTitleLocalized() {
          java.lang.Object ref = titleLocalized_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            titleLocalized_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string titleLocalized = 11;</code>
         */
        public com.google.protobuf.ByteString
            getTitleLocalizedBytes() {
          java.lang.Object ref = titleLocalized_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            titleLocalized_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string titleLocalized = 11;</code>
         */
        public Builder setTitleLocalized(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          titleLocalized_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string titleLocalized = 11;</code>
         */
        public Builder clearTitleLocalized() {
          bitField0_ = (bitField0_ & ~0x00000001);
          titleLocalized_ = getDefaultInstance().getTitleLocalized();
          onChanged();
          return this;
        }
        /**
         * <code>optional string titleLocalized = 11;</code>
         */
        public Builder setTitleLocalizedBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          titleLocalized_ = value;
          onChanged();
          return this;
        }

        // optional string url = 12;
        private java.lang.Object url_ = "";
        /**
         * <code>optional string url = 12;</code>
         */
        public boolean hasUrl() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string url = 12;</code>
         */
        public java.lang.String getUrl() {
          java.lang.Object ref = url_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            url_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string url = 12;</code>
         */
        public com.google.protobuf.ByteString
            getUrlBytes() {
          java.lang.Object ref = url_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            url_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string url = 12;</code>
         */
        public Builder setUrl(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          url_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string url = 12;</code>
         */
        public Builder clearUrl() {
          bitField0_ = (bitField0_ & ~0x00000002);
          url_ = getDefaultInstance().getUrl();
          onChanged();
          return this;
        }
        /**
         * <code>optional string url = 12;</code>
         */
        public Builder setUrlBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          url_ = value;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:Image.Citation)
      }

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

      // @@protoc_insertion_point(class_scope:Image.Citation)
    }

    private int bitField0_;
    // optional int32 imageType = 1;
    public static final int IMAGETYPE_FIELD_NUMBER = 1;
    private int imageType_;
    /**
     * <code>optional int32 imageType = 1;</code>
     */
    public boolean hasImageType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 imageType = 1;</code>
     */
    public int getImageType() {
      return imageType_;
    }

    // optional group Dimension = 2 {
    public static final int DIMENSION_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension dimension_;
    /**
     * <code>optional group Dimension = 2 { ... }</code>
     */
    public boolean hasDimension() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional group Dimension = 2 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension getDimension() {
      return dimension_;
    }
    /**
     * <code>optional group Dimension = 2 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Image.DimensionOrBuilder getDimensionOrBuilder() {
      return dimension_;
    }

    // optional string imageUrl = 5;
    public static final int IMAGEURL_FIELD_NUMBER = 5;
    private java.lang.Object imageUrl_;
    /**
     * <code>optional string imageUrl = 5;</code>
     */
    public boolean hasImageUrl() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string imageUrl = 5;</code>
     */
    public java.lang.String getImageUrl() {
      java.lang.Object ref = imageUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          imageUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string imageUrl = 5;</code>
     */
    public com.google.protobuf.ByteString
        getImageUrlBytes() {
      java.lang.Object ref = imageUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        imageUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string altTextLocalized = 6;
    public static final int ALTTEXTLOCALIZED_FIELD_NUMBER = 6;
    private java.lang.Object altTextLocalized_;
    /**
     * <code>optional string altTextLocalized = 6;</code>
     */
    public boolean hasAltTextLocalized() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string altTextLocalized = 6;</code>
     */
    public java.lang.String getAltTextLocalized() {
      java.lang.Object ref = altTextLocalized_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          altTextLocalized_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string altTextLocalized = 6;</code>
     */
    public com.google.protobuf.ByteString
        getAltTextLocalizedBytes() {
      java.lang.Object ref = altTextLocalized_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        altTextLocalized_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string secureUrl = 7;
    public static final int SECUREURL_FIELD_NUMBER = 7;
    private java.lang.Object secureUrl_;
    /**
     * <code>optional string secureUrl = 7;</code>
     */
    public boolean hasSecureUrl() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string secureUrl = 7;</code>
     */
    public java.lang.String getSecureUrl() {
      java.lang.Object ref = secureUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          secureUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string secureUrl = 7;</code>
     */
    public com.google.protobuf.ByteString
        getSecureUrlBytes() {
      java.lang.Object ref = secureUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        secureUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 positionInSequence = 8;
    public static final int POSITIONINSEQUENCE_FIELD_NUMBER = 8;
    private int positionInSequence_;
    /**
     * <code>optional int32 positionInSequence = 8;</code>
     */
    public boolean hasPositionInSequence() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional int32 positionInSequence = 8;</code>
     */
    public int getPositionInSequence() {
      return positionInSequence_;
    }

    // optional bool supportsFifeUrlOptions = 9;
    public static final int SUPPORTSFIFEURLOPTIONS_FIELD_NUMBER = 9;
    private boolean supportsFifeUrlOptions_;
    /**
     * <code>optional bool supportsFifeUrlOptions = 9;</code>
     */
    public boolean hasSupportsFifeUrlOptions() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional bool supportsFifeUrlOptions = 9;</code>
     */
    public boolean getSupportsFifeUrlOptions() {
      return supportsFifeUrlOptions_;
    }

    // optional group Citation = 10 {
    public static final int CITATION_FIELD_NUMBER = 10;
    private com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation citation_;
    /**
     * <code>optional group Citation = 10 { ... }</code>
     */
    public boolean hasCitation() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional group Citation = 10 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation getCitation() {
      return citation_;
    }
    /**
     * <code>optional group Citation = 10 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Image.CitationOrBuilder getCitationOrBuilder() {
      return citation_;
    }

    private void initFields() {
      imageType_ = 0;
      dimension_ = com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.getDefaultInstance();
      imageUrl_ = "";
      altTextLocalized_ = "";
      secureUrl_ = "";
      positionInSequence_ = 0;
      supportsFifeUrlOptions_ = false;
      citation_ = com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, imageType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeGroup(2, dimension_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(5, getImageUrlBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(6, getAltTextLocalizedBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(7, getSecureUrlBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt32(8, positionInSequence_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBool(9, supportsFifeUrlOptions_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeGroup(10, citation_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, imageType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeGroupSize(2, dimension_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getImageUrlBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getAltTextLocalizedBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getSecureUrlBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(8, positionInSequence_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(9, supportsFifeUrlOptions_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeGroupSize(10, citation_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.Image parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Image parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Image parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Image parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Image parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Image parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Image parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Image parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Image parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Image parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Image prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Image}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Image.class, com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Image.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        imageType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (dimensionBuilder_ == null) {
          dimension_ = com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.getDefaultInstance();
        } else {
          dimensionBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        imageUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        altTextLocalized_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        secureUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        positionInSequence_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        supportsFifeUrlOptions_ = false;
        bitField0_ = (bitField0_ & ~0x00000040);
        if (citationBuilder_ == null) {
          citation_ = com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.getDefaultInstance();
        } else {
          citationBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Image_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Image getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Image.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Image build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Image result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Image buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Image result = new com.akdeniz.googleplaycrawler.GooglePlay.Image(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.imageType_ = imageType_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (dimensionBuilder_ == null) {
          result.dimension_ = dimension_;
        } else {
          result.dimension_ = dimensionBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.imageUrl_ = imageUrl_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.altTextLocalized_ = altTextLocalized_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.secureUrl_ = secureUrl_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.positionInSequence_ = positionInSequence_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.supportsFifeUrlOptions_ = supportsFifeUrlOptions_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (citationBuilder_ == null) {
          result.citation_ = citation_;
        } else {
          result.citation_ = citationBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Image) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Image)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Image other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Image.getDefaultInstance()) return this;
        if (other.hasImageType()) {
          setImageType(other.getImageType());
        }
        if (other.hasDimension()) {
          mergeDimension(other.getDimension());
        }
        if (other.hasImageUrl()) {
          bitField0_ |= 0x00000004;
          imageUrl_ = other.imageUrl_;
          onChanged();
        }
        if (other.hasAltTextLocalized()) {
          bitField0_ |= 0x00000008;
          altTextLocalized_ = other.altTextLocalized_;
          onChanged();
        }
        if (other.hasSecureUrl()) {
          bitField0_ |= 0x00000010;
          secureUrl_ = other.secureUrl_;
          onChanged();
        }
        if (other.hasPositionInSequence()) {
          setPositionInSequence(other.getPositionInSequence());
        }
        if (other.hasSupportsFifeUrlOptions()) {
          setSupportsFifeUrlOptions(other.getSupportsFifeUrlOptions());
        }
        if (other.hasCitation()) {
          mergeCitation(other.getCitation());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 imageType = 1;
      private int imageType_ ;
      /**
       * <code>optional int32 imageType = 1;</code>
       */
      public boolean hasImageType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 imageType = 1;</code>
       */
      public int getImageType() {
        return imageType_;
      }
      /**
       * <code>optional int32 imageType = 1;</code>
       */
      public Builder setImageType(int value) {
        bitField0_ |= 0x00000001;
        imageType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 imageType = 1;</code>
       */
      public Builder clearImageType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        imageType_ = 0;
        onChanged();
        return this;
      }

      // optional group Dimension = 2 {
      private com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension dimension_ = com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension, com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.Builder, com.akdeniz.googleplaycrawler.GooglePlay.Image.DimensionOrBuilder> dimensionBuilder_;
      /**
       * <code>optional group Dimension = 2 { ... }</code>
       */
      public boolean hasDimension() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional group Dimension = 2 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension getDimension() {
        if (dimensionBuilder_ == null) {
          return dimension_;
        } else {
          return dimensionBuilder_.getMessage();
        }
      }
      /**
       * <code>optional group Dimension = 2 { ... }</code>
       */
      public Builder setDimension(com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension value) {
        if (dimensionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          dimension_ = value;
          onChanged();
        } else {
          dimensionBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional group Dimension = 2 { ... }</code>
       */
      public Builder setDimension(
          com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.Builder builderForValue) {
        if (dimensionBuilder_ == null) {
          dimension_ = builderForValue.build();
          onChanged();
        } else {
          dimensionBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional group Dimension = 2 { ... }</code>
       */
      public Builder mergeDimension(com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension value) {
        if (dimensionBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              dimension_ != com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.getDefaultInstance()) {
            dimension_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.newBuilder(dimension_).mergeFrom(value).buildPartial();
          } else {
            dimension_ = value;
          }
          onChanged();
        } else {
          dimensionBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional group Dimension = 2 { ... }</code>
       */
      public Builder clearDimension() {
        if (dimensionBuilder_ == null) {
          dimension_ = com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.getDefaultInstance();
          onChanged();
        } else {
          dimensionBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional group Dimension = 2 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.Builder getDimensionBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getDimensionFieldBuilder().getBuilder();
      }
      /**
       * <code>optional group Dimension = 2 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Image.DimensionOrBuilder getDimensionOrBuilder() {
        if (dimensionBuilder_ != null) {
          return dimensionBuilder_.getMessageOrBuilder();
        } else {
          return dimension_;
        }
      }
      /**
       * <code>optional group Dimension = 2 { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension, com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.Builder, com.akdeniz.googleplaycrawler.GooglePlay.Image.DimensionOrBuilder> 
          getDimensionFieldBuilder() {
        if (dimensionBuilder_ == null) {
          dimensionBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension, com.akdeniz.googleplaycrawler.GooglePlay.Image.Dimension.Builder, com.akdeniz.googleplaycrawler.GooglePlay.Image.DimensionOrBuilder>(
                  dimension_,
                  getParentForChildren(),
                  isClean());
          dimension_ = null;
        }
        return dimensionBuilder_;
      }

      // optional string imageUrl = 5;
      private java.lang.Object imageUrl_ = "";
      /**
       * <code>optional string imageUrl = 5;</code>
       */
      public boolean hasImageUrl() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string imageUrl = 5;</code>
       */
      public java.lang.String getImageUrl() {
        java.lang.Object ref = imageUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          imageUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string imageUrl = 5;</code>
       */
      public com.google.protobuf.ByteString
          getImageUrlBytes() {
        java.lang.Object ref = imageUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          imageUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string imageUrl = 5;</code>
       */
      public Builder setImageUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        imageUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string imageUrl = 5;</code>
       */
      public Builder clearImageUrl() {
        bitField0_ = (bitField0_ & ~0x00000004);
        imageUrl_ = getDefaultInstance().getImageUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string imageUrl = 5;</code>
       */
      public Builder setImageUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        imageUrl_ = value;
        onChanged();
        return this;
      }

      // optional string altTextLocalized = 6;
      private java.lang.Object altTextLocalized_ = "";
      /**
       * <code>optional string altTextLocalized = 6;</code>
       */
      public boolean hasAltTextLocalized() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string altTextLocalized = 6;</code>
       */
      public java.lang.String getAltTextLocalized() {
        java.lang.Object ref = altTextLocalized_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          altTextLocalized_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string altTextLocalized = 6;</code>
       */
      public com.google.protobuf.ByteString
          getAltTextLocalizedBytes() {
        java.lang.Object ref = altTextLocalized_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          altTextLocalized_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string altTextLocalized = 6;</code>
       */
      public Builder setAltTextLocalized(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        altTextLocalized_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string altTextLocalized = 6;</code>
       */
      public Builder clearAltTextLocalized() {
        bitField0_ = (bitField0_ & ~0x00000008);
        altTextLocalized_ = getDefaultInstance().getAltTextLocalized();
        onChanged();
        return this;
      }
      /**
       * <code>optional string altTextLocalized = 6;</code>
       */
      public Builder setAltTextLocalizedBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        altTextLocalized_ = value;
        onChanged();
        return this;
      }

      // optional string secureUrl = 7;
      private java.lang.Object secureUrl_ = "";
      /**
       * <code>optional string secureUrl = 7;</code>
       */
      public boolean hasSecureUrl() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string secureUrl = 7;</code>
       */
      public java.lang.String getSecureUrl() {
        java.lang.Object ref = secureUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          secureUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string secureUrl = 7;</code>
       */
      public com.google.protobuf.ByteString
          getSecureUrlBytes() {
        java.lang.Object ref = secureUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          secureUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string secureUrl = 7;</code>
       */
      public Builder setSecureUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        secureUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string secureUrl = 7;</code>
       */
      public Builder clearSecureUrl() {
        bitField0_ = (bitField0_ & ~0x00000010);
        secureUrl_ = getDefaultInstance().getSecureUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string secureUrl = 7;</code>
       */
      public Builder setSecureUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        secureUrl_ = value;
        onChanged();
        return this;
      }

      // optional int32 positionInSequence = 8;
      private int positionInSequence_ ;
      /**
       * <code>optional int32 positionInSequence = 8;</code>
       */
      public boolean hasPositionInSequence() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int32 positionInSequence = 8;</code>
       */
      public int getPositionInSequence() {
        return positionInSequence_;
      }
      /**
       * <code>optional int32 positionInSequence = 8;</code>
       */
      public Builder setPositionInSequence(int value) {
        bitField0_ |= 0x00000020;
        positionInSequence_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 positionInSequence = 8;</code>
       */
      public Builder clearPositionInSequence() {
        bitField0_ = (bitField0_ & ~0x00000020);
        positionInSequence_ = 0;
        onChanged();
        return this;
      }

      // optional bool supportsFifeUrlOptions = 9;
      private boolean supportsFifeUrlOptions_ ;
      /**
       * <code>optional bool supportsFifeUrlOptions = 9;</code>
       */
      public boolean hasSupportsFifeUrlOptions() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional bool supportsFifeUrlOptions = 9;</code>
       */
      public boolean getSupportsFifeUrlOptions() {
        return supportsFifeUrlOptions_;
      }
      /**
       * <code>optional bool supportsFifeUrlOptions = 9;</code>
       */
      public Builder setSupportsFifeUrlOptions(boolean value) {
        bitField0_ |= 0x00000040;
        supportsFifeUrlOptions_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool supportsFifeUrlOptions = 9;</code>
       */
      public Builder clearSupportsFifeUrlOptions() {
        bitField0_ = (bitField0_ & ~0x00000040);
        supportsFifeUrlOptions_ = false;
        onChanged();
        return this;
      }

      // optional group Citation = 10 {
      private com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation citation_ = com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation, com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.Builder, com.akdeniz.googleplaycrawler.GooglePlay.Image.CitationOrBuilder> citationBuilder_;
      /**
       * <code>optional group Citation = 10 { ... }</code>
       */
      public boolean hasCitation() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional group Citation = 10 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation getCitation() {
        if (citationBuilder_ == null) {
          return citation_;
        } else {
          return citationBuilder_.getMessage();
        }
      }
      /**
       * <code>optional group Citation = 10 { ... }</code>
       */
      public Builder setCitation(com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation value) {
        if (citationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          citation_ = value;
          onChanged();
        } else {
          citationBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional group Citation = 10 { ... }</code>
       */
      public Builder setCitation(
          com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.Builder builderForValue) {
        if (citationBuilder_ == null) {
          citation_ = builderForValue.build();
          onChanged();
        } else {
          citationBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional group Citation = 10 { ... }</code>
       */
      public Builder mergeCitation(com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation value) {
        if (citationBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              citation_ != com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.getDefaultInstance()) {
            citation_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.newBuilder(citation_).mergeFrom(value).buildPartial();
          } else {
            citation_ = value;
          }
          onChanged();
        } else {
          citationBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional group Citation = 10 { ... }</code>
       */
      public Builder clearCitation() {
        if (citationBuilder_ == null) {
          citation_ = com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.getDefaultInstance();
          onChanged();
        } else {
          citationBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional group Citation = 10 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.Builder getCitationBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getCitationFieldBuilder().getBuilder();
      }
      /**
       * <code>optional group Citation = 10 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Image.CitationOrBuilder getCitationOrBuilder() {
        if (citationBuilder_ != null) {
          return citationBuilder_.getMessageOrBuilder();
        } else {
          return citation_;
        }
      }
      /**
       * <code>optional group Citation = 10 { ... }</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation, com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.Builder, com.akdeniz.googleplaycrawler.GooglePlay.Image.CitationOrBuilder> 
          getCitationFieldBuilder() {
        if (citationBuilder_ == null) {
          citationBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation, com.akdeniz.googleplaycrawler.GooglePlay.Image.Citation.Builder, com.akdeniz.googleplaycrawler.GooglePlay.Image.CitationOrBuilder>(
                  citation_,
                  getParentForChildren(),
                  isClean());
          citation_ = null;
        }
        return citationBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Image)
    }

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

    // @@protoc_insertion_point(class_scope:Image)
  }

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

    // optional string text = 1;
    /**
     * <code>optional string text = 1;</code>
     */
    boolean hasText();
    /**
     * <code>optional string text = 1;</code>
     */
    java.lang.String getText();
    /**
     * <code>optional string text = 1;</code>
     */
    com.google.protobuf.ByteString
        getTextBytes();

    // optional string sourceLocale = 2;
    /**
     * <code>optional string sourceLocale = 2;</code>
     */
    boolean hasSourceLocale();
    /**
     * <code>optional string sourceLocale = 2;</code>
     */
    java.lang.String getSourceLocale();
    /**
     * <code>optional string sourceLocale = 2;</code>
     */
    com.google.protobuf.ByteString
        getSourceLocaleBytes();

    // optional string targetLocale = 3;
    /**
     * <code>optional string targetLocale = 3;</code>
     */
    boolean hasTargetLocale();
    /**
     * <code>optional string targetLocale = 3;</code>
     */
    java.lang.String getTargetLocale();
    /**
     * <code>optional string targetLocale = 3;</code>
     */
    com.google.protobuf.ByteString
        getTargetLocaleBytes();
  }
  /**
   * Protobuf type {@code TranslatedText}
   */
  public static final class TranslatedText extends
      com.google.protobuf.GeneratedMessage
      implements TranslatedTextOrBuilder {
    // Use TranslatedText.newBuilder() to construct.
    private TranslatedText(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TranslatedText(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public TranslatedText getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TranslatedText(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              text_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              sourceLocale_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              targetLocale_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TranslatedText_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TranslatedText_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.class, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string text = 1;
    public static final int TEXT_FIELD_NUMBER = 1;
    private java.lang.Object text_;
    /**
     * <code>optional string text = 1;</code>
     */
    public boolean hasText() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string text = 1;</code>
     */
    public java.lang.String getText() {
      java.lang.Object ref = text_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          text_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string text = 1;</code>
     */
    public com.google.protobuf.ByteString
        getTextBytes() {
      java.lang.Object ref = text_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        text_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string sourceLocale = 2;
    public static final int SOURCELOCALE_FIELD_NUMBER = 2;
    private java.lang.Object sourceLocale_;
    /**
     * <code>optional string sourceLocale = 2;</code>
     */
    public boolean hasSourceLocale() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string sourceLocale = 2;</code>
     */
    public java.lang.String getSourceLocale() {
      java.lang.Object ref = sourceLocale_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          sourceLocale_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string sourceLocale = 2;</code>
     */
    public com.google.protobuf.ByteString
        getSourceLocaleBytes() {
      java.lang.Object ref = sourceLocale_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sourceLocale_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string targetLocale = 3;
    public static final int TARGETLOCALE_FIELD_NUMBER = 3;
    private java.lang.Object targetLocale_;
    /**
     * <code>optional string targetLocale = 3;</code>
     */
    public boolean hasTargetLocale() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string targetLocale = 3;</code>
     */
    public java.lang.String getTargetLocale() {
      java.lang.Object ref = targetLocale_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          targetLocale_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string targetLocale = 3;</code>
     */
    public com.google.protobuf.ByteString
        getTargetLocaleBytes() {
      java.lang.Object ref = targetLocale_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        targetLocale_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      text_ = "";
      sourceLocale_ = "";
      targetLocale_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

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

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getTextBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getSourceLocaleBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getTargetLocaleBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code TranslatedText}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.TranslatedTextOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TranslatedText_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TranslatedText_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.class, com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        text_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        sourceLocale_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        targetLocale_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TranslatedText_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText build() {
        com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText result = new com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.text_ = text_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.sourceLocale_ = sourceLocale_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.targetLocale_ = targetLocale_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.TranslatedText.getDefaultInstance()) return this;
        if (other.hasText()) {
          bitField0_ |= 0x00000001;
          text_ = other.text_;
          onChanged();
        }
        if (other.hasSourceLocale()) {
          bitField0_ |= 0x00000002;
          sourceLocale_ = other.sourceLocale_;
          onChanged();
        }
        if (other.hasTargetLocale()) {
          bitField0_ |= 0x00000004;
          targetLocale_ = other.targetLocale_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string text = 1;
      private java.lang.Object text_ = "";
      /**
       * <code>optional string text = 1;</code>
       */
      public boolean hasText() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string text = 1;</code>
       */
      public java.lang.String getText() {
        java.lang.Object ref = text_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          text_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string text = 1;</code>
       */
      public com.google.protobuf.ByteString
          getTextBytes() {
        java.lang.Object ref = text_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          text_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string text = 1;</code>
       */
      public Builder setText(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        text_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string text = 1;</code>
       */
      public Builder clearText() {
        bitField0_ = (bitField0_ & ~0x00000001);
        text_ = getDefaultInstance().getText();
        onChanged();
        return this;
      }
      /**
       * <code>optional string text = 1;</code>
       */
      public Builder setTextBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        text_ = value;
        onChanged();
        return this;
      }

      // optional string sourceLocale = 2;
      private java.lang.Object sourceLocale_ = "";
      /**
       * <code>optional string sourceLocale = 2;</code>
       */
      public boolean hasSourceLocale() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string sourceLocale = 2;</code>
       */
      public java.lang.String getSourceLocale() {
        java.lang.Object ref = sourceLocale_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          sourceLocale_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string sourceLocale = 2;</code>
       */
      public com.google.protobuf.ByteString
          getSourceLocaleBytes() {
        java.lang.Object ref = sourceLocale_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sourceLocale_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string sourceLocale = 2;</code>
       */
      public Builder setSourceLocale(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        sourceLocale_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string sourceLocale = 2;</code>
       */
      public Builder clearSourceLocale() {
        bitField0_ = (bitField0_ & ~0x00000002);
        sourceLocale_ = getDefaultInstance().getSourceLocale();
        onChanged();
        return this;
      }
      /**
       * <code>optional string sourceLocale = 2;</code>
       */
      public Builder setSourceLocaleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        sourceLocale_ = value;
        onChanged();
        return this;
      }

      // optional string targetLocale = 3;
      private java.lang.Object targetLocale_ = "";
      /**
       * <code>optional string targetLocale = 3;</code>
       */
      public boolean hasTargetLocale() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string targetLocale = 3;</code>
       */
      public java.lang.String getTargetLocale() {
        java.lang.Object ref = targetLocale_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          targetLocale_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string targetLocale = 3;</code>
       */
      public com.google.protobuf.ByteString
          getTargetLocaleBytes() {
        java.lang.Object ref = targetLocale_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          targetLocale_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string targetLocale = 3;</code>
       */
      public Builder setTargetLocale(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        targetLocale_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string targetLocale = 3;</code>
       */
      public Builder clearTargetLocale() {
        bitField0_ = (bitField0_ & ~0x00000004);
        targetLocale_ = getDefaultInstance().getTargetLocale();
        onChanged();
        return this;
      }
      /**
       * <code>optional string targetLocale = 3;</code>
       */
      public Builder setTargetLocaleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        targetLocale_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:TranslatedText)
    }

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

    // @@protoc_insertion_point(class_scope:TranslatedText)
  }

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

    // optional bool setByUser = 1;
    /**
     * <code>optional bool setByUser = 1;</code>
     */
    boolean hasSetByUser();
    /**
     * <code>optional bool setByUser = 1;</code>
     */
    boolean getSetByUser();

    // optional int64 total = 2;
    /**
     * <code>optional int64 total = 2;</code>
     */
    boolean hasTotal();
    /**
     * <code>optional int64 total = 2;</code>
     */
    long getTotal();

    // optional int64 circlesTotal = 3;
    /**
     * <code>optional int64 circlesTotal = 3;</code>
     */
    boolean hasCirclesTotal();
    /**
     * <code>optional int64 circlesTotal = 3;</code>
     */
    long getCirclesTotal();

    // repeated .PlusPerson circlesPeople = 4;
    /**
     * <code>repeated .PlusPerson circlesPeople = 4;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson> 
        getCirclesPeopleList();
    /**
     * <code>repeated .PlusPerson circlesPeople = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson getCirclesPeople(int index);
    /**
     * <code>repeated .PlusPerson circlesPeople = 4;</code>
     */
    int getCirclesPeopleCount();
    /**
     * <code>repeated .PlusPerson circlesPeople = 4;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.PlusPersonOrBuilder> 
        getCirclesPeopleOrBuilderList();
    /**
     * <code>repeated .PlusPerson circlesPeople = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PlusPersonOrBuilder getCirclesPeopleOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code PlusOneData}
   */
  public static final class PlusOneData extends
      com.google.protobuf.GeneratedMessage
      implements PlusOneDataOrBuilder {
    // Use PlusOneData.newBuilder() to construct.
    private PlusOneData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PlusOneData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public PlusOneData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private PlusOneData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              setByUser_ = input.readBool();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              total_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              circlesTotal_ = input.readInt64();
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                circlesPeople_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson>();
                mutable_bitField0_ |= 0x00000008;
              }
              circlesPeople_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          circlesPeople_ = java.util.Collections.unmodifiableList(circlesPeople_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PlusOneData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PlusOneData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.class, com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.Builder.class);
    }

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

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

    private int bitField0_;
    // optional bool setByUser = 1;
    public static final int SETBYUSER_FIELD_NUMBER = 1;
    private boolean setByUser_;
    /**
     * <code>optional bool setByUser = 1;</code>
     */
    public boolean hasSetByUser() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool setByUser = 1;</code>
     */
    public boolean getSetByUser() {
      return setByUser_;
    }

    // optional int64 total = 2;
    public static final int TOTAL_FIELD_NUMBER = 2;
    private long total_;
    /**
     * <code>optional int64 total = 2;</code>
     */
    public boolean hasTotal() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 total = 2;</code>
     */
    public long getTotal() {
      return total_;
    }

    // optional int64 circlesTotal = 3;
    public static final int CIRCLESTOTAL_FIELD_NUMBER = 3;
    private long circlesTotal_;
    /**
     * <code>optional int64 circlesTotal = 3;</code>
     */
    public boolean hasCirclesTotal() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 circlesTotal = 3;</code>
     */
    public long getCirclesTotal() {
      return circlesTotal_;
    }

    // repeated .PlusPerson circlesPeople = 4;
    public static final int CIRCLESPEOPLE_FIELD_NUMBER = 4;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson> circlesPeople_;
    /**
     * <code>repeated .PlusPerson circlesPeople = 4;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson> getCirclesPeopleList() {
      return circlesPeople_;
    }
    /**
     * <code>repeated .PlusPerson circlesPeople = 4;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.PlusPersonOrBuilder> 
        getCirclesPeopleOrBuilderList() {
      return circlesPeople_;
    }
    /**
     * <code>repeated .PlusPerson circlesPeople = 4;</code>
     */
    public int getCirclesPeopleCount() {
      return circlesPeople_.size();
    }
    /**
     * <code>repeated .PlusPerson circlesPeople = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson getCirclesPeople(int index) {
      return circlesPeople_.get(index);
    }
    /**
     * <code>repeated .PlusPerson circlesPeople = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PlusPersonOrBuilder getCirclesPeopleOrBuilder(
        int index) {
      return circlesPeople_.get(index);
    }

    private void initFields() {
      setByUser_ = false;
      total_ = 0L;
      circlesTotal_ = 0L;
      circlesPeople_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, setByUser_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, total_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, circlesTotal_);
      }
      for (int i = 0; i < circlesPeople_.size(); i++) {
        output.writeMessage(4, circlesPeople_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, setByUser_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, total_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, circlesTotal_);
      }
      for (int i = 0; i < circlesPeople_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, circlesPeople_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code PlusOneData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.PlusOneDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PlusOneData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PlusOneData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.class, com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        setByUser_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        total_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        circlesTotal_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        if (circlesPeopleBuilder_ == null) {
          circlesPeople_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          circlesPeopleBuilder_.clear();
        }
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PlusOneData_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData build() {
        com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData result = new com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.setByUser_ = setByUser_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.total_ = total_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.circlesTotal_ = circlesTotal_;
        if (circlesPeopleBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            circlesPeople_ = java.util.Collections.unmodifiableList(circlesPeople_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.circlesPeople_ = circlesPeople_;
        } else {
          result.circlesPeople_ = circlesPeopleBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.getDefaultInstance()) return this;
        if (other.hasSetByUser()) {
          setSetByUser(other.getSetByUser());
        }
        if (other.hasTotal()) {
          setTotal(other.getTotal());
        }
        if (other.hasCirclesTotal()) {
          setCirclesTotal(other.getCirclesTotal());
        }
        if (circlesPeopleBuilder_ == null) {
          if (!other.circlesPeople_.isEmpty()) {
            if (circlesPeople_.isEmpty()) {
              circlesPeople_ = other.circlesPeople_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureCirclesPeopleIsMutable();
              circlesPeople_.addAll(other.circlesPeople_);
            }
            onChanged();
          }
        } else {
          if (!other.circlesPeople_.isEmpty()) {
            if (circlesPeopleBuilder_.isEmpty()) {
              circlesPeopleBuilder_.dispose();
              circlesPeopleBuilder_ = null;
              circlesPeople_ = other.circlesPeople_;
              bitField0_ = (bitField0_ & ~0x00000008);
              circlesPeopleBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getCirclesPeopleFieldBuilder() : null;
            } else {
              circlesPeopleBuilder_.addAllMessages(other.circlesPeople_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional bool setByUser = 1;
      private boolean setByUser_ ;
      /**
       * <code>optional bool setByUser = 1;</code>
       */
      public boolean hasSetByUser() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bool setByUser = 1;</code>
       */
      public boolean getSetByUser() {
        return setByUser_;
      }
      /**
       * <code>optional bool setByUser = 1;</code>
       */
      public Builder setSetByUser(boolean value) {
        bitField0_ |= 0x00000001;
        setByUser_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool setByUser = 1;</code>
       */
      public Builder clearSetByUser() {
        bitField0_ = (bitField0_ & ~0x00000001);
        setByUser_ = false;
        onChanged();
        return this;
      }

      // optional int64 total = 2;
      private long total_ ;
      /**
       * <code>optional int64 total = 2;</code>
       */
      public boolean hasTotal() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 total = 2;</code>
       */
      public long getTotal() {
        return total_;
      }
      /**
       * <code>optional int64 total = 2;</code>
       */
      public Builder setTotal(long value) {
        bitField0_ |= 0x00000002;
        total_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 total = 2;</code>
       */
      public Builder clearTotal() {
        bitField0_ = (bitField0_ & ~0x00000002);
        total_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 circlesTotal = 3;
      private long circlesTotal_ ;
      /**
       * <code>optional int64 circlesTotal = 3;</code>
       */
      public boolean hasCirclesTotal() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 circlesTotal = 3;</code>
       */
      public long getCirclesTotal() {
        return circlesTotal_;
      }
      /**
       * <code>optional int64 circlesTotal = 3;</code>
       */
      public Builder setCirclesTotal(long value) {
        bitField0_ |= 0x00000004;
        circlesTotal_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 circlesTotal = 3;</code>
       */
      public Builder clearCirclesTotal() {
        bitField0_ = (bitField0_ & ~0x00000004);
        circlesTotal_ = 0L;
        onChanged();
        return this;
      }

      // repeated .PlusPerson circlesPeople = 4;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson> circlesPeople_ =
        java.util.Collections.emptyList();
      private void ensureCirclesPeopleIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          circlesPeople_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson>(circlesPeople_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson, com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PlusPersonOrBuilder> circlesPeopleBuilder_;

      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson> getCirclesPeopleList() {
        if (circlesPeopleBuilder_ == null) {
          return java.util.Collections.unmodifiableList(circlesPeople_);
        } else {
          return circlesPeopleBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public int getCirclesPeopleCount() {
        if (circlesPeopleBuilder_ == null) {
          return circlesPeople_.size();
        } else {
          return circlesPeopleBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson getCirclesPeople(int index) {
        if (circlesPeopleBuilder_ == null) {
          return circlesPeople_.get(index);
        } else {
          return circlesPeopleBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public Builder setCirclesPeople(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson value) {
        if (circlesPeopleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCirclesPeopleIsMutable();
          circlesPeople_.set(index, value);
          onChanged();
        } else {
          circlesPeopleBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public Builder setCirclesPeople(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.Builder builderForValue) {
        if (circlesPeopleBuilder_ == null) {
          ensureCirclesPeopleIsMutable();
          circlesPeople_.set(index, builderForValue.build());
          onChanged();
        } else {
          circlesPeopleBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public Builder addCirclesPeople(com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson value) {
        if (circlesPeopleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCirclesPeopleIsMutable();
          circlesPeople_.add(value);
          onChanged();
        } else {
          circlesPeopleBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public Builder addCirclesPeople(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson value) {
        if (circlesPeopleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCirclesPeopleIsMutable();
          circlesPeople_.add(index, value);
          onChanged();
        } else {
          circlesPeopleBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public Builder addCirclesPeople(
          com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.Builder builderForValue) {
        if (circlesPeopleBuilder_ == null) {
          ensureCirclesPeopleIsMutable();
          circlesPeople_.add(builderForValue.build());
          onChanged();
        } else {
          circlesPeopleBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public Builder addCirclesPeople(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.Builder builderForValue) {
        if (circlesPeopleBuilder_ == null) {
          ensureCirclesPeopleIsMutable();
          circlesPeople_.add(index, builderForValue.build());
          onChanged();
        } else {
          circlesPeopleBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public Builder addAllCirclesPeople(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson> values) {
        if (circlesPeopleBuilder_ == null) {
          ensureCirclesPeopleIsMutable();
          super.addAll(values, circlesPeople_);
          onChanged();
        } else {
          circlesPeopleBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public Builder clearCirclesPeople() {
        if (circlesPeopleBuilder_ == null) {
          circlesPeople_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          circlesPeopleBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public Builder removeCirclesPeople(int index) {
        if (circlesPeopleBuilder_ == null) {
          ensureCirclesPeopleIsMutable();
          circlesPeople_.remove(index);
          onChanged();
        } else {
          circlesPeopleBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.Builder getCirclesPeopleBuilder(
          int index) {
        return getCirclesPeopleFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PlusPersonOrBuilder getCirclesPeopleOrBuilder(
          int index) {
        if (circlesPeopleBuilder_ == null) {
          return circlesPeople_.get(index);  } else {
          return circlesPeopleBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.PlusPersonOrBuilder> 
           getCirclesPeopleOrBuilderList() {
        if (circlesPeopleBuilder_ != null) {
          return circlesPeopleBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(circlesPeople_);
        }
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.Builder addCirclesPeopleBuilder() {
        return getCirclesPeopleFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.getDefaultInstance());
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.Builder addCirclesPeopleBuilder(
          int index) {
        return getCirclesPeopleFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.getDefaultInstance());
      }
      /**
       * <code>repeated .PlusPerson circlesPeople = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.Builder> 
           getCirclesPeopleBuilderList() {
        return getCirclesPeopleFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson, com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PlusPersonOrBuilder> 
          getCirclesPeopleFieldBuilder() {
        if (circlesPeopleBuilder_ == null) {
          circlesPeopleBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson, com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PlusPersonOrBuilder>(
                  circlesPeople_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          circlesPeople_ = null;
        }
        return circlesPeopleBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:PlusOneData)
    }

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

    // @@protoc_insertion_point(class_scope:PlusOneData)
  }

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

    // optional string displayName = 2;
    /**
     * <code>optional string displayName = 2;</code>
     */
    boolean hasDisplayName();
    /**
     * <code>optional string displayName = 2;</code>
     */
    java.lang.String getDisplayName();
    /**
     * <code>optional string displayName = 2;</code>
     */
    com.google.protobuf.ByteString
        getDisplayNameBytes();

    // optional string profileImageUrl = 4;
    /**
     * <code>optional string profileImageUrl = 4;</code>
     */
    boolean hasProfileImageUrl();
    /**
     * <code>optional string profileImageUrl = 4;</code>
     */
    java.lang.String getProfileImageUrl();
    /**
     * <code>optional string profileImageUrl = 4;</code>
     */
    com.google.protobuf.ByteString
        getProfileImageUrlBytes();
  }
  /**
   * Protobuf type {@code PlusPerson}
   */
  public static final class PlusPerson extends
      com.google.protobuf.GeneratedMessage
      implements PlusPersonOrBuilder {
    // Use PlusPerson.newBuilder() to construct.
    private PlusPerson(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PlusPerson(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public PlusPerson getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private PlusPerson(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 18: {
              bitField0_ |= 0x00000001;
              displayName_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000002;
              profileImageUrl_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PlusPerson_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PlusPerson_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.class, com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string displayName = 2;
    public static final int DISPLAYNAME_FIELD_NUMBER = 2;
    private java.lang.Object displayName_;
    /**
     * <code>optional string displayName = 2;</code>
     */
    public boolean hasDisplayName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string displayName = 2;</code>
     */
    public java.lang.String getDisplayName() {
      java.lang.Object ref = displayName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          displayName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string displayName = 2;</code>
     */
    public com.google.protobuf.ByteString
        getDisplayNameBytes() {
      java.lang.Object ref = displayName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        displayName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string profileImageUrl = 4;
    public static final int PROFILEIMAGEURL_FIELD_NUMBER = 4;
    private java.lang.Object profileImageUrl_;
    /**
     * <code>optional string profileImageUrl = 4;</code>
     */
    public boolean hasProfileImageUrl() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string profileImageUrl = 4;</code>
     */
    public java.lang.String getProfileImageUrl() {
      java.lang.Object ref = profileImageUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          profileImageUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string profileImageUrl = 4;</code>
     */
    public com.google.protobuf.ByteString
        getProfileImageUrlBytes() {
      java.lang.Object ref = profileImageUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        profileImageUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

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

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getDisplayNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getProfileImageUrlBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code PlusPerson}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.PlusPersonOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PlusPerson_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PlusPerson_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.class, com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

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

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PlusPerson_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson build() {
        com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson result = new com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.displayName_ = displayName_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.profileImageUrl_ = profileImageUrl_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.PlusPerson.getDefaultInstance()) return this;
        if (other.hasDisplayName()) {
          bitField0_ |= 0x00000001;
          displayName_ = other.displayName_;
          onChanged();
        }
        if (other.hasProfileImageUrl()) {
          bitField0_ |= 0x00000002;
          profileImageUrl_ = other.profileImageUrl_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string displayName = 2;
      private java.lang.Object displayName_ = "";
      /**
       * <code>optional string displayName = 2;</code>
       */
      public boolean hasDisplayName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string displayName = 2;</code>
       */
      public java.lang.String getDisplayName() {
        java.lang.Object ref = displayName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          displayName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string displayName = 2;</code>
       */
      public com.google.protobuf.ByteString
          getDisplayNameBytes() {
        java.lang.Object ref = displayName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          displayName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string displayName = 2;</code>
       */
      public Builder setDisplayName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        displayName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string displayName = 2;</code>
       */
      public Builder clearDisplayName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        displayName_ = getDefaultInstance().getDisplayName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string displayName = 2;</code>
       */
      public Builder setDisplayNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        displayName_ = value;
        onChanged();
        return this;
      }

      // optional string profileImageUrl = 4;
      private java.lang.Object profileImageUrl_ = "";
      /**
       * <code>optional string profileImageUrl = 4;</code>
       */
      public boolean hasProfileImageUrl() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string profileImageUrl = 4;</code>
       */
      public java.lang.String getProfileImageUrl() {
        java.lang.Object ref = profileImageUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          profileImageUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string profileImageUrl = 4;</code>
       */
      public com.google.protobuf.ByteString
          getProfileImageUrlBytes() {
        java.lang.Object ref = profileImageUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          profileImageUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string profileImageUrl = 4;</code>
       */
      public Builder setProfileImageUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        profileImageUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string profileImageUrl = 4;</code>
       */
      public Builder clearProfileImageUrl() {
        bitField0_ = (bitField0_ & ~0x00000002);
        profileImageUrl_ = getDefaultInstance().getProfileImageUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string profileImageUrl = 4;</code>
       */
      public Builder setProfileImageUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        profileImageUrl_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:PlusPerson)
    }

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

    // @@protoc_insertion_point(class_scope:PlusPerson)
  }

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

    // optional string name = 1;
    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // optional .MusicDetails details = 2;
    /**
     * <code>optional .MusicDetails details = 2;</code>
     */
    boolean hasDetails();
    /**
     * <code>optional .MusicDetails details = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails getDetails();
    /**
     * <code>optional .MusicDetails details = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.MusicDetailsOrBuilder getDetailsOrBuilder();

    // optional .ArtistDetails displayArtist = 3;
    /**
     * <code>optional .ArtistDetails displayArtist = 3;</code>
     */
    boolean hasDisplayArtist();
    /**
     * <code>optional .ArtistDetails displayArtist = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails getDisplayArtist();
    /**
     * <code>optional .ArtistDetails displayArtist = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder getDisplayArtistOrBuilder();
  }
  /**
   * Protobuf type {@code AlbumDetails}
   */
  public static final class AlbumDetails extends
      com.google.protobuf.GeneratedMessage
      implements AlbumDetailsOrBuilder {
    // Use AlbumDetails.newBuilder() to construct.
    private AlbumDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AlbumDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public AlbumDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AlbumDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              name_ = input.readBytes();
              break;
            }
            case 18: {
              com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = details_.toBuilder();
              }
              details_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(details_);
                details_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = displayArtist_.toBuilder();
              }
              displayArtist_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(displayArtist_);
                displayArtist_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AlbumDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AlbumDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .MusicDetails details = 2;
    public static final int DETAILS_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails details_;
    /**
     * <code>optional .MusicDetails details = 2;</code>
     */
    public boolean hasDetails() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .MusicDetails details = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails getDetails() {
      return details_;
    }
    /**
     * <code>optional .MusicDetails details = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.MusicDetailsOrBuilder getDetailsOrBuilder() {
      return details_;
    }

    // optional .ArtistDetails displayArtist = 3;
    public static final int DISPLAYARTIST_FIELD_NUMBER = 3;
    private com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails displayArtist_;
    /**
     * <code>optional .ArtistDetails displayArtist = 3;</code>
     */
    public boolean hasDisplayArtist() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .ArtistDetails displayArtist = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails getDisplayArtist() {
      return displayArtist_;
    }
    /**
     * <code>optional .ArtistDetails displayArtist = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder getDisplayArtistOrBuilder() {
      return displayArtist_;
    }

    private void initFields() {
      name_ = "";
      details_ = com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.getDefaultInstance();
      displayArtist_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, details_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, displayArtist_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, details_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, displayArtist_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AlbumDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AlbumDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AlbumDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        if (detailsBuilder_ == null) {
          details_ = com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.getDefaultInstance();
        } else {
          detailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (displayArtistBuilder_ == null) {
          displayArtist_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance();
        } else {
          displayArtistBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AlbumDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (detailsBuilder_ == null) {
          result.details_ = details_;
        } else {
          result.details_ = detailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (displayArtistBuilder_ == null) {
          result.displayArtist_ = displayArtist_;
        } else {
          result.displayArtist_ = displayArtistBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasDetails()) {
          mergeDetails(other.getDetails());
        }
        if (other.hasDisplayArtist()) {
          mergeDisplayArtist(other.getDisplayArtist());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string name = 1;
      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      // optional .MusicDetails details = 2;
      private com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails details_ = com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails, com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.MusicDetailsOrBuilder> detailsBuilder_;
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public boolean hasDetails() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails getDetails() {
        if (detailsBuilder_ == null) {
          return details_;
        } else {
          return detailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public Builder setDetails(com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails value) {
        if (detailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          details_ = value;
          onChanged();
        } else {
          detailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public Builder setDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.Builder builderForValue) {
        if (detailsBuilder_ == null) {
          details_ = builderForValue.build();
          onChanged();
        } else {
          detailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public Builder mergeDetails(com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails value) {
        if (detailsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              details_ != com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.getDefaultInstance()) {
            details_ =
              com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.newBuilder(details_).mergeFrom(value).buildPartial();
          } else {
            details_ = value;
          }
          onChanged();
        } else {
          detailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public Builder clearDetails() {
        if (detailsBuilder_ == null) {
          details_ = com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.getDefaultInstance();
          onChanged();
        } else {
          detailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.Builder getDetailsBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.MusicDetailsOrBuilder getDetailsOrBuilder() {
        if (detailsBuilder_ != null) {
          return detailsBuilder_.getMessageOrBuilder();
        } else {
          return details_;
        }
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails, com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.MusicDetailsOrBuilder> 
          getDetailsFieldBuilder() {
        if (detailsBuilder_ == null) {
          detailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails, com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.MusicDetailsOrBuilder>(
                  details_,
                  getParentForChildren(),
                  isClean());
          details_ = null;
        }
        return detailsBuilder_;
      }

      // optional .ArtistDetails displayArtist = 3;
      private com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails displayArtist_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder> displayArtistBuilder_;
      /**
       * <code>optional .ArtistDetails displayArtist = 3;</code>
       */
      public boolean hasDisplayArtist() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails getDisplayArtist() {
        if (displayArtistBuilder_ == null) {
          return displayArtist_;
        } else {
          return displayArtistBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 3;</code>
       */
      public Builder setDisplayArtist(com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails value) {
        if (displayArtistBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          displayArtist_ = value;
          onChanged();
        } else {
          displayArtistBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 3;</code>
       */
      public Builder setDisplayArtist(
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder builderForValue) {
        if (displayArtistBuilder_ == null) {
          displayArtist_ = builderForValue.build();
          onChanged();
        } else {
          displayArtistBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 3;</code>
       */
      public Builder mergeDisplayArtist(com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails value) {
        if (displayArtistBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              displayArtist_ != com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance()) {
            displayArtist_ =
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.newBuilder(displayArtist_).mergeFrom(value).buildPartial();
          } else {
            displayArtist_ = value;
          }
          onChanged();
        } else {
          displayArtistBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 3;</code>
       */
      public Builder clearDisplayArtist() {
        if (displayArtistBuilder_ == null) {
          displayArtist_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance();
          onChanged();
        } else {
          displayArtistBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder getDisplayArtistBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getDisplayArtistFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder getDisplayArtistOrBuilder() {
        if (displayArtistBuilder_ != null) {
          return displayArtistBuilder_.getMessageOrBuilder();
        } else {
          return displayArtist_;
        }
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder> 
          getDisplayArtistFieldBuilder() {
        if (displayArtistBuilder_ == null) {
          displayArtistBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder>(
                  displayArtist_,
                  getParentForChildren(),
                  isClean());
          displayArtist_ = null;
        }
        return displayArtistBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:AlbumDetails)
    }

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

    // @@protoc_insertion_point(class_scope:AlbumDetails)
  }

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

    // optional string developerName = 1;
    /**
     * <code>optional string developerName = 1;</code>
     */
    boolean hasDeveloperName();
    /**
     * <code>optional string developerName = 1;</code>
     */
    java.lang.String getDeveloperName();
    /**
     * <code>optional string developerName = 1;</code>
     */
    com.google.protobuf.ByteString
        getDeveloperNameBytes();

    // optional int32 majorVersionNumber = 2;
    /**
     * <code>optional int32 majorVersionNumber = 2;</code>
     */
    boolean hasMajorVersionNumber();
    /**
     * <code>optional int32 majorVersionNumber = 2;</code>
     */
    int getMajorVersionNumber();

    // optional int32 versionCode = 3;
    /**
     * <code>optional int32 versionCode = 3;</code>
     */
    boolean hasVersionCode();
    /**
     * <code>optional int32 versionCode = 3;</code>
     */
    int getVersionCode();

    // optional string versionString = 4;
    /**
     * <code>optional string versionString = 4;</code>
     */
    boolean hasVersionString();
    /**
     * <code>optional string versionString = 4;</code>
     */
    java.lang.String getVersionString();
    /**
     * <code>optional string versionString = 4;</code>
     */
    com.google.protobuf.ByteString
        getVersionStringBytes();

    // optional string title = 5;
    /**
     * <code>optional string title = 5;</code>
     */
    boolean hasTitle();
    /**
     * <code>optional string title = 5;</code>
     */
    java.lang.String getTitle();
    /**
     * <code>optional string title = 5;</code>
     */
    com.google.protobuf.ByteString
        getTitleBytes();

    // repeated string appCategory = 7;
    /**
     * <code>repeated string appCategory = 7;</code>
     */
    java.util.List<java.lang.String>
    getAppCategoryList();
    /**
     * <code>repeated string appCategory = 7;</code>
     */
    int getAppCategoryCount();
    /**
     * <code>repeated string appCategory = 7;</code>
     */
    java.lang.String getAppCategory(int index);
    /**
     * <code>repeated string appCategory = 7;</code>
     */
    com.google.protobuf.ByteString
        getAppCategoryBytes(int index);

    // optional int32 contentRating = 8;
    /**
     * <code>optional int32 contentRating = 8;</code>
     */
    boolean hasContentRating();
    /**
     * <code>optional int32 contentRating = 8;</code>
     */
    int getContentRating();

    // optional int64 installationSize = 9;
    /**
     * <code>optional int64 installationSize = 9;</code>
     */
    boolean hasInstallationSize();
    /**
     * <code>optional int64 installationSize = 9;</code>
     */
    long getInstallationSize();

    // repeated string permission = 10;
    /**
     * <code>repeated string permission = 10;</code>
     */
    java.util.List<java.lang.String>
    getPermissionList();
    /**
     * <code>repeated string permission = 10;</code>
     */
    int getPermissionCount();
    /**
     * <code>repeated string permission = 10;</code>
     */
    java.lang.String getPermission(int index);
    /**
     * <code>repeated string permission = 10;</code>
     */
    com.google.protobuf.ByteString
        getPermissionBytes(int index);

    // optional string developerEmail = 11;
    /**
     * <code>optional string developerEmail = 11;</code>
     */
    boolean hasDeveloperEmail();
    /**
     * <code>optional string developerEmail = 11;</code>
     */
    java.lang.String getDeveloperEmail();
    /**
     * <code>optional string developerEmail = 11;</code>
     */
    com.google.protobuf.ByteString
        getDeveloperEmailBytes();

    // optional string developerWebsite = 12;
    /**
     * <code>optional string developerWebsite = 12;</code>
     */
    boolean hasDeveloperWebsite();
    /**
     * <code>optional string developerWebsite = 12;</code>
     */
    java.lang.String getDeveloperWebsite();
    /**
     * <code>optional string developerWebsite = 12;</code>
     */
    com.google.protobuf.ByteString
        getDeveloperWebsiteBytes();

    // optional string numDownloads = 13;
    /**
     * <code>optional string numDownloads = 13;</code>
     */
    boolean hasNumDownloads();
    /**
     * <code>optional string numDownloads = 13;</code>
     */
    java.lang.String getNumDownloads();
    /**
     * <code>optional string numDownloads = 13;</code>
     */
    com.google.protobuf.ByteString
        getNumDownloadsBytes();

    // optional string packageName = 14;
    /**
     * <code>optional string packageName = 14;</code>
     */
    boolean hasPackageName();
    /**
     * <code>optional string packageName = 14;</code>
     */
    java.lang.String getPackageName();
    /**
     * <code>optional string packageName = 14;</code>
     */
    com.google.protobuf.ByteString
        getPackageNameBytes();

    // optional string recentChangesHtml = 15;
    /**
     * <code>optional string recentChangesHtml = 15;</code>
     */
    boolean hasRecentChangesHtml();
    /**
     * <code>optional string recentChangesHtml = 15;</code>
     */
    java.lang.String getRecentChangesHtml();
    /**
     * <code>optional string recentChangesHtml = 15;</code>
     */
    com.google.protobuf.ByteString
        getRecentChangesHtmlBytes();

    // optional string uploadDate = 16;
    /**
     * <code>optional string uploadDate = 16;</code>
     */
    boolean hasUploadDate();
    /**
     * <code>optional string uploadDate = 16;</code>
     */
    java.lang.String getUploadDate();
    /**
     * <code>optional string uploadDate = 16;</code>
     */
    com.google.protobuf.ByteString
        getUploadDateBytes();

    // repeated .FileMetadata file = 17;
    /**
     * <code>repeated .FileMetadata file = 17;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata> 
        getFileList();
    /**
     * <code>repeated .FileMetadata file = 17;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata getFile(int index);
    /**
     * <code>repeated .FileMetadata file = 17;</code>
     */
    int getFileCount();
    /**
     * <code>repeated .FileMetadata file = 17;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.FileMetadataOrBuilder> 
        getFileOrBuilderList();
    /**
     * <code>repeated .FileMetadata file = 17;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.FileMetadataOrBuilder getFileOrBuilder(
        int index);

    // optional string appType = 18;
    /**
     * <code>optional string appType = 18;</code>
     */
    boolean hasAppType();
    /**
     * <code>optional string appType = 18;</code>
     */
    java.lang.String getAppType();
    /**
     * <code>optional string appType = 18;</code>
     */
    com.google.protobuf.ByteString
        getAppTypeBytes();
  }
  /**
   * Protobuf type {@code AppDetails}
   */
  public static final class AppDetails extends
      com.google.protobuf.GeneratedMessage
      implements AppDetailsOrBuilder {
    // Use AppDetails.newBuilder() to construct.
    private AppDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AppDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public AppDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AppDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              developerName_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              majorVersionNumber_ = input.readInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              versionCode_ = input.readInt32();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              versionString_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              title_ = input.readBytes();
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                appCategory_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000020;
              }
              appCategory_.add(input.readBytes());
              break;
            }
            case 64: {
              bitField0_ |= 0x00000020;
              contentRating_ = input.readInt32();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000040;
              installationSize_ = input.readInt64();
              break;
            }
            case 82: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                permission_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000100;
              }
              permission_.add(input.readBytes());
              break;
            }
            case 90: {
              bitField0_ |= 0x00000080;
              developerEmail_ = input.readBytes();
              break;
            }
            case 98: {
              bitField0_ |= 0x00000100;
              developerWebsite_ = input.readBytes();
              break;
            }
            case 106: {
              bitField0_ |= 0x00000200;
              numDownloads_ = input.readBytes();
              break;
            }
            case 114: {
              bitField0_ |= 0x00000400;
              packageName_ = input.readBytes();
              break;
            }
            case 122: {
              bitField0_ |= 0x00000800;
              recentChangesHtml_ = input.readBytes();
              break;
            }
            case 130: {
              bitField0_ |= 0x00001000;
              uploadDate_ = input.readBytes();
              break;
            }
            case 138: {
              if (!((mutable_bitField0_ & 0x00008000) == 0x00008000)) {
                file_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata>();
                mutable_bitField0_ |= 0x00008000;
              }
              file_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.PARSER, extensionRegistry));
              break;
            }
            case 146: {
              bitField0_ |= 0x00002000;
              appType_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          appCategory_ = new com.google.protobuf.UnmodifiableLazyStringList(appCategory_);
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          permission_ = new com.google.protobuf.UnmodifiableLazyStringList(permission_);
        }
        if (((mutable_bitField0_ & 0x00008000) == 0x00008000)) {
          file_ = java.util.Collections.unmodifiableList(file_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string developerName = 1;
    public static final int DEVELOPERNAME_FIELD_NUMBER = 1;
    private java.lang.Object developerName_;
    /**
     * <code>optional string developerName = 1;</code>
     */
    public boolean hasDeveloperName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string developerName = 1;</code>
     */
    public java.lang.String getDeveloperName() {
      java.lang.Object ref = developerName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          developerName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string developerName = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDeveloperNameBytes() {
      java.lang.Object ref = developerName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        developerName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 majorVersionNumber = 2;
    public static final int MAJORVERSIONNUMBER_FIELD_NUMBER = 2;
    private int majorVersionNumber_;
    /**
     * <code>optional int32 majorVersionNumber = 2;</code>
     */
    public boolean hasMajorVersionNumber() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 majorVersionNumber = 2;</code>
     */
    public int getMajorVersionNumber() {
      return majorVersionNumber_;
    }

    // optional int32 versionCode = 3;
    public static final int VERSIONCODE_FIELD_NUMBER = 3;
    private int versionCode_;
    /**
     * <code>optional int32 versionCode = 3;</code>
     */
    public boolean hasVersionCode() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int32 versionCode = 3;</code>
     */
    public int getVersionCode() {
      return versionCode_;
    }

    // optional string versionString = 4;
    public static final int VERSIONSTRING_FIELD_NUMBER = 4;
    private java.lang.Object versionString_;
    /**
     * <code>optional string versionString = 4;</code>
     */
    public boolean hasVersionString() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string versionString = 4;</code>
     */
    public java.lang.String getVersionString() {
      java.lang.Object ref = versionString_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          versionString_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string versionString = 4;</code>
     */
    public com.google.protobuf.ByteString
        getVersionStringBytes() {
      java.lang.Object ref = versionString_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        versionString_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string title = 5;
    public static final int TITLE_FIELD_NUMBER = 5;
    private java.lang.Object title_;
    /**
     * <code>optional string title = 5;</code>
     */
    public boolean hasTitle() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string title = 5;</code>
     */
    public java.lang.String getTitle() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          title_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string title = 5;</code>
     */
    public com.google.protobuf.ByteString
        getTitleBytes() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        title_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated string appCategory = 7;
    public static final int APPCATEGORY_FIELD_NUMBER = 7;
    private com.google.protobuf.LazyStringList appCategory_;
    /**
     * <code>repeated string appCategory = 7;</code>
     */
    public java.util.List<java.lang.String>
        getAppCategoryList() {
      return appCategory_;
    }
    /**
     * <code>repeated string appCategory = 7;</code>
     */
    public int getAppCategoryCount() {
      return appCategory_.size();
    }
    /**
     * <code>repeated string appCategory = 7;</code>
     */
    public java.lang.String getAppCategory(int index) {
      return appCategory_.get(index);
    }
    /**
     * <code>repeated string appCategory = 7;</code>
     */
    public com.google.protobuf.ByteString
        getAppCategoryBytes(int index) {
      return appCategory_.getByteString(index);
    }

    // optional int32 contentRating = 8;
    public static final int CONTENTRATING_FIELD_NUMBER = 8;
    private int contentRating_;
    /**
     * <code>optional int32 contentRating = 8;</code>
     */
    public boolean hasContentRating() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional int32 contentRating = 8;</code>
     */
    public int getContentRating() {
      return contentRating_;
    }

    // optional int64 installationSize = 9;
    public static final int INSTALLATIONSIZE_FIELD_NUMBER = 9;
    private long installationSize_;
    /**
     * <code>optional int64 installationSize = 9;</code>
     */
    public boolean hasInstallationSize() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional int64 installationSize = 9;</code>
     */
    public long getInstallationSize() {
      return installationSize_;
    }

    // repeated string permission = 10;
    public static final int PERMISSION_FIELD_NUMBER = 10;
    private com.google.protobuf.LazyStringList permission_;
    /**
     * <code>repeated string permission = 10;</code>
     */
    public java.util.List<java.lang.String>
        getPermissionList() {
      return permission_;
    }
    /**
     * <code>repeated string permission = 10;</code>
     */
    public int getPermissionCount() {
      return permission_.size();
    }
    /**
     * <code>repeated string permission = 10;</code>
     */
    public java.lang.String getPermission(int index) {
      return permission_.get(index);
    }
    /**
     * <code>repeated string permission = 10;</code>
     */
    public com.google.protobuf.ByteString
        getPermissionBytes(int index) {
      return permission_.getByteString(index);
    }

    // optional string developerEmail = 11;
    public static final int DEVELOPEREMAIL_FIELD_NUMBER = 11;
    private java.lang.Object developerEmail_;
    /**
     * <code>optional string developerEmail = 11;</code>
     */
    public boolean hasDeveloperEmail() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional string developerEmail = 11;</code>
     */
    public java.lang.String getDeveloperEmail() {
      java.lang.Object ref = developerEmail_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          developerEmail_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string developerEmail = 11;</code>
     */
    public com.google.protobuf.ByteString
        getDeveloperEmailBytes() {
      java.lang.Object ref = developerEmail_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        developerEmail_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string developerWebsite = 12;
    public static final int DEVELOPERWEBSITE_FIELD_NUMBER = 12;
    private java.lang.Object developerWebsite_;
    /**
     * <code>optional string developerWebsite = 12;</code>
     */
    public boolean hasDeveloperWebsite() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional string developerWebsite = 12;</code>
     */
    public java.lang.String getDeveloperWebsite() {
      java.lang.Object ref = developerWebsite_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          developerWebsite_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string developerWebsite = 12;</code>
     */
    public com.google.protobuf.ByteString
        getDeveloperWebsiteBytes() {
      java.lang.Object ref = developerWebsite_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        developerWebsite_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string numDownloads = 13;
    public static final int NUMDOWNLOADS_FIELD_NUMBER = 13;
    private java.lang.Object numDownloads_;
    /**
     * <code>optional string numDownloads = 13;</code>
     */
    public boolean hasNumDownloads() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional string numDownloads = 13;</code>
     */
    public java.lang.String getNumDownloads() {
      java.lang.Object ref = numDownloads_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          numDownloads_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string numDownloads = 13;</code>
     */
    public com.google.protobuf.ByteString
        getNumDownloadsBytes() {
      java.lang.Object ref = numDownloads_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        numDownloads_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string packageName = 14;
    public static final int PACKAGENAME_FIELD_NUMBER = 14;
    private java.lang.Object packageName_;
    /**
     * <code>optional string packageName = 14;</code>
     */
    public boolean hasPackageName() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional string packageName = 14;</code>
     */
    public java.lang.String getPackageName() {
      java.lang.Object ref = packageName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          packageName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string packageName = 14;</code>
     */
    public com.google.protobuf.ByteString
        getPackageNameBytes() {
      java.lang.Object ref = packageName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        packageName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string recentChangesHtml = 15;
    public static final int RECENTCHANGESHTML_FIELD_NUMBER = 15;
    private java.lang.Object recentChangesHtml_;
    /**
     * <code>optional string recentChangesHtml = 15;</code>
     */
    public boolean hasRecentChangesHtml() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional string recentChangesHtml = 15;</code>
     */
    public java.lang.String getRecentChangesHtml() {
      java.lang.Object ref = recentChangesHtml_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          recentChangesHtml_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string recentChangesHtml = 15;</code>
     */
    public com.google.protobuf.ByteString
        getRecentChangesHtmlBytes() {
      java.lang.Object ref = recentChangesHtml_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        recentChangesHtml_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string uploadDate = 16;
    public static final int UPLOADDATE_FIELD_NUMBER = 16;
    private java.lang.Object uploadDate_;
    /**
     * <code>optional string uploadDate = 16;</code>
     */
    public boolean hasUploadDate() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <code>optional string uploadDate = 16;</code>
     */
    public java.lang.String getUploadDate() {
      java.lang.Object ref = uploadDate_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          uploadDate_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string uploadDate = 16;</code>
     */
    public com.google.protobuf.ByteString
        getUploadDateBytes() {
      java.lang.Object ref = uploadDate_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        uploadDate_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated .FileMetadata file = 17;
    public static final int FILE_FIELD_NUMBER = 17;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata> file_;
    /**
     * <code>repeated .FileMetadata file = 17;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata> getFileList() {
      return file_;
    }
    /**
     * <code>repeated .FileMetadata file = 17;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.FileMetadataOrBuilder> 
        getFileOrBuilderList() {
      return file_;
    }
    /**
     * <code>repeated .FileMetadata file = 17;</code>
     */
    public int getFileCount() {
      return file_.size();
    }
    /**
     * <code>repeated .FileMetadata file = 17;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata getFile(int index) {
      return file_.get(index);
    }
    /**
     * <code>repeated .FileMetadata file = 17;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.FileMetadataOrBuilder getFileOrBuilder(
        int index) {
      return file_.get(index);
    }

    // optional string appType = 18;
    public static final int APPTYPE_FIELD_NUMBER = 18;
    private java.lang.Object appType_;
    /**
     * <code>optional string appType = 18;</code>
     */
    public boolean hasAppType() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     * <code>optional string appType = 18;</code>
     */
    public java.lang.String getAppType() {
      java.lang.Object ref = appType_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          appType_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string appType = 18;</code>
     */
    public com.google.protobuf.ByteString
        getAppTypeBytes() {
      java.lang.Object ref = appType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        appType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      developerName_ = "";
      majorVersionNumber_ = 0;
      versionCode_ = 0;
      versionString_ = "";
      title_ = "";
      appCategory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      contentRating_ = 0;
      installationSize_ = 0L;
      permission_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      developerEmail_ = "";
      developerWebsite_ = "";
      numDownloads_ = "";
      packageName_ = "";
      recentChangesHtml_ = "";
      uploadDate_ = "";
      file_ = java.util.Collections.emptyList();
      appType_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getDeveloperNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, majorVersionNumber_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(3, versionCode_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getVersionStringBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getTitleBytes());
      }
      for (int i = 0; i < appCategory_.size(); i++) {
        output.writeBytes(7, appCategory_.getByteString(i));
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt32(8, contentRating_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt64(9, installationSize_);
      }
      for (int i = 0; i < permission_.size(); i++) {
        output.writeBytes(10, permission_.getByteString(i));
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBytes(11, getDeveloperEmailBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBytes(12, getDeveloperWebsiteBytes());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBytes(13, getNumDownloadsBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBytes(14, getPackageNameBytes());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeBytes(15, getRecentChangesHtmlBytes());
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeBytes(16, getUploadDateBytes());
      }
      for (int i = 0; i < file_.size(); i++) {
        output.writeMessage(17, file_.get(i));
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeBytes(18, getAppTypeBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getDeveloperNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, majorVersionNumber_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, versionCode_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getVersionStringBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getTitleBytes());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < appCategory_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(appCategory_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getAppCategoryList().size();
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(8, contentRating_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(9, installationSize_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < permission_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(permission_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getPermissionList().size();
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(11, getDeveloperEmailBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(12, getDeveloperWebsiteBytes());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(13, getNumDownloadsBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(14, getPackageNameBytes());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(15, getRecentChangesHtmlBytes());
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(16, getUploadDateBytes());
      }
      for (int i = 0; i < file_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(17, file_.get(i));
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(18, getAppTypeBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.AppDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AppDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AppDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AppDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        developerName_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        majorVersionNumber_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        versionCode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        versionString_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        title_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        appCategory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        contentRating_ = 0;
        bitField0_ = (bitField0_ & ~0x00000040);
        installationSize_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000080);
        permission_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        developerEmail_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        developerWebsite_ = "";
        bitField0_ = (bitField0_ & ~0x00000400);
        numDownloads_ = "";
        bitField0_ = (bitField0_ & ~0x00000800);
        packageName_ = "";
        bitField0_ = (bitField0_ & ~0x00001000);
        recentChangesHtml_ = "";
        bitField0_ = (bitField0_ & ~0x00002000);
        uploadDate_ = "";
        bitField0_ = (bitField0_ & ~0x00004000);
        if (fileBuilder_ == null) {
          file_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
        } else {
          fileBuilder_.clear();
        }
        appType_ = "";
        bitField0_ = (bitField0_ & ~0x00010000);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AppDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AppDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AppDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AppDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AppDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.AppDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.developerName_ = developerName_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.majorVersionNumber_ = majorVersionNumber_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.versionCode_ = versionCode_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.versionString_ = versionString_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.title_ = title_;
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          appCategory_ = new com.google.protobuf.UnmodifiableLazyStringList(
              appCategory_);
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.appCategory_ = appCategory_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000020;
        }
        result.contentRating_ = contentRating_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000040;
        }
        result.installationSize_ = installationSize_;
        if (((bitField0_ & 0x00000100) == 0x00000100)) {
          permission_ = new com.google.protobuf.UnmodifiableLazyStringList(
              permission_);
          bitField0_ = (bitField0_ & ~0x00000100);
        }
        result.permission_ = permission_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000080;
        }
        result.developerEmail_ = developerEmail_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000100;
        }
        result.developerWebsite_ = developerWebsite_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000200;
        }
        result.numDownloads_ = numDownloads_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00000400;
        }
        result.packageName_ = packageName_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00000800;
        }
        result.recentChangesHtml_ = recentChangesHtml_;
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.uploadDate_ = uploadDate_;
        if (fileBuilder_ == null) {
          if (((bitField0_ & 0x00008000) == 0x00008000)) {
            file_ = java.util.Collections.unmodifiableList(file_);
            bitField0_ = (bitField0_ & ~0x00008000);
          }
          result.file_ = file_;
        } else {
          result.file_ = fileBuilder_.build();
        }
        if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x00002000;
        }
        result.appType_ = appType_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AppDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AppDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AppDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.getDefaultInstance()) return this;
        if (other.hasDeveloperName()) {
          bitField0_ |= 0x00000001;
          developerName_ = other.developerName_;
          onChanged();
        }
        if (other.hasMajorVersionNumber()) {
          setMajorVersionNumber(other.getMajorVersionNumber());
        }
        if (other.hasVersionCode()) {
          setVersionCode(other.getVersionCode());
        }
        if (other.hasVersionString()) {
          bitField0_ |= 0x00000008;
          versionString_ = other.versionString_;
          onChanged();
        }
        if (other.hasTitle()) {
          bitField0_ |= 0x00000010;
          title_ = other.title_;
          onChanged();
        }
        if (!other.appCategory_.isEmpty()) {
          if (appCategory_.isEmpty()) {
            appCategory_ = other.appCategory_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureAppCategoryIsMutable();
            appCategory_.addAll(other.appCategory_);
          }
          onChanged();
        }
        if (other.hasContentRating()) {
          setContentRating(other.getContentRating());
        }
        if (other.hasInstallationSize()) {
          setInstallationSize(other.getInstallationSize());
        }
        if (!other.permission_.isEmpty()) {
          if (permission_.isEmpty()) {
            permission_ = other.permission_;
            bitField0_ = (bitField0_ & ~0x00000100);
          } else {
            ensurePermissionIsMutable();
            permission_.addAll(other.permission_);
          }
          onChanged();
        }
        if (other.hasDeveloperEmail()) {
          bitField0_ |= 0x00000200;
          developerEmail_ = other.developerEmail_;
          onChanged();
        }
        if (other.hasDeveloperWebsite()) {
          bitField0_ |= 0x00000400;
          developerWebsite_ = other.developerWebsite_;
          onChanged();
        }
        if (other.hasNumDownloads()) {
          bitField0_ |= 0x00000800;
          numDownloads_ = other.numDownloads_;
          onChanged();
        }
        if (other.hasPackageName()) {
          bitField0_ |= 0x00001000;
          packageName_ = other.packageName_;
          onChanged();
        }
        if (other.hasRecentChangesHtml()) {
          bitField0_ |= 0x00002000;
          recentChangesHtml_ = other.recentChangesHtml_;
          onChanged();
        }
        if (other.hasUploadDate()) {
          bitField0_ |= 0x00004000;
          uploadDate_ = other.uploadDate_;
          onChanged();
        }
        if (fileBuilder_ == null) {
          if (!other.file_.isEmpty()) {
            if (file_.isEmpty()) {
              file_ = other.file_;
              bitField0_ = (bitField0_ & ~0x00008000);
            } else {
              ensureFileIsMutable();
              file_.addAll(other.file_);
            }
            onChanged();
          }
        } else {
          if (!other.file_.isEmpty()) {
            if (fileBuilder_.isEmpty()) {
              fileBuilder_.dispose();
              fileBuilder_ = null;
              file_ = other.file_;
              bitField0_ = (bitField0_ & ~0x00008000);
              fileBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getFileFieldBuilder() : null;
            } else {
              fileBuilder_.addAllMessages(other.file_);
            }
          }
        }
        if (other.hasAppType()) {
          bitField0_ |= 0x00010000;
          appType_ = other.appType_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string developerName = 1;
      private java.lang.Object developerName_ = "";
      /**
       * <code>optional string developerName = 1;</code>
       */
      public boolean hasDeveloperName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string developerName = 1;</code>
       */
      public java.lang.String getDeveloperName() {
        java.lang.Object ref = developerName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          developerName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string developerName = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDeveloperNameBytes() {
        java.lang.Object ref = developerName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          developerName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string developerName = 1;</code>
       */
      public Builder setDeveloperName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        developerName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string developerName = 1;</code>
       */
      public Builder clearDeveloperName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        developerName_ = getDefaultInstance().getDeveloperName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string developerName = 1;</code>
       */
      public Builder setDeveloperNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        developerName_ = value;
        onChanged();
        return this;
      }

      // optional int32 majorVersionNumber = 2;
      private int majorVersionNumber_ ;
      /**
       * <code>optional int32 majorVersionNumber = 2;</code>
       */
      public boolean hasMajorVersionNumber() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 majorVersionNumber = 2;</code>
       */
      public int getMajorVersionNumber() {
        return majorVersionNumber_;
      }
      /**
       * <code>optional int32 majorVersionNumber = 2;</code>
       */
      public Builder setMajorVersionNumber(int value) {
        bitField0_ |= 0x00000002;
        majorVersionNumber_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 majorVersionNumber = 2;</code>
       */
      public Builder clearMajorVersionNumber() {
        bitField0_ = (bitField0_ & ~0x00000002);
        majorVersionNumber_ = 0;
        onChanged();
        return this;
      }

      // optional int32 versionCode = 3;
      private int versionCode_ ;
      /**
       * <code>optional int32 versionCode = 3;</code>
       */
      public boolean hasVersionCode() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int32 versionCode = 3;</code>
       */
      public int getVersionCode() {
        return versionCode_;
      }
      /**
       * <code>optional int32 versionCode = 3;</code>
       */
      public Builder setVersionCode(int value) {
        bitField0_ |= 0x00000004;
        versionCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 versionCode = 3;</code>
       */
      public Builder clearVersionCode() {
        bitField0_ = (bitField0_ & ~0x00000004);
        versionCode_ = 0;
        onChanged();
        return this;
      }

      // optional string versionString = 4;
      private java.lang.Object versionString_ = "";
      /**
       * <code>optional string versionString = 4;</code>
       */
      public boolean hasVersionString() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string versionString = 4;</code>
       */
      public java.lang.String getVersionString() {
        java.lang.Object ref = versionString_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          versionString_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string versionString = 4;</code>
       */
      public com.google.protobuf.ByteString
          getVersionStringBytes() {
        java.lang.Object ref = versionString_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          versionString_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string versionString = 4;</code>
       */
      public Builder setVersionString(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        versionString_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string versionString = 4;</code>
       */
      public Builder clearVersionString() {
        bitField0_ = (bitField0_ & ~0x00000008);
        versionString_ = getDefaultInstance().getVersionString();
        onChanged();
        return this;
      }
      /**
       * <code>optional string versionString = 4;</code>
       */
      public Builder setVersionStringBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        versionString_ = value;
        onChanged();
        return this;
      }

      // optional string title = 5;
      private java.lang.Object title_ = "";
      /**
       * <code>optional string title = 5;</code>
       */
      public boolean hasTitle() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string title = 5;</code>
       */
      public java.lang.String getTitle() {
        java.lang.Object ref = title_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          title_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string title = 5;</code>
       */
      public com.google.protobuf.ByteString
          getTitleBytes() {
        java.lang.Object ref = title_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          title_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string title = 5;</code>
       */
      public Builder setTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        title_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 5;</code>
       */
      public Builder clearTitle() {
        bitField0_ = (bitField0_ & ~0x00000010);
        title_ = getDefaultInstance().getTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 5;</code>
       */
      public Builder setTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        title_ = value;
        onChanged();
        return this;
      }

      // repeated string appCategory = 7;
      private com.google.protobuf.LazyStringList appCategory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureAppCategoryIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          appCategory_ = new com.google.protobuf.LazyStringArrayList(appCategory_);
          bitField0_ |= 0x00000020;
         }
      }
      /**
       * <code>repeated string appCategory = 7;</code>
       */
      public java.util.List<java.lang.String>
          getAppCategoryList() {
        return java.util.Collections.unmodifiableList(appCategory_);
      }
      /**
       * <code>repeated string appCategory = 7;</code>
       */
      public int getAppCategoryCount() {
        return appCategory_.size();
      }
      /**
       * <code>repeated string appCategory = 7;</code>
       */
      public java.lang.String getAppCategory(int index) {
        return appCategory_.get(index);
      }
      /**
       * <code>repeated string appCategory = 7;</code>
       */
      public com.google.protobuf.ByteString
          getAppCategoryBytes(int index) {
        return appCategory_.getByteString(index);
      }
      /**
       * <code>repeated string appCategory = 7;</code>
       */
      public Builder setAppCategory(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAppCategoryIsMutable();
        appCategory_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string appCategory = 7;</code>
       */
      public Builder addAppCategory(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAppCategoryIsMutable();
        appCategory_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string appCategory = 7;</code>
       */
      public Builder addAllAppCategory(
          java.lang.Iterable<java.lang.String> values) {
        ensureAppCategoryIsMutable();
        super.addAll(values, appCategory_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string appCategory = 7;</code>
       */
      public Builder clearAppCategory() {
        appCategory_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string appCategory = 7;</code>
       */
      public Builder addAppCategoryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAppCategoryIsMutable();
        appCategory_.add(value);
        onChanged();
        return this;
      }

      // optional int32 contentRating = 8;
      private int contentRating_ ;
      /**
       * <code>optional int32 contentRating = 8;</code>
       */
      public boolean hasContentRating() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional int32 contentRating = 8;</code>
       */
      public int getContentRating() {
        return contentRating_;
      }
      /**
       * <code>optional int32 contentRating = 8;</code>
       */
      public Builder setContentRating(int value) {
        bitField0_ |= 0x00000040;
        contentRating_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 contentRating = 8;</code>
       */
      public Builder clearContentRating() {
        bitField0_ = (bitField0_ & ~0x00000040);
        contentRating_ = 0;
        onChanged();
        return this;
      }

      // optional int64 installationSize = 9;
      private long installationSize_ ;
      /**
       * <code>optional int64 installationSize = 9;</code>
       */
      public boolean hasInstallationSize() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional int64 installationSize = 9;</code>
       */
      public long getInstallationSize() {
        return installationSize_;
      }
      /**
       * <code>optional int64 installationSize = 9;</code>
       */
      public Builder setInstallationSize(long value) {
        bitField0_ |= 0x00000080;
        installationSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 installationSize = 9;</code>
       */
      public Builder clearInstallationSize() {
        bitField0_ = (bitField0_ & ~0x00000080);
        installationSize_ = 0L;
        onChanged();
        return this;
      }

      // repeated string permission = 10;
      private com.google.protobuf.LazyStringList permission_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensurePermissionIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          permission_ = new com.google.protobuf.LazyStringArrayList(permission_);
          bitField0_ |= 0x00000100;
         }
      }
      /**
       * <code>repeated string permission = 10;</code>
       */
      public java.util.List<java.lang.String>
          getPermissionList() {
        return java.util.Collections.unmodifiableList(permission_);
      }
      /**
       * <code>repeated string permission = 10;</code>
       */
      public int getPermissionCount() {
        return permission_.size();
      }
      /**
       * <code>repeated string permission = 10;</code>
       */
      public java.lang.String getPermission(int index) {
        return permission_.get(index);
      }
      /**
       * <code>repeated string permission = 10;</code>
       */
      public com.google.protobuf.ByteString
          getPermissionBytes(int index) {
        return permission_.getByteString(index);
      }
      /**
       * <code>repeated string permission = 10;</code>
       */
      public Builder setPermission(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensurePermissionIsMutable();
        permission_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string permission = 10;</code>
       */
      public Builder addPermission(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensurePermissionIsMutable();
        permission_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string permission = 10;</code>
       */
      public Builder addAllPermission(
          java.lang.Iterable<java.lang.String> values) {
        ensurePermissionIsMutable();
        super.addAll(values, permission_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string permission = 10;</code>
       */
      public Builder clearPermission() {
        permission_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string permission = 10;</code>
       */
      public Builder addPermissionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensurePermissionIsMutable();
        permission_.add(value);
        onChanged();
        return this;
      }

      // optional string developerEmail = 11;
      private java.lang.Object developerEmail_ = "";
      /**
       * <code>optional string developerEmail = 11;</code>
       */
      public boolean hasDeveloperEmail() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional string developerEmail = 11;</code>
       */
      public java.lang.String getDeveloperEmail() {
        java.lang.Object ref = developerEmail_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          developerEmail_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string developerEmail = 11;</code>
       */
      public com.google.protobuf.ByteString
          getDeveloperEmailBytes() {
        java.lang.Object ref = developerEmail_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          developerEmail_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string developerEmail = 11;</code>
       */
      public Builder setDeveloperEmail(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        developerEmail_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string developerEmail = 11;</code>
       */
      public Builder clearDeveloperEmail() {
        bitField0_ = (bitField0_ & ~0x00000200);
        developerEmail_ = getDefaultInstance().getDeveloperEmail();
        onChanged();
        return this;
      }
      /**
       * <code>optional string developerEmail = 11;</code>
       */
      public Builder setDeveloperEmailBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        developerEmail_ = value;
        onChanged();
        return this;
      }

      // optional string developerWebsite = 12;
      private java.lang.Object developerWebsite_ = "";
      /**
       * <code>optional string developerWebsite = 12;</code>
       */
      public boolean hasDeveloperWebsite() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional string developerWebsite = 12;</code>
       */
      public java.lang.String getDeveloperWebsite() {
        java.lang.Object ref = developerWebsite_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          developerWebsite_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string developerWebsite = 12;</code>
       */
      public com.google.protobuf.ByteString
          getDeveloperWebsiteBytes() {
        java.lang.Object ref = developerWebsite_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          developerWebsite_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string developerWebsite = 12;</code>
       */
      public Builder setDeveloperWebsite(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        developerWebsite_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string developerWebsite = 12;</code>
       */
      public Builder clearDeveloperWebsite() {
        bitField0_ = (bitField0_ & ~0x00000400);
        developerWebsite_ = getDefaultInstance().getDeveloperWebsite();
        onChanged();
        return this;
      }
      /**
       * <code>optional string developerWebsite = 12;</code>
       */
      public Builder setDeveloperWebsiteBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        developerWebsite_ = value;
        onChanged();
        return this;
      }

      // optional string numDownloads = 13;
      private java.lang.Object numDownloads_ = "";
      /**
       * <code>optional string numDownloads = 13;</code>
       */
      public boolean hasNumDownloads() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional string numDownloads = 13;</code>
       */
      public java.lang.String getNumDownloads() {
        java.lang.Object ref = numDownloads_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          numDownloads_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string numDownloads = 13;</code>
       */
      public com.google.protobuf.ByteString
          getNumDownloadsBytes() {
        java.lang.Object ref = numDownloads_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          numDownloads_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string numDownloads = 13;</code>
       */
      public Builder setNumDownloads(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        numDownloads_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string numDownloads = 13;</code>
       */
      public Builder clearNumDownloads() {
        bitField0_ = (bitField0_ & ~0x00000800);
        numDownloads_ = getDefaultInstance().getNumDownloads();
        onChanged();
        return this;
      }
      /**
       * <code>optional string numDownloads = 13;</code>
       */
      public Builder setNumDownloadsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        numDownloads_ = value;
        onChanged();
        return this;
      }

      // optional string packageName = 14;
      private java.lang.Object packageName_ = "";
      /**
       * <code>optional string packageName = 14;</code>
       */
      public boolean hasPackageName() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional string packageName = 14;</code>
       */
      public java.lang.String getPackageName() {
        java.lang.Object ref = packageName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          packageName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string packageName = 14;</code>
       */
      public com.google.protobuf.ByteString
          getPackageNameBytes() {
        java.lang.Object ref = packageName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          packageName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string packageName = 14;</code>
       */
      public Builder setPackageName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        packageName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string packageName = 14;</code>
       */
      public Builder clearPackageName() {
        bitField0_ = (bitField0_ & ~0x00001000);
        packageName_ = getDefaultInstance().getPackageName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string packageName = 14;</code>
       */
      public Builder setPackageNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        packageName_ = value;
        onChanged();
        return this;
      }

      // optional string recentChangesHtml = 15;
      private java.lang.Object recentChangesHtml_ = "";
      /**
       * <code>optional string recentChangesHtml = 15;</code>
       */
      public boolean hasRecentChangesHtml() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <code>optional string recentChangesHtml = 15;</code>
       */
      public java.lang.String getRecentChangesHtml() {
        java.lang.Object ref = recentChangesHtml_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          recentChangesHtml_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string recentChangesHtml = 15;</code>
       */
      public com.google.protobuf.ByteString
          getRecentChangesHtmlBytes() {
        java.lang.Object ref = recentChangesHtml_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          recentChangesHtml_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string recentChangesHtml = 15;</code>
       */
      public Builder setRecentChangesHtml(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00002000;
        recentChangesHtml_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string recentChangesHtml = 15;</code>
       */
      public Builder clearRecentChangesHtml() {
        bitField0_ = (bitField0_ & ~0x00002000);
        recentChangesHtml_ = getDefaultInstance().getRecentChangesHtml();
        onChanged();
        return this;
      }
      /**
       * <code>optional string recentChangesHtml = 15;</code>
       */
      public Builder setRecentChangesHtmlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00002000;
        recentChangesHtml_ = value;
        onChanged();
        return this;
      }

      // optional string uploadDate = 16;
      private java.lang.Object uploadDate_ = "";
      /**
       * <code>optional string uploadDate = 16;</code>
       */
      public boolean hasUploadDate() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       * <code>optional string uploadDate = 16;</code>
       */
      public java.lang.String getUploadDate() {
        java.lang.Object ref = uploadDate_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          uploadDate_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string uploadDate = 16;</code>
       */
      public com.google.protobuf.ByteString
          getUploadDateBytes() {
        java.lang.Object ref = uploadDate_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          uploadDate_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string uploadDate = 16;</code>
       */
      public Builder setUploadDate(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00004000;
        uploadDate_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string uploadDate = 16;</code>
       */
      public Builder clearUploadDate() {
        bitField0_ = (bitField0_ & ~0x00004000);
        uploadDate_ = getDefaultInstance().getUploadDate();
        onChanged();
        return this;
      }
      /**
       * <code>optional string uploadDate = 16;</code>
       */
      public Builder setUploadDateBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00004000;
        uploadDate_ = value;
        onChanged();
        return this;
      }

      // repeated .FileMetadata file = 17;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata> file_ =
        java.util.Collections.emptyList();
      private void ensureFileIsMutable() {
        if (!((bitField0_ & 0x00008000) == 0x00008000)) {
          file_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata>(file_);
          bitField0_ |= 0x00008000;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata, com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.Builder, com.akdeniz.googleplaycrawler.GooglePlay.FileMetadataOrBuilder> fileBuilder_;

      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata> getFileList() {
        if (fileBuilder_ == null) {
          return java.util.Collections.unmodifiableList(file_);
        } else {
          return fileBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public int getFileCount() {
        if (fileBuilder_ == null) {
          return file_.size();
        } else {
          return fileBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata getFile(int index) {
        if (fileBuilder_ == null) {
          return file_.get(index);
        } else {
          return fileBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public Builder setFile(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata value) {
        if (fileBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFileIsMutable();
          file_.set(index, value);
          onChanged();
        } else {
          fileBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public Builder setFile(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.Builder builderForValue) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          file_.set(index, builderForValue.build());
          onChanged();
        } else {
          fileBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public Builder addFile(com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata value) {
        if (fileBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFileIsMutable();
          file_.add(value);
          onChanged();
        } else {
          fileBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public Builder addFile(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata value) {
        if (fileBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureFileIsMutable();
          file_.add(index, value);
          onChanged();
        } else {
          fileBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public Builder addFile(
          com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.Builder builderForValue) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          file_.add(builderForValue.build());
          onChanged();
        } else {
          fileBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public Builder addFile(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.Builder builderForValue) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          file_.add(index, builderForValue.build());
          onChanged();
        } else {
          fileBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public Builder addAllFile(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata> values) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          super.addAll(values, file_);
          onChanged();
        } else {
          fileBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public Builder clearFile() {
        if (fileBuilder_ == null) {
          file_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00008000);
          onChanged();
        } else {
          fileBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public Builder removeFile(int index) {
        if (fileBuilder_ == null) {
          ensureFileIsMutable();
          file_.remove(index);
          onChanged();
        } else {
          fileBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.Builder getFileBuilder(
          int index) {
        return getFileFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FileMetadataOrBuilder getFileOrBuilder(
          int index) {
        if (fileBuilder_ == null) {
          return file_.get(index);  } else {
          return fileBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.FileMetadataOrBuilder> 
           getFileOrBuilderList() {
        if (fileBuilder_ != null) {
          return fileBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(file_);
        }
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.Builder addFileBuilder() {
        return getFileFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.getDefaultInstance());
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.Builder addFileBuilder(
          int index) {
        return getFileFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.getDefaultInstance());
      }
      /**
       * <code>repeated .FileMetadata file = 17;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.Builder> 
           getFileBuilderList() {
        return getFileFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata, com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.Builder, com.akdeniz.googleplaycrawler.GooglePlay.FileMetadataOrBuilder> 
          getFileFieldBuilder() {
        if (fileBuilder_ == null) {
          fileBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata, com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.Builder, com.akdeniz.googleplaycrawler.GooglePlay.FileMetadataOrBuilder>(
                  file_,
                  ((bitField0_ & 0x00008000) == 0x00008000),
                  getParentForChildren(),
                  isClean());
          file_ = null;
        }
        return fileBuilder_;
      }

      // optional string appType = 18;
      private java.lang.Object appType_ = "";
      /**
       * <code>optional string appType = 18;</code>
       */
      public boolean hasAppType() {
        return ((bitField0_ & 0x00010000) == 0x00010000);
      }
      /**
       * <code>optional string appType = 18;</code>
       */
      public java.lang.String getAppType() {
        java.lang.Object ref = appType_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          appType_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string appType = 18;</code>
       */
      public com.google.protobuf.ByteString
          getAppTypeBytes() {
        java.lang.Object ref = appType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          appType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string appType = 18;</code>
       */
      public Builder setAppType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00010000;
        appType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string appType = 18;</code>
       */
      public Builder clearAppType() {
        bitField0_ = (bitField0_ & ~0x00010000);
        appType_ = getDefaultInstance().getAppType();
        onChanged();
        return this;
      }
      /**
       * <code>optional string appType = 18;</code>
       */
      public Builder setAppTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00010000;
        appType_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:AppDetails)
    }

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

    // @@protoc_insertion_point(class_scope:AppDetails)
  }

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

    // optional string detailsUrl = 1;
    /**
     * <code>optional string detailsUrl = 1;</code>
     */
    boolean hasDetailsUrl();
    /**
     * <code>optional string detailsUrl = 1;</code>
     */
    java.lang.String getDetailsUrl();
    /**
     * <code>optional string detailsUrl = 1;</code>
     */
    com.google.protobuf.ByteString
        getDetailsUrlBytes();

    // optional string name = 2;
    /**
     * <code>optional string name = 2;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 2;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 2;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // optional .ArtistExternalLinks externalLinks = 3;
    /**
     * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
     */
    boolean hasExternalLinks();
    /**
     * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks getExternalLinks();
    /**
     * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinksOrBuilder getExternalLinksOrBuilder();
  }
  /**
   * Protobuf type {@code ArtistDetails}
   */
  public static final class ArtistDetails extends
      com.google.protobuf.GeneratedMessage
      implements ArtistDetailsOrBuilder {
    // Use ArtistDetails.newBuilder() to construct.
    private ArtistDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ArtistDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public ArtistDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ArtistDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              detailsUrl_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              name_ = input.readBytes();
              break;
            }
            case 26: {
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = externalLinks_.toBuilder();
              }
              externalLinks_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(externalLinks_);
                externalLinks_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ArtistDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ArtistDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string detailsUrl = 1;
    public static final int DETAILSURL_FIELD_NUMBER = 1;
    private java.lang.Object detailsUrl_;
    /**
     * <code>optional string detailsUrl = 1;</code>
     */
    public boolean hasDetailsUrl() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string detailsUrl = 1;</code>
     */
    public java.lang.String getDetailsUrl() {
      java.lang.Object ref = detailsUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          detailsUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string detailsUrl = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDetailsUrlBytes() {
      java.lang.Object ref = detailsUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        detailsUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string name = 2;
    public static final int NAME_FIELD_NUMBER = 2;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 2;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string name = 2;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 2;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .ArtistExternalLinks externalLinks = 3;
    public static final int EXTERNALLINKS_FIELD_NUMBER = 3;
    private com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks externalLinks_;
    /**
     * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
     */
    public boolean hasExternalLinks() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks getExternalLinks() {
      return externalLinks_;
    }
    /**
     * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinksOrBuilder getExternalLinksOrBuilder() {
      return externalLinks_;
    }

    private void initFields() {
      detailsUrl_ = "";
      name_ = "";
      externalLinks_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getDetailsUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, externalLinks_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getDetailsUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getNameBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, externalLinks_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code ArtistDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ArtistDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ArtistDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        detailsUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (externalLinksBuilder_ == null) {
          externalLinks_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.getDefaultInstance();
        } else {
          externalLinksBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ArtistDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.detailsUrl_ = detailsUrl_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (externalLinksBuilder_ == null) {
          result.externalLinks_ = externalLinks_;
        } else {
          result.externalLinks_ = externalLinksBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance()) return this;
        if (other.hasDetailsUrl()) {
          bitField0_ |= 0x00000001;
          detailsUrl_ = other.detailsUrl_;
          onChanged();
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000002;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasExternalLinks()) {
          mergeExternalLinks(other.getExternalLinks());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string detailsUrl = 1;
      private java.lang.Object detailsUrl_ = "";
      /**
       * <code>optional string detailsUrl = 1;</code>
       */
      public boolean hasDetailsUrl() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string detailsUrl = 1;</code>
       */
      public java.lang.String getDetailsUrl() {
        java.lang.Object ref = detailsUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          detailsUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string detailsUrl = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDetailsUrlBytes() {
        java.lang.Object ref = detailsUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          detailsUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string detailsUrl = 1;</code>
       */
      public Builder setDetailsUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        detailsUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string detailsUrl = 1;</code>
       */
      public Builder clearDetailsUrl() {
        bitField0_ = (bitField0_ & ~0x00000001);
        detailsUrl_ = getDefaultInstance().getDetailsUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string detailsUrl = 1;</code>
       */
      public Builder setDetailsUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        detailsUrl_ = value;
        onChanged();
        return this;
      }

      // optional string name = 2;
      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 2;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string name = 2;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 2;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 2;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }

      // optional .ArtistExternalLinks externalLinks = 3;
      private com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks externalLinks_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks, com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinksOrBuilder> externalLinksBuilder_;
      /**
       * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
       */
      public boolean hasExternalLinks() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks getExternalLinks() {
        if (externalLinksBuilder_ == null) {
          return externalLinks_;
        } else {
          return externalLinksBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
       */
      public Builder setExternalLinks(com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks value) {
        if (externalLinksBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          externalLinks_ = value;
          onChanged();
        } else {
          externalLinksBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
       */
      public Builder setExternalLinks(
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.Builder builderForValue) {
        if (externalLinksBuilder_ == null) {
          externalLinks_ = builderForValue.build();
          onChanged();
        } else {
          externalLinksBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
       */
      public Builder mergeExternalLinks(com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks value) {
        if (externalLinksBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              externalLinks_ != com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.getDefaultInstance()) {
            externalLinks_ =
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.newBuilder(externalLinks_).mergeFrom(value).buildPartial();
          } else {
            externalLinks_ = value;
          }
          onChanged();
        } else {
          externalLinksBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
       */
      public Builder clearExternalLinks() {
        if (externalLinksBuilder_ == null) {
          externalLinks_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.getDefaultInstance();
          onChanged();
        } else {
          externalLinksBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.Builder getExternalLinksBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getExternalLinksFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinksOrBuilder getExternalLinksOrBuilder() {
        if (externalLinksBuilder_ != null) {
          return externalLinksBuilder_.getMessageOrBuilder();
        } else {
          return externalLinks_;
        }
      }
      /**
       * <code>optional .ArtistExternalLinks externalLinks = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks, com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinksOrBuilder> 
          getExternalLinksFieldBuilder() {
        if (externalLinksBuilder_ == null) {
          externalLinksBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks, com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinksOrBuilder>(
                  externalLinks_,
                  getParentForChildren(),
                  isClean());
          externalLinks_ = null;
        }
        return externalLinksBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:ArtistDetails)
    }

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

    // @@protoc_insertion_point(class_scope:ArtistDetails)
  }

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

    // repeated string websiteUrl = 1;
    /**
     * <code>repeated string websiteUrl = 1;</code>
     */
    java.util.List<java.lang.String>
    getWebsiteUrlList();
    /**
     * <code>repeated string websiteUrl = 1;</code>
     */
    int getWebsiteUrlCount();
    /**
     * <code>repeated string websiteUrl = 1;</code>
     */
    java.lang.String getWebsiteUrl(int index);
    /**
     * <code>repeated string websiteUrl = 1;</code>
     */
    com.google.protobuf.ByteString
        getWebsiteUrlBytes(int index);

    // optional string googlePlusProfileUrl = 2;
    /**
     * <code>optional string googlePlusProfileUrl = 2;</code>
     */
    boolean hasGooglePlusProfileUrl();
    /**
     * <code>optional string googlePlusProfileUrl = 2;</code>
     */
    java.lang.String getGooglePlusProfileUrl();
    /**
     * <code>optional string googlePlusProfileUrl = 2;</code>
     */
    com.google.protobuf.ByteString
        getGooglePlusProfileUrlBytes();

    // optional string youtubeChannelUrl = 3;
    /**
     * <code>optional string youtubeChannelUrl = 3;</code>
     */
    boolean hasYoutubeChannelUrl();
    /**
     * <code>optional string youtubeChannelUrl = 3;</code>
     */
    java.lang.String getYoutubeChannelUrl();
    /**
     * <code>optional string youtubeChannelUrl = 3;</code>
     */
    com.google.protobuf.ByteString
        getYoutubeChannelUrlBytes();
  }
  /**
   * Protobuf type {@code ArtistExternalLinks}
   */
  public static final class ArtistExternalLinks extends
      com.google.protobuf.GeneratedMessage
      implements ArtistExternalLinksOrBuilder {
    // Use ArtistExternalLinks.newBuilder() to construct.
    private ArtistExternalLinks(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ArtistExternalLinks(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public ArtistExternalLinks getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ArtistExternalLinks(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                websiteUrl_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000001;
              }
              websiteUrl_.add(input.readBytes());
              break;
            }
            case 18: {
              bitField0_ |= 0x00000001;
              googlePlusProfileUrl_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000002;
              youtubeChannelUrl_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          websiteUrl_ = new com.google.protobuf.UnmodifiableLazyStringList(websiteUrl_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ArtistExternalLinks_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ArtistExternalLinks_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.class, com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.Builder.class);
    }

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

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

    private int bitField0_;
    // repeated string websiteUrl = 1;
    public static final int WEBSITEURL_FIELD_NUMBER = 1;
    private com.google.protobuf.LazyStringList websiteUrl_;
    /**
     * <code>repeated string websiteUrl = 1;</code>
     */
    public java.util.List<java.lang.String>
        getWebsiteUrlList() {
      return websiteUrl_;
    }
    /**
     * <code>repeated string websiteUrl = 1;</code>
     */
    public int getWebsiteUrlCount() {
      return websiteUrl_.size();
    }
    /**
     * <code>repeated string websiteUrl = 1;</code>
     */
    public java.lang.String getWebsiteUrl(int index) {
      return websiteUrl_.get(index);
    }
    /**
     * <code>repeated string websiteUrl = 1;</code>
     */
    public com.google.protobuf.ByteString
        getWebsiteUrlBytes(int index) {
      return websiteUrl_.getByteString(index);
    }

    // optional string googlePlusProfileUrl = 2;
    public static final int GOOGLEPLUSPROFILEURL_FIELD_NUMBER = 2;
    private java.lang.Object googlePlusProfileUrl_;
    /**
     * <code>optional string googlePlusProfileUrl = 2;</code>
     */
    public boolean hasGooglePlusProfileUrl() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string googlePlusProfileUrl = 2;</code>
     */
    public java.lang.String getGooglePlusProfileUrl() {
      java.lang.Object ref = googlePlusProfileUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          googlePlusProfileUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string googlePlusProfileUrl = 2;</code>
     */
    public com.google.protobuf.ByteString
        getGooglePlusProfileUrlBytes() {
      java.lang.Object ref = googlePlusProfileUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        googlePlusProfileUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string youtubeChannelUrl = 3;
    public static final int YOUTUBECHANNELURL_FIELD_NUMBER = 3;
    private java.lang.Object youtubeChannelUrl_;
    /**
     * <code>optional string youtubeChannelUrl = 3;</code>
     */
    public boolean hasYoutubeChannelUrl() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string youtubeChannelUrl = 3;</code>
     */
    public java.lang.String getYoutubeChannelUrl() {
      java.lang.Object ref = youtubeChannelUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          youtubeChannelUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string youtubeChannelUrl = 3;</code>
     */
    public com.google.protobuf.ByteString
        getYoutubeChannelUrlBytes() {
      java.lang.Object ref = youtubeChannelUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        youtubeChannelUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      websiteUrl_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      googlePlusProfileUrl_ = "";
      youtubeChannelUrl_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < websiteUrl_.size(); i++) {
        output.writeBytes(1, websiteUrl_.getByteString(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(2, getGooglePlusProfileUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(3, getYoutubeChannelUrlBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < websiteUrl_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(websiteUrl_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getWebsiteUrlList().size();
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getGooglePlusProfileUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getYoutubeChannelUrlBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code ArtistExternalLinks}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinksOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ArtistExternalLinks_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ArtistExternalLinks_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.class, com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        websiteUrl_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        googlePlusProfileUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        youtubeChannelUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ArtistExternalLinks_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks build() {
        com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks result = new com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          websiteUrl_ = new com.google.protobuf.UnmodifiableLazyStringList(
              websiteUrl_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.websiteUrl_ = websiteUrl_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000001;
        }
        result.googlePlusProfileUrl_ = googlePlusProfileUrl_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000002;
        }
        result.youtubeChannelUrl_ = youtubeChannelUrl_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.ArtistExternalLinks.getDefaultInstance()) return this;
        if (!other.websiteUrl_.isEmpty()) {
          if (websiteUrl_.isEmpty()) {
            websiteUrl_ = other.websiteUrl_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureWebsiteUrlIsMutable();
            websiteUrl_.addAll(other.websiteUrl_);
          }
          onChanged();
        }
        if (other.hasGooglePlusProfileUrl()) {
          bitField0_ |= 0x00000002;
          googlePlusProfileUrl_ = other.googlePlusProfileUrl_;
          onChanged();
        }
        if (other.hasYoutubeChannelUrl()) {
          bitField0_ |= 0x00000004;
          youtubeChannelUrl_ = other.youtubeChannelUrl_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // repeated string websiteUrl = 1;
      private com.google.protobuf.LazyStringList websiteUrl_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureWebsiteUrlIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          websiteUrl_ = new com.google.protobuf.LazyStringArrayList(websiteUrl_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <code>repeated string websiteUrl = 1;</code>
       */
      public java.util.List<java.lang.String>
          getWebsiteUrlList() {
        return java.util.Collections.unmodifiableList(websiteUrl_);
      }
      /**
       * <code>repeated string websiteUrl = 1;</code>
       */
      public int getWebsiteUrlCount() {
        return websiteUrl_.size();
      }
      /**
       * <code>repeated string websiteUrl = 1;</code>
       */
      public java.lang.String getWebsiteUrl(int index) {
        return websiteUrl_.get(index);
      }
      /**
       * <code>repeated string websiteUrl = 1;</code>
       */
      public com.google.protobuf.ByteString
          getWebsiteUrlBytes(int index) {
        return websiteUrl_.getByteString(index);
      }
      /**
       * <code>repeated string websiteUrl = 1;</code>
       */
      public Builder setWebsiteUrl(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureWebsiteUrlIsMutable();
        websiteUrl_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string websiteUrl = 1;</code>
       */
      public Builder addWebsiteUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureWebsiteUrlIsMutable();
        websiteUrl_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string websiteUrl = 1;</code>
       */
      public Builder addAllWebsiteUrl(
          java.lang.Iterable<java.lang.String> values) {
        ensureWebsiteUrlIsMutable();
        super.addAll(values, websiteUrl_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string websiteUrl = 1;</code>
       */
      public Builder clearWebsiteUrl() {
        websiteUrl_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string websiteUrl = 1;</code>
       */
      public Builder addWebsiteUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureWebsiteUrlIsMutable();
        websiteUrl_.add(value);
        onChanged();
        return this;
      }

      // optional string googlePlusProfileUrl = 2;
      private java.lang.Object googlePlusProfileUrl_ = "";
      /**
       * <code>optional string googlePlusProfileUrl = 2;</code>
       */
      public boolean hasGooglePlusProfileUrl() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string googlePlusProfileUrl = 2;</code>
       */
      public java.lang.String getGooglePlusProfileUrl() {
        java.lang.Object ref = googlePlusProfileUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          googlePlusProfileUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string googlePlusProfileUrl = 2;</code>
       */
      public com.google.protobuf.ByteString
          getGooglePlusProfileUrlBytes() {
        java.lang.Object ref = googlePlusProfileUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          googlePlusProfileUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string googlePlusProfileUrl = 2;</code>
       */
      public Builder setGooglePlusProfileUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        googlePlusProfileUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string googlePlusProfileUrl = 2;</code>
       */
      public Builder clearGooglePlusProfileUrl() {
        bitField0_ = (bitField0_ & ~0x00000002);
        googlePlusProfileUrl_ = getDefaultInstance().getGooglePlusProfileUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string googlePlusProfileUrl = 2;</code>
       */
      public Builder setGooglePlusProfileUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        googlePlusProfileUrl_ = value;
        onChanged();
        return this;
      }

      // optional string youtubeChannelUrl = 3;
      private java.lang.Object youtubeChannelUrl_ = "";
      /**
       * <code>optional string youtubeChannelUrl = 3;</code>
       */
      public boolean hasYoutubeChannelUrl() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string youtubeChannelUrl = 3;</code>
       */
      public java.lang.String getYoutubeChannelUrl() {
        java.lang.Object ref = youtubeChannelUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          youtubeChannelUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string youtubeChannelUrl = 3;</code>
       */
      public com.google.protobuf.ByteString
          getYoutubeChannelUrlBytes() {
        java.lang.Object ref = youtubeChannelUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          youtubeChannelUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string youtubeChannelUrl = 3;</code>
       */
      public Builder setYoutubeChannelUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        youtubeChannelUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string youtubeChannelUrl = 3;</code>
       */
      public Builder clearYoutubeChannelUrl() {
        bitField0_ = (bitField0_ & ~0x00000004);
        youtubeChannelUrl_ = getDefaultInstance().getYoutubeChannelUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string youtubeChannelUrl = 3;</code>
       */
      public Builder setYoutubeChannelUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        youtubeChannelUrl_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:ArtistExternalLinks)
    }

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

    // @@protoc_insertion_point(class_scope:ArtistExternalLinks)
  }

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

    // optional .AppDetails appDetails = 1;
    /**
     * <code>optional .AppDetails appDetails = 1;</code>
     */
    boolean hasAppDetails();
    /**
     * <code>optional .AppDetails appDetails = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AppDetails getAppDetails();
    /**
     * <code>optional .AppDetails appDetails = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AppDetailsOrBuilder getAppDetailsOrBuilder();

    // optional .AlbumDetails albumDetails = 2;
    /**
     * <code>optional .AlbumDetails albumDetails = 2;</code>
     */
    boolean hasAlbumDetails();
    /**
     * <code>optional .AlbumDetails albumDetails = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails getAlbumDetails();
    /**
     * <code>optional .AlbumDetails albumDetails = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetailsOrBuilder getAlbumDetailsOrBuilder();

    // optional .ArtistDetails artistDetails = 3;
    /**
     * <code>optional .ArtistDetails artistDetails = 3;</code>
     */
    boolean hasArtistDetails();
    /**
     * <code>optional .ArtistDetails artistDetails = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails getArtistDetails();
    /**
     * <code>optional .ArtistDetails artistDetails = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder getArtistDetailsOrBuilder();

    // optional .SongDetails songDetails = 4;
    /**
     * <code>optional .SongDetails songDetails = 4;</code>
     */
    boolean hasSongDetails();
    /**
     * <code>optional .SongDetails songDetails = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.SongDetails getSongDetails();
    /**
     * <code>optional .SongDetails songDetails = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.SongDetailsOrBuilder getSongDetailsOrBuilder();

    // optional .BookDetails bookDetails = 5;
    /**
     * <code>optional .BookDetails bookDetails = 5;</code>
     */
    boolean hasBookDetails();
    /**
     * <code>optional .BookDetails bookDetails = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BookDetails getBookDetails();
    /**
     * <code>optional .BookDetails bookDetails = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BookDetailsOrBuilder getBookDetailsOrBuilder();

    // optional .VideoDetails videoDetails = 6;
    /**
     * <code>optional .VideoDetails videoDetails = 6;</code>
     */
    boolean hasVideoDetails();
    /**
     * <code>optional .VideoDetails videoDetails = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails getVideoDetails();
    /**
     * <code>optional .VideoDetails videoDetails = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.VideoDetailsOrBuilder getVideoDetailsOrBuilder();

    // optional .SubscriptionDetails subscriptionDetails = 7;
    /**
     * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
     */
    boolean hasSubscriptionDetails();
    /**
     * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails getSubscriptionDetails();
    /**
     * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetailsOrBuilder getSubscriptionDetailsOrBuilder();

    // optional .MagazineDetails magazineDetails = 8;
    /**
     * <code>optional .MagazineDetails magazineDetails = 8;</code>
     */
    boolean hasMagazineDetails();
    /**
     * <code>optional .MagazineDetails magazineDetails = 8;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails getMagazineDetails();
    /**
     * <code>optional .MagazineDetails magazineDetails = 8;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetailsOrBuilder getMagazineDetailsOrBuilder();

    // optional .TvShowDetails tvShowDetails = 9;
    /**
     * <code>optional .TvShowDetails tvShowDetails = 9;</code>
     */
    boolean hasTvShowDetails();
    /**
     * <code>optional .TvShowDetails tvShowDetails = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails getTvShowDetails();
    /**
     * <code>optional .TvShowDetails tvShowDetails = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetailsOrBuilder getTvShowDetailsOrBuilder();

    // optional .TvSeasonDetails tvSeasonDetails = 10;
    /**
     * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
     */
    boolean hasTvSeasonDetails();
    /**
     * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails getTvSeasonDetails();
    /**
     * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetailsOrBuilder getTvSeasonDetailsOrBuilder();

    // optional .TvEpisodeDetails tvEpisodeDetails = 11;
    /**
     * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
     */
    boolean hasTvEpisodeDetails();
    /**
     * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails getTvEpisodeDetails();
    /**
     * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetailsOrBuilder getTvEpisodeDetailsOrBuilder();
  }
  /**
   * Protobuf type {@code DocumentDetails}
   */
  public static final class DocumentDetails extends
      com.google.protobuf.GeneratedMessage
      implements DocumentDetailsOrBuilder {
    // Use DocumentDetails.newBuilder() to construct.
    private DocumentDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DocumentDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public DocumentDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DocumentDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = appDetails_.toBuilder();
              }
              appDetails_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(appDetails_);
                appDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = albumDetails_.toBuilder();
              }
              albumDetails_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(albumDetails_);
                albumDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = artistDetails_.toBuilder();
              }
              artistDetails_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(artistDetails_);
                artistDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 34: {
              com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = songDetails_.toBuilder();
              }
              songDetails_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(songDetails_);
                songDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 42: {
              com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = bookDetails_.toBuilder();
              }
              bookDetails_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(bookDetails_);
                bookDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 50: {
              com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = videoDetails_.toBuilder();
              }
              videoDetails_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(videoDetails_);
                videoDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 58: {
              com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = subscriptionDetails_.toBuilder();
              }
              subscriptionDetails_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(subscriptionDetails_);
                subscriptionDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 66: {
              com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = magazineDetails_.toBuilder();
              }
              magazineDetails_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(magazineDetails_);
                magazineDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 74: {
              com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = tvShowDetails_.toBuilder();
              }
              tvShowDetails_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(tvShowDetails_);
                tvShowDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 82: {
              com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000200) == 0x00000200)) {
                subBuilder = tvSeasonDetails_.toBuilder();
              }
              tvSeasonDetails_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(tvSeasonDetails_);
                tvSeasonDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000200;
              break;
            }
            case 90: {
              com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000400) == 0x00000400)) {
                subBuilder = tvEpisodeDetails_.toBuilder();
              }
              tvEpisodeDetails_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(tvEpisodeDetails_);
                tvEpisodeDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000400;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocumentDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocumentDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.Builder.class);
    }

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

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

    private int bitField0_;
    // optional .AppDetails appDetails = 1;
    public static final int APPDETAILS_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.AppDetails appDetails_;
    /**
     * <code>optional .AppDetails appDetails = 1;</code>
     */
    public boolean hasAppDetails() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .AppDetails appDetails = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AppDetails getAppDetails() {
      return appDetails_;
    }
    /**
     * <code>optional .AppDetails appDetails = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AppDetailsOrBuilder getAppDetailsOrBuilder() {
      return appDetails_;
    }

    // optional .AlbumDetails albumDetails = 2;
    public static final int ALBUMDETAILS_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails albumDetails_;
    /**
     * <code>optional .AlbumDetails albumDetails = 2;</code>
     */
    public boolean hasAlbumDetails() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .AlbumDetails albumDetails = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails getAlbumDetails() {
      return albumDetails_;
    }
    /**
     * <code>optional .AlbumDetails albumDetails = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetailsOrBuilder getAlbumDetailsOrBuilder() {
      return albumDetails_;
    }

    // optional .ArtistDetails artistDetails = 3;
    public static final int ARTISTDETAILS_FIELD_NUMBER = 3;
    private com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails artistDetails_;
    /**
     * <code>optional .ArtistDetails artistDetails = 3;</code>
     */
    public boolean hasArtistDetails() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .ArtistDetails artistDetails = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails getArtistDetails() {
      return artistDetails_;
    }
    /**
     * <code>optional .ArtistDetails artistDetails = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder getArtistDetailsOrBuilder() {
      return artistDetails_;
    }

    // optional .SongDetails songDetails = 4;
    public static final int SONGDETAILS_FIELD_NUMBER = 4;
    private com.akdeniz.googleplaycrawler.GooglePlay.SongDetails songDetails_;
    /**
     * <code>optional .SongDetails songDetails = 4;</code>
     */
    public boolean hasSongDetails() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .SongDetails songDetails = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.SongDetails getSongDetails() {
      return songDetails_;
    }
    /**
     * <code>optional .SongDetails songDetails = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.SongDetailsOrBuilder getSongDetailsOrBuilder() {
      return songDetails_;
    }

    // optional .BookDetails bookDetails = 5;
    public static final int BOOKDETAILS_FIELD_NUMBER = 5;
    private com.akdeniz.googleplaycrawler.GooglePlay.BookDetails bookDetails_;
    /**
     * <code>optional .BookDetails bookDetails = 5;</code>
     */
    public boolean hasBookDetails() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional .BookDetails bookDetails = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails getBookDetails() {
      return bookDetails_;
    }
    /**
     * <code>optional .BookDetails bookDetails = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BookDetailsOrBuilder getBookDetailsOrBuilder() {
      return bookDetails_;
    }

    // optional .VideoDetails videoDetails = 6;
    public static final int VIDEODETAILS_FIELD_NUMBER = 6;
    private com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails videoDetails_;
    /**
     * <code>optional .VideoDetails videoDetails = 6;</code>
     */
    public boolean hasVideoDetails() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .VideoDetails videoDetails = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails getVideoDetails() {
      return videoDetails_;
    }
    /**
     * <code>optional .VideoDetails videoDetails = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.VideoDetailsOrBuilder getVideoDetailsOrBuilder() {
      return videoDetails_;
    }

    // optional .SubscriptionDetails subscriptionDetails = 7;
    public static final int SUBSCRIPTIONDETAILS_FIELD_NUMBER = 7;
    private com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails subscriptionDetails_;
    /**
     * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
     */
    public boolean hasSubscriptionDetails() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails getSubscriptionDetails() {
      return subscriptionDetails_;
    }
    /**
     * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetailsOrBuilder getSubscriptionDetailsOrBuilder() {
      return subscriptionDetails_;
    }

    // optional .MagazineDetails magazineDetails = 8;
    public static final int MAGAZINEDETAILS_FIELD_NUMBER = 8;
    private com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails magazineDetails_;
    /**
     * <code>optional .MagazineDetails magazineDetails = 8;</code>
     */
    public boolean hasMagazineDetails() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional .MagazineDetails magazineDetails = 8;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails getMagazineDetails() {
      return magazineDetails_;
    }
    /**
     * <code>optional .MagazineDetails magazineDetails = 8;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetailsOrBuilder getMagazineDetailsOrBuilder() {
      return magazineDetails_;
    }

    // optional .TvShowDetails tvShowDetails = 9;
    public static final int TVSHOWDETAILS_FIELD_NUMBER = 9;
    private com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails tvShowDetails_;
    /**
     * <code>optional .TvShowDetails tvShowDetails = 9;</code>
     */
    public boolean hasTvShowDetails() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional .TvShowDetails tvShowDetails = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails getTvShowDetails() {
      return tvShowDetails_;
    }
    /**
     * <code>optional .TvShowDetails tvShowDetails = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetailsOrBuilder getTvShowDetailsOrBuilder() {
      return tvShowDetails_;
    }

    // optional .TvSeasonDetails tvSeasonDetails = 10;
    public static final int TVSEASONDETAILS_FIELD_NUMBER = 10;
    private com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails tvSeasonDetails_;
    /**
     * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
     */
    public boolean hasTvSeasonDetails() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails getTvSeasonDetails() {
      return tvSeasonDetails_;
    }
    /**
     * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetailsOrBuilder getTvSeasonDetailsOrBuilder() {
      return tvSeasonDetails_;
    }

    // optional .TvEpisodeDetails tvEpisodeDetails = 11;
    public static final int TVEPISODEDETAILS_FIELD_NUMBER = 11;
    private com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails tvEpisodeDetails_;
    /**
     * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
     */
    public boolean hasTvEpisodeDetails() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails getTvEpisodeDetails() {
      return tvEpisodeDetails_;
    }
    /**
     * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetailsOrBuilder getTvEpisodeDetailsOrBuilder() {
      return tvEpisodeDetails_;
    }

    private void initFields() {
      appDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.getDefaultInstance();
      albumDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.getDefaultInstance();
      artistDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance();
      songDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.getDefaultInstance();
      bookDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.getDefaultInstance();
      videoDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.getDefaultInstance();
      subscriptionDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.getDefaultInstance();
      magazineDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.getDefaultInstance();
      tvShowDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.getDefaultInstance();
      tvSeasonDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.getDefaultInstance();
      tvEpisodeDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, appDetails_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, albumDetails_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, artistDetails_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, songDetails_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(5, bookDetails_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(6, videoDetails_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(7, subscriptionDetails_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(8, magazineDetails_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(9, tvShowDetails_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeMessage(10, tvSeasonDetails_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeMessage(11, tvEpisodeDetails_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, appDetails_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, albumDetails_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, artistDetails_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, songDetails_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, bookDetails_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, videoDetails_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, subscriptionDetails_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, magazineDetails_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, tvShowDetails_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, tvSeasonDetails_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, tvEpisodeDetails_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code DocumentDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocumentDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocumentDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getAppDetailsFieldBuilder();
          getAlbumDetailsFieldBuilder();
          getArtistDetailsFieldBuilder();
          getSongDetailsFieldBuilder();
          getBookDetailsFieldBuilder();
          getVideoDetailsFieldBuilder();
          getSubscriptionDetailsFieldBuilder();
          getMagazineDetailsFieldBuilder();
          getTvShowDetailsFieldBuilder();
          getTvSeasonDetailsFieldBuilder();
          getTvEpisodeDetailsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (appDetailsBuilder_ == null) {
          appDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.getDefaultInstance();
        } else {
          appDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (albumDetailsBuilder_ == null) {
          albumDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.getDefaultInstance();
        } else {
          albumDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (artistDetailsBuilder_ == null) {
          artistDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance();
        } else {
          artistDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (songDetailsBuilder_ == null) {
          songDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.getDefaultInstance();
        } else {
          songDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (bookDetailsBuilder_ == null) {
          bookDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.getDefaultInstance();
        } else {
          bookDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (videoDetailsBuilder_ == null) {
          videoDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.getDefaultInstance();
        } else {
          videoDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (subscriptionDetailsBuilder_ == null) {
          subscriptionDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.getDefaultInstance();
        } else {
          subscriptionDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (magazineDetailsBuilder_ == null) {
          magazineDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.getDefaultInstance();
        } else {
          magazineDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        if (tvShowDetailsBuilder_ == null) {
          tvShowDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.getDefaultInstance();
        } else {
          tvShowDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        if (tvSeasonDetailsBuilder_ == null) {
          tvSeasonDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.getDefaultInstance();
        } else {
          tvSeasonDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        if (tvEpisodeDetailsBuilder_ == null) {
          tvEpisodeDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.getDefaultInstance();
        } else {
          tvEpisodeDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocumentDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (appDetailsBuilder_ == null) {
          result.appDetails_ = appDetails_;
        } else {
          result.appDetails_ = appDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (albumDetailsBuilder_ == null) {
          result.albumDetails_ = albumDetails_;
        } else {
          result.albumDetails_ = albumDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (artistDetailsBuilder_ == null) {
          result.artistDetails_ = artistDetails_;
        } else {
          result.artistDetails_ = artistDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (songDetailsBuilder_ == null) {
          result.songDetails_ = songDetails_;
        } else {
          result.songDetails_ = songDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (bookDetailsBuilder_ == null) {
          result.bookDetails_ = bookDetails_;
        } else {
          result.bookDetails_ = bookDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (videoDetailsBuilder_ == null) {
          result.videoDetails_ = videoDetails_;
        } else {
          result.videoDetails_ = videoDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (subscriptionDetailsBuilder_ == null) {
          result.subscriptionDetails_ = subscriptionDetails_;
        } else {
          result.subscriptionDetails_ = subscriptionDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (magazineDetailsBuilder_ == null) {
          result.magazineDetails_ = magazineDetails_;
        } else {
          result.magazineDetails_ = magazineDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        if (tvShowDetailsBuilder_ == null) {
          result.tvShowDetails_ = tvShowDetails_;
        } else {
          result.tvShowDetails_ = tvShowDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        if (tvSeasonDetailsBuilder_ == null) {
          result.tvSeasonDetails_ = tvSeasonDetails_;
        } else {
          result.tvSeasonDetails_ = tvSeasonDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        if (tvEpisodeDetailsBuilder_ == null) {
          result.tvEpisodeDetails_ = tvEpisodeDetails_;
        } else {
          result.tvEpisodeDetails_ = tvEpisodeDetailsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.getDefaultInstance()) return this;
        if (other.hasAppDetails()) {
          mergeAppDetails(other.getAppDetails());
        }
        if (other.hasAlbumDetails()) {
          mergeAlbumDetails(other.getAlbumDetails());
        }
        if (other.hasArtistDetails()) {
          mergeArtistDetails(other.getArtistDetails());
        }
        if (other.hasSongDetails()) {
          mergeSongDetails(other.getSongDetails());
        }
        if (other.hasBookDetails()) {
          mergeBookDetails(other.getBookDetails());
        }
        if (other.hasVideoDetails()) {
          mergeVideoDetails(other.getVideoDetails());
        }
        if (other.hasSubscriptionDetails()) {
          mergeSubscriptionDetails(other.getSubscriptionDetails());
        }
        if (other.hasMagazineDetails()) {
          mergeMagazineDetails(other.getMagazineDetails());
        }
        if (other.hasTvShowDetails()) {
          mergeTvShowDetails(other.getTvShowDetails());
        }
        if (other.hasTvSeasonDetails()) {
          mergeTvSeasonDetails(other.getTvSeasonDetails());
        }
        if (other.hasTvEpisodeDetails()) {
          mergeTvEpisodeDetails(other.getTvEpisodeDetails());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional .AppDetails appDetails = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.AppDetails appDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AppDetails, com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AppDetailsOrBuilder> appDetailsBuilder_;
      /**
       * <code>optional .AppDetails appDetails = 1;</code>
       */
      public boolean hasAppDetails() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .AppDetails appDetails = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppDetails getAppDetails() {
        if (appDetailsBuilder_ == null) {
          return appDetails_;
        } else {
          return appDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AppDetails appDetails = 1;</code>
       */
      public Builder setAppDetails(com.akdeniz.googleplaycrawler.GooglePlay.AppDetails value) {
        if (appDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          appDetails_ = value;
          onChanged();
        } else {
          appDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AppDetails appDetails = 1;</code>
       */
      public Builder setAppDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.Builder builderForValue) {
        if (appDetailsBuilder_ == null) {
          appDetails_ = builderForValue.build();
          onChanged();
        } else {
          appDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AppDetails appDetails = 1;</code>
       */
      public Builder mergeAppDetails(com.akdeniz.googleplaycrawler.GooglePlay.AppDetails value) {
        if (appDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              appDetails_ != com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.getDefaultInstance()) {
            appDetails_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.newBuilder(appDetails_).mergeFrom(value).buildPartial();
          } else {
            appDetails_ = value;
          }
          onChanged();
        } else {
          appDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AppDetails appDetails = 1;</code>
       */
      public Builder clearAppDetails() {
        if (appDetailsBuilder_ == null) {
          appDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.getDefaultInstance();
          onChanged();
        } else {
          appDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .AppDetails appDetails = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.Builder getAppDetailsBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getAppDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AppDetails appDetails = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppDetailsOrBuilder getAppDetailsOrBuilder() {
        if (appDetailsBuilder_ != null) {
          return appDetailsBuilder_.getMessageOrBuilder();
        } else {
          return appDetails_;
        }
      }
      /**
       * <code>optional .AppDetails appDetails = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AppDetails, com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AppDetailsOrBuilder> 
          getAppDetailsFieldBuilder() {
        if (appDetailsBuilder_ == null) {
          appDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AppDetails, com.akdeniz.googleplaycrawler.GooglePlay.AppDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AppDetailsOrBuilder>(
                  appDetails_,
                  getParentForChildren(),
                  isClean());
          appDetails_ = null;
        }
        return appDetailsBuilder_;
      }

      // optional .AlbumDetails albumDetails = 2;
      private com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails albumDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails, com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetailsOrBuilder> albumDetailsBuilder_;
      /**
       * <code>optional .AlbumDetails albumDetails = 2;</code>
       */
      public boolean hasAlbumDetails() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .AlbumDetails albumDetails = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails getAlbumDetails() {
        if (albumDetailsBuilder_ == null) {
          return albumDetails_;
        } else {
          return albumDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AlbumDetails albumDetails = 2;</code>
       */
      public Builder setAlbumDetails(com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails value) {
        if (albumDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          albumDetails_ = value;
          onChanged();
        } else {
          albumDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .AlbumDetails albumDetails = 2;</code>
       */
      public Builder setAlbumDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.Builder builderForValue) {
        if (albumDetailsBuilder_ == null) {
          albumDetails_ = builderForValue.build();
          onChanged();
        } else {
          albumDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .AlbumDetails albumDetails = 2;</code>
       */
      public Builder mergeAlbumDetails(com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails value) {
        if (albumDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              albumDetails_ != com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.getDefaultInstance()) {
            albumDetails_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.newBuilder(albumDetails_).mergeFrom(value).buildPartial();
          } else {
            albumDetails_ = value;
          }
          onChanged();
        } else {
          albumDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .AlbumDetails albumDetails = 2;</code>
       */
      public Builder clearAlbumDetails() {
        if (albumDetailsBuilder_ == null) {
          albumDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.getDefaultInstance();
          onChanged();
        } else {
          albumDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .AlbumDetails albumDetails = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.Builder getAlbumDetailsBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getAlbumDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AlbumDetails albumDetails = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetailsOrBuilder getAlbumDetailsOrBuilder() {
        if (albumDetailsBuilder_ != null) {
          return albumDetailsBuilder_.getMessageOrBuilder();
        } else {
          return albumDetails_;
        }
      }
      /**
       * <code>optional .AlbumDetails albumDetails = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails, com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetailsOrBuilder> 
          getAlbumDetailsFieldBuilder() {
        if (albumDetailsBuilder_ == null) {
          albumDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails, com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AlbumDetailsOrBuilder>(
                  albumDetails_,
                  getParentForChildren(),
                  isClean());
          albumDetails_ = null;
        }
        return albumDetailsBuilder_;
      }

      // optional .ArtistDetails artistDetails = 3;
      private com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails artistDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder> artistDetailsBuilder_;
      /**
       * <code>optional .ArtistDetails artistDetails = 3;</code>
       */
      public boolean hasArtistDetails() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .ArtistDetails artistDetails = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails getArtistDetails() {
        if (artistDetailsBuilder_ == null) {
          return artistDetails_;
        } else {
          return artistDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .ArtistDetails artistDetails = 3;</code>
       */
      public Builder setArtistDetails(com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails value) {
        if (artistDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          artistDetails_ = value;
          onChanged();
        } else {
          artistDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .ArtistDetails artistDetails = 3;</code>
       */
      public Builder setArtistDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder builderForValue) {
        if (artistDetailsBuilder_ == null) {
          artistDetails_ = builderForValue.build();
          onChanged();
        } else {
          artistDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .ArtistDetails artistDetails = 3;</code>
       */
      public Builder mergeArtistDetails(com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails value) {
        if (artistDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              artistDetails_ != com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance()) {
            artistDetails_ =
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.newBuilder(artistDetails_).mergeFrom(value).buildPartial();
          } else {
            artistDetails_ = value;
          }
          onChanged();
        } else {
          artistDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .ArtistDetails artistDetails = 3;</code>
       */
      public Builder clearArtistDetails() {
        if (artistDetailsBuilder_ == null) {
          artistDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance();
          onChanged();
        } else {
          artistDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .ArtistDetails artistDetails = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder getArtistDetailsBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getArtistDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .ArtistDetails artistDetails = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder getArtistDetailsOrBuilder() {
        if (artistDetailsBuilder_ != null) {
          return artistDetailsBuilder_.getMessageOrBuilder();
        } else {
          return artistDetails_;
        }
      }
      /**
       * <code>optional .ArtistDetails artistDetails = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder> 
          getArtistDetailsFieldBuilder() {
        if (artistDetailsBuilder_ == null) {
          artistDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder>(
                  artistDetails_,
                  getParentForChildren(),
                  isClean());
          artistDetails_ = null;
        }
        return artistDetailsBuilder_;
      }

      // optional .SongDetails songDetails = 4;
      private com.akdeniz.googleplaycrawler.GooglePlay.SongDetails songDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.SongDetails, com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.SongDetailsOrBuilder> songDetailsBuilder_;
      /**
       * <code>optional .SongDetails songDetails = 4;</code>
       */
      public boolean hasSongDetails() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .SongDetails songDetails = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.SongDetails getSongDetails() {
        if (songDetailsBuilder_ == null) {
          return songDetails_;
        } else {
          return songDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .SongDetails songDetails = 4;</code>
       */
      public Builder setSongDetails(com.akdeniz.googleplaycrawler.GooglePlay.SongDetails value) {
        if (songDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          songDetails_ = value;
          onChanged();
        } else {
          songDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .SongDetails songDetails = 4;</code>
       */
      public Builder setSongDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.Builder builderForValue) {
        if (songDetailsBuilder_ == null) {
          songDetails_ = builderForValue.build();
          onChanged();
        } else {
          songDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .SongDetails songDetails = 4;</code>
       */
      public Builder mergeSongDetails(com.akdeniz.googleplaycrawler.GooglePlay.SongDetails value) {
        if (songDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              songDetails_ != com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.getDefaultInstance()) {
            songDetails_ =
              com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.newBuilder(songDetails_).mergeFrom(value).buildPartial();
          } else {
            songDetails_ = value;
          }
          onChanged();
        } else {
          songDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .SongDetails songDetails = 4;</code>
       */
      public Builder clearSongDetails() {
        if (songDetailsBuilder_ == null) {
          songDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.getDefaultInstance();
          onChanged();
        } else {
          songDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .SongDetails songDetails = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.Builder getSongDetailsBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getSongDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .SongDetails songDetails = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.SongDetailsOrBuilder getSongDetailsOrBuilder() {
        if (songDetailsBuilder_ != null) {
          return songDetailsBuilder_.getMessageOrBuilder();
        } else {
          return songDetails_;
        }
      }
      /**
       * <code>optional .SongDetails songDetails = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.SongDetails, com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.SongDetailsOrBuilder> 
          getSongDetailsFieldBuilder() {
        if (songDetailsBuilder_ == null) {
          songDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.SongDetails, com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.SongDetailsOrBuilder>(
                  songDetails_,
                  getParentForChildren(),
                  isClean());
          songDetails_ = null;
        }
        return songDetailsBuilder_;
      }

      // optional .BookDetails bookDetails = 5;
      private com.akdeniz.googleplaycrawler.GooglePlay.BookDetails bookDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BookDetails, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BookDetailsOrBuilder> bookDetailsBuilder_;
      /**
       * <code>optional .BookDetails bookDetails = 5;</code>
       */
      public boolean hasBookDetails() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional .BookDetails bookDetails = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails getBookDetails() {
        if (bookDetailsBuilder_ == null) {
          return bookDetails_;
        } else {
          return bookDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .BookDetails bookDetails = 5;</code>
       */
      public Builder setBookDetails(com.akdeniz.googleplaycrawler.GooglePlay.BookDetails value) {
        if (bookDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          bookDetails_ = value;
          onChanged();
        } else {
          bookDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .BookDetails bookDetails = 5;</code>
       */
      public Builder setBookDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Builder builderForValue) {
        if (bookDetailsBuilder_ == null) {
          bookDetails_ = builderForValue.build();
          onChanged();
        } else {
          bookDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .BookDetails bookDetails = 5;</code>
       */
      public Builder mergeBookDetails(com.akdeniz.googleplaycrawler.GooglePlay.BookDetails value) {
        if (bookDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              bookDetails_ != com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.getDefaultInstance()) {
            bookDetails_ =
              com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.newBuilder(bookDetails_).mergeFrom(value).buildPartial();
          } else {
            bookDetails_ = value;
          }
          onChanged();
        } else {
          bookDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .BookDetails bookDetails = 5;</code>
       */
      public Builder clearBookDetails() {
        if (bookDetailsBuilder_ == null) {
          bookDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.getDefaultInstance();
          onChanged();
        } else {
          bookDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <code>optional .BookDetails bookDetails = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Builder getBookDetailsBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getBookDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .BookDetails bookDetails = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BookDetailsOrBuilder getBookDetailsOrBuilder() {
        if (bookDetailsBuilder_ != null) {
          return bookDetailsBuilder_.getMessageOrBuilder();
        } else {
          return bookDetails_;
        }
      }
      /**
       * <code>optional .BookDetails bookDetails = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BookDetails, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BookDetailsOrBuilder> 
          getBookDetailsFieldBuilder() {
        if (bookDetailsBuilder_ == null) {
          bookDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.BookDetails, com.akdeniz.googleplaycrawler.GooglePlay.BookDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BookDetailsOrBuilder>(
                  bookDetails_,
                  getParentForChildren(),
                  isClean());
          bookDetails_ = null;
        }
        return bookDetailsBuilder_;
      }

      // optional .VideoDetails videoDetails = 6;
      private com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails videoDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails, com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.VideoDetailsOrBuilder> videoDetailsBuilder_;
      /**
       * <code>optional .VideoDetails videoDetails = 6;</code>
       */
      public boolean hasVideoDetails() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .VideoDetails videoDetails = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails getVideoDetails() {
        if (videoDetailsBuilder_ == null) {
          return videoDetails_;
        } else {
          return videoDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .VideoDetails videoDetails = 6;</code>
       */
      public Builder setVideoDetails(com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails value) {
        if (videoDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          videoDetails_ = value;
          onChanged();
        } else {
          videoDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .VideoDetails videoDetails = 6;</code>
       */
      public Builder setVideoDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.Builder builderForValue) {
        if (videoDetailsBuilder_ == null) {
          videoDetails_ = builderForValue.build();
          onChanged();
        } else {
          videoDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .VideoDetails videoDetails = 6;</code>
       */
      public Builder mergeVideoDetails(com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails value) {
        if (videoDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              videoDetails_ != com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.getDefaultInstance()) {
            videoDetails_ =
              com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.newBuilder(videoDetails_).mergeFrom(value).buildPartial();
          } else {
            videoDetails_ = value;
          }
          onChanged();
        } else {
          videoDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .VideoDetails videoDetails = 6;</code>
       */
      public Builder clearVideoDetails() {
        if (videoDetailsBuilder_ == null) {
          videoDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.getDefaultInstance();
          onChanged();
        } else {
          videoDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .VideoDetails videoDetails = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.Builder getVideoDetailsBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getVideoDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .VideoDetails videoDetails = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoDetailsOrBuilder getVideoDetailsOrBuilder() {
        if (videoDetailsBuilder_ != null) {
          return videoDetailsBuilder_.getMessageOrBuilder();
        } else {
          return videoDetails_;
        }
      }
      /**
       * <code>optional .VideoDetails videoDetails = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails, com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.VideoDetailsOrBuilder> 
          getVideoDetailsFieldBuilder() {
        if (videoDetailsBuilder_ == null) {
          videoDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails, com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.VideoDetailsOrBuilder>(
                  videoDetails_,
                  getParentForChildren(),
                  isClean());
          videoDetails_ = null;
        }
        return videoDetailsBuilder_;
      }

      // optional .SubscriptionDetails subscriptionDetails = 7;
      private com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails subscriptionDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetailsOrBuilder> subscriptionDetailsBuilder_;
      /**
       * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
       */
      public boolean hasSubscriptionDetails() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails getSubscriptionDetails() {
        if (subscriptionDetailsBuilder_ == null) {
          return subscriptionDetails_;
        } else {
          return subscriptionDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
       */
      public Builder setSubscriptionDetails(com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails value) {
        if (subscriptionDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          subscriptionDetails_ = value;
          onChanged();
        } else {
          subscriptionDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
       */
      public Builder setSubscriptionDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.Builder builderForValue) {
        if (subscriptionDetailsBuilder_ == null) {
          subscriptionDetails_ = builderForValue.build();
          onChanged();
        } else {
          subscriptionDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
       */
      public Builder mergeSubscriptionDetails(com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails value) {
        if (subscriptionDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              subscriptionDetails_ != com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.getDefaultInstance()) {
            subscriptionDetails_ =
              com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.newBuilder(subscriptionDetails_).mergeFrom(value).buildPartial();
          } else {
            subscriptionDetails_ = value;
          }
          onChanged();
        } else {
          subscriptionDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
       */
      public Builder clearSubscriptionDetails() {
        if (subscriptionDetailsBuilder_ == null) {
          subscriptionDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.getDefaultInstance();
          onChanged();
        } else {
          subscriptionDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.Builder getSubscriptionDetailsBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getSubscriptionDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetailsOrBuilder getSubscriptionDetailsOrBuilder() {
        if (subscriptionDetailsBuilder_ != null) {
          return subscriptionDetailsBuilder_.getMessageOrBuilder();
        } else {
          return subscriptionDetails_;
        }
      }
      /**
       * <code>optional .SubscriptionDetails subscriptionDetails = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetailsOrBuilder> 
          getSubscriptionDetailsFieldBuilder() {
        if (subscriptionDetailsBuilder_ == null) {
          subscriptionDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetailsOrBuilder>(
                  subscriptionDetails_,
                  getParentForChildren(),
                  isClean());
          subscriptionDetails_ = null;
        }
        return subscriptionDetailsBuilder_;
      }

      // optional .MagazineDetails magazineDetails = 8;
      private com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails magazineDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails, com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetailsOrBuilder> magazineDetailsBuilder_;
      /**
       * <code>optional .MagazineDetails magazineDetails = 8;</code>
       */
      public boolean hasMagazineDetails() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional .MagazineDetails magazineDetails = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails getMagazineDetails() {
        if (magazineDetailsBuilder_ == null) {
          return magazineDetails_;
        } else {
          return magazineDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .MagazineDetails magazineDetails = 8;</code>
       */
      public Builder setMagazineDetails(com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails value) {
        if (magazineDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          magazineDetails_ = value;
          onChanged();
        } else {
          magazineDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .MagazineDetails magazineDetails = 8;</code>
       */
      public Builder setMagazineDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.Builder builderForValue) {
        if (magazineDetailsBuilder_ == null) {
          magazineDetails_ = builderForValue.build();
          onChanged();
        } else {
          magazineDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .MagazineDetails magazineDetails = 8;</code>
       */
      public Builder mergeMagazineDetails(com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails value) {
        if (magazineDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              magazineDetails_ != com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.getDefaultInstance()) {
            magazineDetails_ =
              com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.newBuilder(magazineDetails_).mergeFrom(value).buildPartial();
          } else {
            magazineDetails_ = value;
          }
          onChanged();
        } else {
          magazineDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .MagazineDetails magazineDetails = 8;</code>
       */
      public Builder clearMagazineDetails() {
        if (magazineDetailsBuilder_ == null) {
          magazineDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.getDefaultInstance();
          onChanged();
        } else {
          magazineDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional .MagazineDetails magazineDetails = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.Builder getMagazineDetailsBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getMagazineDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .MagazineDetails magazineDetails = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetailsOrBuilder getMagazineDetailsOrBuilder() {
        if (magazineDetailsBuilder_ != null) {
          return magazineDetailsBuilder_.getMessageOrBuilder();
        } else {
          return magazineDetails_;
        }
      }
      /**
       * <code>optional .MagazineDetails magazineDetails = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails, com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetailsOrBuilder> 
          getMagazineDetailsFieldBuilder() {
        if (magazineDetailsBuilder_ == null) {
          magazineDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails, com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetailsOrBuilder>(
                  magazineDetails_,
                  getParentForChildren(),
                  isClean());
          magazineDetails_ = null;
        }
        return magazineDetailsBuilder_;
      }

      // optional .TvShowDetails tvShowDetails = 9;
      private com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails tvShowDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails, com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetailsOrBuilder> tvShowDetailsBuilder_;
      /**
       * <code>optional .TvShowDetails tvShowDetails = 9;</code>
       */
      public boolean hasTvShowDetails() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional .TvShowDetails tvShowDetails = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails getTvShowDetails() {
        if (tvShowDetailsBuilder_ == null) {
          return tvShowDetails_;
        } else {
          return tvShowDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .TvShowDetails tvShowDetails = 9;</code>
       */
      public Builder setTvShowDetails(com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails value) {
        if (tvShowDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          tvShowDetails_ = value;
          onChanged();
        } else {
          tvShowDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .TvShowDetails tvShowDetails = 9;</code>
       */
      public Builder setTvShowDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.Builder builderForValue) {
        if (tvShowDetailsBuilder_ == null) {
          tvShowDetails_ = builderForValue.build();
          onChanged();
        } else {
          tvShowDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .TvShowDetails tvShowDetails = 9;</code>
       */
      public Builder mergeTvShowDetails(com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails value) {
        if (tvShowDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              tvShowDetails_ != com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.getDefaultInstance()) {
            tvShowDetails_ =
              com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.newBuilder(tvShowDetails_).mergeFrom(value).buildPartial();
          } else {
            tvShowDetails_ = value;
          }
          onChanged();
        } else {
          tvShowDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .TvShowDetails tvShowDetails = 9;</code>
       */
      public Builder clearTvShowDetails() {
        if (tvShowDetailsBuilder_ == null) {
          tvShowDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.getDefaultInstance();
          onChanged();
        } else {
          tvShowDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       * <code>optional .TvShowDetails tvShowDetails = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.Builder getTvShowDetailsBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getTvShowDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .TvShowDetails tvShowDetails = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetailsOrBuilder getTvShowDetailsOrBuilder() {
        if (tvShowDetailsBuilder_ != null) {
          return tvShowDetailsBuilder_.getMessageOrBuilder();
        } else {
          return tvShowDetails_;
        }
      }
      /**
       * <code>optional .TvShowDetails tvShowDetails = 9;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails, com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetailsOrBuilder> 
          getTvShowDetailsFieldBuilder() {
        if (tvShowDetailsBuilder_ == null) {
          tvShowDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails, com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetailsOrBuilder>(
                  tvShowDetails_,
                  getParentForChildren(),
                  isClean());
          tvShowDetails_ = null;
        }
        return tvShowDetailsBuilder_;
      }

      // optional .TvSeasonDetails tvSeasonDetails = 10;
      private com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails tvSeasonDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails, com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetailsOrBuilder> tvSeasonDetailsBuilder_;
      /**
       * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
       */
      public boolean hasTvSeasonDetails() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails getTvSeasonDetails() {
        if (tvSeasonDetailsBuilder_ == null) {
          return tvSeasonDetails_;
        } else {
          return tvSeasonDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
       */
      public Builder setTvSeasonDetails(com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails value) {
        if (tvSeasonDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          tvSeasonDetails_ = value;
          onChanged();
        } else {
          tvSeasonDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
       */
      public Builder setTvSeasonDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.Builder builderForValue) {
        if (tvSeasonDetailsBuilder_ == null) {
          tvSeasonDetails_ = builderForValue.build();
          onChanged();
        } else {
          tvSeasonDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
       */
      public Builder mergeTvSeasonDetails(com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails value) {
        if (tvSeasonDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200) &&
              tvSeasonDetails_ != com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.getDefaultInstance()) {
            tvSeasonDetails_ =
              com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.newBuilder(tvSeasonDetails_).mergeFrom(value).buildPartial();
          } else {
            tvSeasonDetails_ = value;
          }
          onChanged();
        } else {
          tvSeasonDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
       */
      public Builder clearTvSeasonDetails() {
        if (tvSeasonDetailsBuilder_ == null) {
          tvSeasonDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.getDefaultInstance();
          onChanged();
        } else {
          tvSeasonDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      /**
       * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.Builder getTvSeasonDetailsBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getTvSeasonDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetailsOrBuilder getTvSeasonDetailsOrBuilder() {
        if (tvSeasonDetailsBuilder_ != null) {
          return tvSeasonDetailsBuilder_.getMessageOrBuilder();
        } else {
          return tvSeasonDetails_;
        }
      }
      /**
       * <code>optional .TvSeasonDetails tvSeasonDetails = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails, com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetailsOrBuilder> 
          getTvSeasonDetailsFieldBuilder() {
        if (tvSeasonDetailsBuilder_ == null) {
          tvSeasonDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails, com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetailsOrBuilder>(
                  tvSeasonDetails_,
                  getParentForChildren(),
                  isClean());
          tvSeasonDetails_ = null;
        }
        return tvSeasonDetailsBuilder_;
      }

      // optional .TvEpisodeDetails tvEpisodeDetails = 11;
      private com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails tvEpisodeDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails, com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetailsOrBuilder> tvEpisodeDetailsBuilder_;
      /**
       * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
       */
      public boolean hasTvEpisodeDetails() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails getTvEpisodeDetails() {
        if (tvEpisodeDetailsBuilder_ == null) {
          return tvEpisodeDetails_;
        } else {
          return tvEpisodeDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
       */
      public Builder setTvEpisodeDetails(com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails value) {
        if (tvEpisodeDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          tvEpisodeDetails_ = value;
          onChanged();
        } else {
          tvEpisodeDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
       */
      public Builder setTvEpisodeDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.Builder builderForValue) {
        if (tvEpisodeDetailsBuilder_ == null) {
          tvEpisodeDetails_ = builderForValue.build();
          onChanged();
        } else {
          tvEpisodeDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
       */
      public Builder mergeTvEpisodeDetails(com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails value) {
        if (tvEpisodeDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400) &&
              tvEpisodeDetails_ != com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.getDefaultInstance()) {
            tvEpisodeDetails_ =
              com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.newBuilder(tvEpisodeDetails_).mergeFrom(value).buildPartial();
          } else {
            tvEpisodeDetails_ = value;
          }
          onChanged();
        } else {
          tvEpisodeDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
       */
      public Builder clearTvEpisodeDetails() {
        if (tvEpisodeDetailsBuilder_ == null) {
          tvEpisodeDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.getDefaultInstance();
          onChanged();
        } else {
          tvEpisodeDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }
      /**
       * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.Builder getTvEpisodeDetailsBuilder() {
        bitField0_ |= 0x00000400;
        onChanged();
        return getTvEpisodeDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetailsOrBuilder getTvEpisodeDetailsOrBuilder() {
        if (tvEpisodeDetailsBuilder_ != null) {
          return tvEpisodeDetailsBuilder_.getMessageOrBuilder();
        } else {
          return tvEpisodeDetails_;
        }
      }
      /**
       * <code>optional .TvEpisodeDetails tvEpisodeDetails = 11;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails, com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetailsOrBuilder> 
          getTvEpisodeDetailsFieldBuilder() {
        if (tvEpisodeDetailsBuilder_ == null) {
          tvEpisodeDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails, com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetailsOrBuilder>(
                  tvEpisodeDetails_,
                  getParentForChildren(),
                  isClean());
          tvEpisodeDetails_ = null;
        }
        return tvEpisodeDetailsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:DocumentDetails)
    }

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

    // @@protoc_insertion_point(class_scope:DocumentDetails)
  }

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

    // optional int32 fileType = 1;
    /**
     * <code>optional int32 fileType = 1;</code>
     */
    boolean hasFileType();
    /**
     * <code>optional int32 fileType = 1;</code>
     */
    int getFileType();

    // optional int32 versionCode = 2;
    /**
     * <code>optional int32 versionCode = 2;</code>
     */
    boolean hasVersionCode();
    /**
     * <code>optional int32 versionCode = 2;</code>
     */
    int getVersionCode();

    // optional int64 size = 3;
    /**
     * <code>optional int64 size = 3;</code>
     */
    boolean hasSize();
    /**
     * <code>optional int64 size = 3;</code>
     */
    long getSize();
  }
  /**
   * Protobuf type {@code FileMetadata}
   */
  public static final class FileMetadata extends
      com.google.protobuf.GeneratedMessage
      implements FileMetadataOrBuilder {
    // Use FileMetadata.newBuilder() to construct.
    private FileMetadata(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private FileMetadata(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public FileMetadata getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private FileMetadata(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              fileType_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              versionCode_ = input.readInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              size_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FileMetadata_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FileMetadata_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.class, com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 fileType = 1;
    public static final int FILETYPE_FIELD_NUMBER = 1;
    private int fileType_;
    /**
     * <code>optional int32 fileType = 1;</code>
     */
    public boolean hasFileType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 fileType = 1;</code>
     */
    public int getFileType() {
      return fileType_;
    }

    // optional int32 versionCode = 2;
    public static final int VERSIONCODE_FIELD_NUMBER = 2;
    private int versionCode_;
    /**
     * <code>optional int32 versionCode = 2;</code>
     */
    public boolean hasVersionCode() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 versionCode = 2;</code>
     */
    public int getVersionCode() {
      return versionCode_;
    }

    // optional int64 size = 3;
    public static final int SIZE_FIELD_NUMBER = 3;
    private long size_;
    /**
     * <code>optional int64 size = 3;</code>
     */
    public boolean hasSize() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 size = 3;</code>
     */
    public long getSize() {
      return size_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, fileType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, versionCode_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, size_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, fileType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, versionCode_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, size_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code FileMetadata}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.FileMetadataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FileMetadata_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FileMetadata_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.class, com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        fileType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        versionCode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        size_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FileMetadata_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata build() {
        com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata result = new com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.fileType_ = fileType_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.versionCode_ = versionCode_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.size_ = size_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.FileMetadata.getDefaultInstance()) return this;
        if (other.hasFileType()) {
          setFileType(other.getFileType());
        }
        if (other.hasVersionCode()) {
          setVersionCode(other.getVersionCode());
        }
        if (other.hasSize()) {
          setSize(other.getSize());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 fileType = 1;
      private int fileType_ ;
      /**
       * <code>optional int32 fileType = 1;</code>
       */
      public boolean hasFileType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 fileType = 1;</code>
       */
      public int getFileType() {
        return fileType_;
      }
      /**
       * <code>optional int32 fileType = 1;</code>
       */
      public Builder setFileType(int value) {
        bitField0_ |= 0x00000001;
        fileType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 fileType = 1;</code>
       */
      public Builder clearFileType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        fileType_ = 0;
        onChanged();
        return this;
      }

      // optional int32 versionCode = 2;
      private int versionCode_ ;
      /**
       * <code>optional int32 versionCode = 2;</code>
       */
      public boolean hasVersionCode() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 versionCode = 2;</code>
       */
      public int getVersionCode() {
        return versionCode_;
      }
      /**
       * <code>optional int32 versionCode = 2;</code>
       */
      public Builder setVersionCode(int value) {
        bitField0_ |= 0x00000002;
        versionCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 versionCode = 2;</code>
       */
      public Builder clearVersionCode() {
        bitField0_ = (bitField0_ & ~0x00000002);
        versionCode_ = 0;
        onChanged();
        return this;
      }

      // optional int64 size = 3;
      private long size_ ;
      /**
       * <code>optional int64 size = 3;</code>
       */
      public boolean hasSize() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 size = 3;</code>
       */
      public long getSize() {
        return size_;
      }
      /**
       * <code>optional int64 size = 3;</code>
       */
      public Builder setSize(long value) {
        bitField0_ |= 0x00000004;
        size_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 size = 3;</code>
       */
      public Builder clearSize() {
        bitField0_ = (bitField0_ & ~0x00000004);
        size_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:FileMetadata)
    }

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

    // @@protoc_insertion_point(class_scope:FileMetadata)
  }

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

    // optional string parentDetailsUrl = 1;
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    boolean hasParentDetailsUrl();
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    java.lang.String getParentDetailsUrl();
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    com.google.protobuf.ByteString
        getParentDetailsUrlBytes();

    // optional string deviceAvailabilityDescriptionHtml = 2;
    /**
     * <code>optional string deviceAvailabilityDescriptionHtml = 2;</code>
     */
    boolean hasDeviceAvailabilityDescriptionHtml();
    /**
     * <code>optional string deviceAvailabilityDescriptionHtml = 2;</code>
     */
    java.lang.String getDeviceAvailabilityDescriptionHtml();
    /**
     * <code>optional string deviceAvailabilityDescriptionHtml = 2;</code>
     */
    com.google.protobuf.ByteString
        getDeviceAvailabilityDescriptionHtmlBytes();

    // optional string psvDescription = 3;
    /**
     * <code>optional string psvDescription = 3;</code>
     */
    boolean hasPsvDescription();
    /**
     * <code>optional string psvDescription = 3;</code>
     */
    java.lang.String getPsvDescription();
    /**
     * <code>optional string psvDescription = 3;</code>
     */
    com.google.protobuf.ByteString
        getPsvDescriptionBytes();

    // optional string deliveryFrequencyDescription = 4;
    /**
     * <code>optional string deliveryFrequencyDescription = 4;</code>
     */
    boolean hasDeliveryFrequencyDescription();
    /**
     * <code>optional string deliveryFrequencyDescription = 4;</code>
     */
    java.lang.String getDeliveryFrequencyDescription();
    /**
     * <code>optional string deliveryFrequencyDescription = 4;</code>
     */
    com.google.protobuf.ByteString
        getDeliveryFrequencyDescriptionBytes();
  }
  /**
   * Protobuf type {@code MagazineDetails}
   */
  public static final class MagazineDetails extends
      com.google.protobuf.GeneratedMessage
      implements MagazineDetailsOrBuilder {
    // Use MagazineDetails.newBuilder() to construct.
    private MagazineDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private MagazineDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public MagazineDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private MagazineDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              parentDetailsUrl_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              deviceAvailabilityDescriptionHtml_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              psvDescription_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              deliveryFrequencyDescription_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_MagazineDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_MagazineDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string parentDetailsUrl = 1;
    public static final int PARENTDETAILSURL_FIELD_NUMBER = 1;
    private java.lang.Object parentDetailsUrl_;
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    public boolean hasParentDetailsUrl() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    public java.lang.String getParentDetailsUrl() {
      java.lang.Object ref = parentDetailsUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          parentDetailsUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    public com.google.protobuf.ByteString
        getParentDetailsUrlBytes() {
      java.lang.Object ref = parentDetailsUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        parentDetailsUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string deviceAvailabilityDescriptionHtml = 2;
    public static final int DEVICEAVAILABILITYDESCRIPTIONHTML_FIELD_NUMBER = 2;
    private java.lang.Object deviceAvailabilityDescriptionHtml_;
    /**
     * <code>optional string deviceAvailabilityDescriptionHtml = 2;</code>
     */
    public boolean hasDeviceAvailabilityDescriptionHtml() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string deviceAvailabilityDescriptionHtml = 2;</code>
     */
    public java.lang.String getDeviceAvailabilityDescriptionHtml() {
      java.lang.Object ref = deviceAvailabilityDescriptionHtml_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          deviceAvailabilityDescriptionHtml_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string deviceAvailabilityDescriptionHtml = 2;</code>
     */
    public com.google.protobuf.ByteString
        getDeviceAvailabilityDescriptionHtmlBytes() {
      java.lang.Object ref = deviceAvailabilityDescriptionHtml_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        deviceAvailabilityDescriptionHtml_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string psvDescription = 3;
    public static final int PSVDESCRIPTION_FIELD_NUMBER = 3;
    private java.lang.Object psvDescription_;
    /**
     * <code>optional string psvDescription = 3;</code>
     */
    public boolean hasPsvDescription() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string psvDescription = 3;</code>
     */
    public java.lang.String getPsvDescription() {
      java.lang.Object ref = psvDescription_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          psvDescription_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string psvDescription = 3;</code>
     */
    public com.google.protobuf.ByteString
        getPsvDescriptionBytes() {
      java.lang.Object ref = psvDescription_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        psvDescription_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string deliveryFrequencyDescription = 4;
    public static final int DELIVERYFREQUENCYDESCRIPTION_FIELD_NUMBER = 4;
    private java.lang.Object deliveryFrequencyDescription_;
    /**
     * <code>optional string deliveryFrequencyDescription = 4;</code>
     */
    public boolean hasDeliveryFrequencyDescription() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string deliveryFrequencyDescription = 4;</code>
     */
    public java.lang.String getDeliveryFrequencyDescription() {
      java.lang.Object ref = deliveryFrequencyDescription_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          deliveryFrequencyDescription_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string deliveryFrequencyDescription = 4;</code>
     */
    public com.google.protobuf.ByteString
        getDeliveryFrequencyDescriptionBytes() {
      java.lang.Object ref = deliveryFrequencyDescription_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        deliveryFrequencyDescription_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      parentDetailsUrl_ = "";
      deviceAvailabilityDescriptionHtml_ = "";
      psvDescription_ = "";
      deliveryFrequencyDescription_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getParentDetailsUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getDeviceAvailabilityDescriptionHtmlBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getPsvDescriptionBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getDeliveryFrequencyDescriptionBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getParentDetailsUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getDeviceAvailabilityDescriptionHtmlBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getPsvDescriptionBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getDeliveryFrequencyDescriptionBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code MagazineDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_MagazineDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_MagazineDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        parentDetailsUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        deviceAvailabilityDescriptionHtml_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        psvDescription_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        deliveryFrequencyDescription_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_MagazineDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.parentDetailsUrl_ = parentDetailsUrl_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.deviceAvailabilityDescriptionHtml_ = deviceAvailabilityDescriptionHtml_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.psvDescription_ = psvDescription_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.deliveryFrequencyDescription_ = deliveryFrequencyDescription_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.MagazineDetails.getDefaultInstance()) return this;
        if (other.hasParentDetailsUrl()) {
          bitField0_ |= 0x00000001;
          parentDetailsUrl_ = other.parentDetailsUrl_;
          onChanged();
        }
        if (other.hasDeviceAvailabilityDescriptionHtml()) {
          bitField0_ |= 0x00000002;
          deviceAvailabilityDescriptionHtml_ = other.deviceAvailabilityDescriptionHtml_;
          onChanged();
        }
        if (other.hasPsvDescription()) {
          bitField0_ |= 0x00000004;
          psvDescription_ = other.psvDescription_;
          onChanged();
        }
        if (other.hasDeliveryFrequencyDescription()) {
          bitField0_ |= 0x00000008;
          deliveryFrequencyDescription_ = other.deliveryFrequencyDescription_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string parentDetailsUrl = 1;
      private java.lang.Object parentDetailsUrl_ = "";
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public boolean hasParentDetailsUrl() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public java.lang.String getParentDetailsUrl() {
        java.lang.Object ref = parentDetailsUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          parentDetailsUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public com.google.protobuf.ByteString
          getParentDetailsUrlBytes() {
        java.lang.Object ref = parentDetailsUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          parentDetailsUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public Builder setParentDetailsUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        parentDetailsUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public Builder clearParentDetailsUrl() {
        bitField0_ = (bitField0_ & ~0x00000001);
        parentDetailsUrl_ = getDefaultInstance().getParentDetailsUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public Builder setParentDetailsUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        parentDetailsUrl_ = value;
        onChanged();
        return this;
      }

      // optional string deviceAvailabilityDescriptionHtml = 2;
      private java.lang.Object deviceAvailabilityDescriptionHtml_ = "";
      /**
       * <code>optional string deviceAvailabilityDescriptionHtml = 2;</code>
       */
      public boolean hasDeviceAvailabilityDescriptionHtml() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string deviceAvailabilityDescriptionHtml = 2;</code>
       */
      public java.lang.String getDeviceAvailabilityDescriptionHtml() {
        java.lang.Object ref = deviceAvailabilityDescriptionHtml_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          deviceAvailabilityDescriptionHtml_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string deviceAvailabilityDescriptionHtml = 2;</code>
       */
      public com.google.protobuf.ByteString
          getDeviceAvailabilityDescriptionHtmlBytes() {
        java.lang.Object ref = deviceAvailabilityDescriptionHtml_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          deviceAvailabilityDescriptionHtml_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string deviceAvailabilityDescriptionHtml = 2;</code>
       */
      public Builder setDeviceAvailabilityDescriptionHtml(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        deviceAvailabilityDescriptionHtml_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string deviceAvailabilityDescriptionHtml = 2;</code>
       */
      public Builder clearDeviceAvailabilityDescriptionHtml() {
        bitField0_ = (bitField0_ & ~0x00000002);
        deviceAvailabilityDescriptionHtml_ = getDefaultInstance().getDeviceAvailabilityDescriptionHtml();
        onChanged();
        return this;
      }
      /**
       * <code>optional string deviceAvailabilityDescriptionHtml = 2;</code>
       */
      public Builder setDeviceAvailabilityDescriptionHtmlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        deviceAvailabilityDescriptionHtml_ = value;
        onChanged();
        return this;
      }

      // optional string psvDescription = 3;
      private java.lang.Object psvDescription_ = "";
      /**
       * <code>optional string psvDescription = 3;</code>
       */
      public boolean hasPsvDescription() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string psvDescription = 3;</code>
       */
      public java.lang.String getPsvDescription() {
        java.lang.Object ref = psvDescription_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          psvDescription_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string psvDescription = 3;</code>
       */
      public com.google.protobuf.ByteString
          getPsvDescriptionBytes() {
        java.lang.Object ref = psvDescription_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          psvDescription_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string psvDescription = 3;</code>
       */
      public Builder setPsvDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        psvDescription_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string psvDescription = 3;</code>
       */
      public Builder clearPsvDescription() {
        bitField0_ = (bitField0_ & ~0x00000004);
        psvDescription_ = getDefaultInstance().getPsvDescription();
        onChanged();
        return this;
      }
      /**
       * <code>optional string psvDescription = 3;</code>
       */
      public Builder setPsvDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        psvDescription_ = value;
        onChanged();
        return this;
      }

      // optional string deliveryFrequencyDescription = 4;
      private java.lang.Object deliveryFrequencyDescription_ = "";
      /**
       * <code>optional string deliveryFrequencyDescription = 4;</code>
       */
      public boolean hasDeliveryFrequencyDescription() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string deliveryFrequencyDescription = 4;</code>
       */
      public java.lang.String getDeliveryFrequencyDescription() {
        java.lang.Object ref = deliveryFrequencyDescription_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          deliveryFrequencyDescription_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string deliveryFrequencyDescription = 4;</code>
       */
      public com.google.protobuf.ByteString
          getDeliveryFrequencyDescriptionBytes() {
        java.lang.Object ref = deliveryFrequencyDescription_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          deliveryFrequencyDescription_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string deliveryFrequencyDescription = 4;</code>
       */
      public Builder setDeliveryFrequencyDescription(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        deliveryFrequencyDescription_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string deliveryFrequencyDescription = 4;</code>
       */
      public Builder clearDeliveryFrequencyDescription() {
        bitField0_ = (bitField0_ & ~0x00000008);
        deliveryFrequencyDescription_ = getDefaultInstance().getDeliveryFrequencyDescription();
        onChanged();
        return this;
      }
      /**
       * <code>optional string deliveryFrequencyDescription = 4;</code>
       */
      public Builder setDeliveryFrequencyDescriptionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        deliveryFrequencyDescription_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:MagazineDetails)
    }

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

    // @@protoc_insertion_point(class_scope:MagazineDetails)
  }

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

    // optional int32 censoring = 1;
    /**
     * <code>optional int32 censoring = 1;</code>
     */
    boolean hasCensoring();
    /**
     * <code>optional int32 censoring = 1;</code>
     */
    int getCensoring();

    // optional int32 durationSec = 2;
    /**
     * <code>optional int32 durationSec = 2;</code>
     */
    boolean hasDurationSec();
    /**
     * <code>optional int32 durationSec = 2;</code>
     */
    int getDurationSec();

    // optional string originalReleaseDate = 3;
    /**
     * <code>optional string originalReleaseDate = 3;</code>
     */
    boolean hasOriginalReleaseDate();
    /**
     * <code>optional string originalReleaseDate = 3;</code>
     */
    java.lang.String getOriginalReleaseDate();
    /**
     * <code>optional string originalReleaseDate = 3;</code>
     */
    com.google.protobuf.ByteString
        getOriginalReleaseDateBytes();

    // optional string label = 4;
    /**
     * <code>optional string label = 4;</code>
     */
    boolean hasLabel();
    /**
     * <code>optional string label = 4;</code>
     */
    java.lang.String getLabel();
    /**
     * <code>optional string label = 4;</code>
     */
    com.google.protobuf.ByteString
        getLabelBytes();

    // repeated .ArtistDetails artist = 5;
    /**
     * <code>repeated .ArtistDetails artist = 5;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails> 
        getArtistList();
    /**
     * <code>repeated .ArtistDetails artist = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails getArtist(int index);
    /**
     * <code>repeated .ArtistDetails artist = 5;</code>
     */
    int getArtistCount();
    /**
     * <code>repeated .ArtistDetails artist = 5;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder> 
        getArtistOrBuilderList();
    /**
     * <code>repeated .ArtistDetails artist = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder getArtistOrBuilder(
        int index);

    // repeated string genre = 6;
    /**
     * <code>repeated string genre = 6;</code>
     */
    java.util.List<java.lang.String>
    getGenreList();
    /**
     * <code>repeated string genre = 6;</code>
     */
    int getGenreCount();
    /**
     * <code>repeated string genre = 6;</code>
     */
    java.lang.String getGenre(int index);
    /**
     * <code>repeated string genre = 6;</code>
     */
    com.google.protobuf.ByteString
        getGenreBytes(int index);

    // optional string releaseDate = 7;
    /**
     * <code>optional string releaseDate = 7;</code>
     */
    boolean hasReleaseDate();
    /**
     * <code>optional string releaseDate = 7;</code>
     */
    java.lang.String getReleaseDate();
    /**
     * <code>optional string releaseDate = 7;</code>
     */
    com.google.protobuf.ByteString
        getReleaseDateBytes();

    // repeated int32 releaseType = 8;
    /**
     * <code>repeated int32 releaseType = 8;</code>
     */
    java.util.List<java.lang.Integer> getReleaseTypeList();
    /**
     * <code>repeated int32 releaseType = 8;</code>
     */
    int getReleaseTypeCount();
    /**
     * <code>repeated int32 releaseType = 8;</code>
     */
    int getReleaseType(int index);
  }
  /**
   * Protobuf type {@code MusicDetails}
   */
  public static final class MusicDetails extends
      com.google.protobuf.GeneratedMessage
      implements MusicDetailsOrBuilder {
    // Use MusicDetails.newBuilder() to construct.
    private MusicDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private MusicDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public MusicDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private MusicDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              censoring_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              durationSec_ = input.readInt32();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              originalReleaseDate_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              label_ = input.readBytes();
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                artist_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails>();
                mutable_bitField0_ |= 0x00000010;
              }
              artist_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.PARSER, extensionRegistry));
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                genre_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000020;
              }
              genre_.add(input.readBytes());
              break;
            }
            case 58: {
              bitField0_ |= 0x00000010;
              releaseDate_ = input.readBytes();
              break;
            }
            case 64: {
              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                releaseType_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000080;
              }
              releaseType_.add(input.readInt32());
              break;
            }
            case 66: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080) && input.getBytesUntilLimit() > 0) {
                releaseType_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000080;
              }
              while (input.getBytesUntilLimit() > 0) {
                releaseType_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          artist_ = java.util.Collections.unmodifiableList(artist_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          genre_ = new com.google.protobuf.UnmodifiableLazyStringList(genre_);
        }
        if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
          releaseType_ = java.util.Collections.unmodifiableList(releaseType_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_MusicDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_MusicDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 censoring = 1;
    public static final int CENSORING_FIELD_NUMBER = 1;
    private int censoring_;
    /**
     * <code>optional int32 censoring = 1;</code>
     */
    public boolean hasCensoring() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 censoring = 1;</code>
     */
    public int getCensoring() {
      return censoring_;
    }

    // optional int32 durationSec = 2;
    public static final int DURATIONSEC_FIELD_NUMBER = 2;
    private int durationSec_;
    /**
     * <code>optional int32 durationSec = 2;</code>
     */
    public boolean hasDurationSec() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 durationSec = 2;</code>
     */
    public int getDurationSec() {
      return durationSec_;
    }

    // optional string originalReleaseDate = 3;
    public static final int ORIGINALRELEASEDATE_FIELD_NUMBER = 3;
    private java.lang.Object originalReleaseDate_;
    /**
     * <code>optional string originalReleaseDate = 3;</code>
     */
    public boolean hasOriginalReleaseDate() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string originalReleaseDate = 3;</code>
     */
    public java.lang.String getOriginalReleaseDate() {
      java.lang.Object ref = originalReleaseDate_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          originalReleaseDate_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string originalReleaseDate = 3;</code>
     */
    public com.google.protobuf.ByteString
        getOriginalReleaseDateBytes() {
      java.lang.Object ref = originalReleaseDate_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        originalReleaseDate_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string label = 4;
    public static final int LABEL_FIELD_NUMBER = 4;
    private java.lang.Object label_;
    /**
     * <code>optional string label = 4;</code>
     */
    public boolean hasLabel() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string label = 4;</code>
     */
    public java.lang.String getLabel() {
      java.lang.Object ref = label_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          label_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string label = 4;</code>
     */
    public com.google.protobuf.ByteString
        getLabelBytes() {
      java.lang.Object ref = label_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        label_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated .ArtistDetails artist = 5;
    public static final int ARTIST_FIELD_NUMBER = 5;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails> artist_;
    /**
     * <code>repeated .ArtistDetails artist = 5;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails> getArtistList() {
      return artist_;
    }
    /**
     * <code>repeated .ArtistDetails artist = 5;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder> 
        getArtistOrBuilderList() {
      return artist_;
    }
    /**
     * <code>repeated .ArtistDetails artist = 5;</code>
     */
    public int getArtistCount() {
      return artist_.size();
    }
    /**
     * <code>repeated .ArtistDetails artist = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails getArtist(int index) {
      return artist_.get(index);
    }
    /**
     * <code>repeated .ArtistDetails artist = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder getArtistOrBuilder(
        int index) {
      return artist_.get(index);
    }

    // repeated string genre = 6;
    public static final int GENRE_FIELD_NUMBER = 6;
    private com.google.protobuf.LazyStringList genre_;
    /**
     * <code>repeated string genre = 6;</code>
     */
    public java.util.List<java.lang.String>
        getGenreList() {
      return genre_;
    }
    /**
     * <code>repeated string genre = 6;</code>
     */
    public int getGenreCount() {
      return genre_.size();
    }
    /**
     * <code>repeated string genre = 6;</code>
     */
    public java.lang.String getGenre(int index) {
      return genre_.get(index);
    }
    /**
     * <code>repeated string genre = 6;</code>
     */
    public com.google.protobuf.ByteString
        getGenreBytes(int index) {
      return genre_.getByteString(index);
    }

    // optional string releaseDate = 7;
    public static final int RELEASEDATE_FIELD_NUMBER = 7;
    private java.lang.Object releaseDate_;
    /**
     * <code>optional string releaseDate = 7;</code>
     */
    public boolean hasReleaseDate() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string releaseDate = 7;</code>
     */
    public java.lang.String getReleaseDate() {
      java.lang.Object ref = releaseDate_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          releaseDate_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string releaseDate = 7;</code>
     */
    public com.google.protobuf.ByteString
        getReleaseDateBytes() {
      java.lang.Object ref = releaseDate_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        releaseDate_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated int32 releaseType = 8;
    public static final int RELEASETYPE_FIELD_NUMBER = 8;
    private java.util.List<java.lang.Integer> releaseType_;
    /**
     * <code>repeated int32 releaseType = 8;</code>
     */
    public java.util.List<java.lang.Integer>
        getReleaseTypeList() {
      return releaseType_;
    }
    /**
     * <code>repeated int32 releaseType = 8;</code>
     */
    public int getReleaseTypeCount() {
      return releaseType_.size();
    }
    /**
     * <code>repeated int32 releaseType = 8;</code>
     */
    public int getReleaseType(int index) {
      return releaseType_.get(index);
    }

    private void initFields() {
      censoring_ = 0;
      durationSec_ = 0;
      originalReleaseDate_ = "";
      label_ = "";
      artist_ = java.util.Collections.emptyList();
      genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      releaseDate_ = "";
      releaseType_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, censoring_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, durationSec_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getOriginalReleaseDateBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getLabelBytes());
      }
      for (int i = 0; i < artist_.size(); i++) {
        output.writeMessage(5, artist_.get(i));
      }
      for (int i = 0; i < genre_.size(); i++) {
        output.writeBytes(6, genre_.getByteString(i));
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(7, getReleaseDateBytes());
      }
      for (int i = 0; i < releaseType_.size(); i++) {
        output.writeInt32(8, releaseType_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, censoring_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, durationSec_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getOriginalReleaseDateBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getLabelBytes());
      }
      for (int i = 0; i < artist_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, artist_.get(i));
      }
      {
        int dataSize = 0;
        for (int i = 0; i < genre_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(genre_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getGenreList().size();
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getReleaseDateBytes());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < releaseType_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(releaseType_.get(i));
        }
        size += dataSize;
        size += 1 * getReleaseTypeList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code MusicDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.MusicDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_MusicDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_MusicDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        censoring_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        durationSec_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        originalReleaseDate_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        label_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        if (artistBuilder_ == null) {
          artist_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          artistBuilder_.clear();
        }
        genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        releaseDate_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        releaseType_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_MusicDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.censoring_ = censoring_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.durationSec_ = durationSec_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.originalReleaseDate_ = originalReleaseDate_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.label_ = label_;
        if (artistBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            artist_ = java.util.Collections.unmodifiableList(artist_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.artist_ = artist_;
        } else {
          result.artist_ = artistBuilder_.build();
        }
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          genre_ = new com.google.protobuf.UnmodifiableLazyStringList(
              genre_);
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.genre_ = genre_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000010;
        }
        result.releaseDate_ = releaseDate_;
        if (((bitField0_ & 0x00000080) == 0x00000080)) {
          releaseType_ = java.util.Collections.unmodifiableList(releaseType_);
          bitField0_ = (bitField0_ & ~0x00000080);
        }
        result.releaseType_ = releaseType_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.getDefaultInstance()) return this;
        if (other.hasCensoring()) {
          setCensoring(other.getCensoring());
        }
        if (other.hasDurationSec()) {
          setDurationSec(other.getDurationSec());
        }
        if (other.hasOriginalReleaseDate()) {
          bitField0_ |= 0x00000004;
          originalReleaseDate_ = other.originalReleaseDate_;
          onChanged();
        }
        if (other.hasLabel()) {
          bitField0_ |= 0x00000008;
          label_ = other.label_;
          onChanged();
        }
        if (artistBuilder_ == null) {
          if (!other.artist_.isEmpty()) {
            if (artist_.isEmpty()) {
              artist_ = other.artist_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureArtistIsMutable();
              artist_.addAll(other.artist_);
            }
            onChanged();
          }
        } else {
          if (!other.artist_.isEmpty()) {
            if (artistBuilder_.isEmpty()) {
              artistBuilder_.dispose();
              artistBuilder_ = null;
              artist_ = other.artist_;
              bitField0_ = (bitField0_ & ~0x00000010);
              artistBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getArtistFieldBuilder() : null;
            } else {
              artistBuilder_.addAllMessages(other.artist_);
            }
          }
        }
        if (!other.genre_.isEmpty()) {
          if (genre_.isEmpty()) {
            genre_ = other.genre_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureGenreIsMutable();
            genre_.addAll(other.genre_);
          }
          onChanged();
        }
        if (other.hasReleaseDate()) {
          bitField0_ |= 0x00000040;
          releaseDate_ = other.releaseDate_;
          onChanged();
        }
        if (!other.releaseType_.isEmpty()) {
          if (releaseType_.isEmpty()) {
            releaseType_ = other.releaseType_;
            bitField0_ = (bitField0_ & ~0x00000080);
          } else {
            ensureReleaseTypeIsMutable();
            releaseType_.addAll(other.releaseType_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 censoring = 1;
      private int censoring_ ;
      /**
       * <code>optional int32 censoring = 1;</code>
       */
      public boolean hasCensoring() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 censoring = 1;</code>
       */
      public int getCensoring() {
        return censoring_;
      }
      /**
       * <code>optional int32 censoring = 1;</code>
       */
      public Builder setCensoring(int value) {
        bitField0_ |= 0x00000001;
        censoring_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 censoring = 1;</code>
       */
      public Builder clearCensoring() {
        bitField0_ = (bitField0_ & ~0x00000001);
        censoring_ = 0;
        onChanged();
        return this;
      }

      // optional int32 durationSec = 2;
      private int durationSec_ ;
      /**
       * <code>optional int32 durationSec = 2;</code>
       */
      public boolean hasDurationSec() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 durationSec = 2;</code>
       */
      public int getDurationSec() {
        return durationSec_;
      }
      /**
       * <code>optional int32 durationSec = 2;</code>
       */
      public Builder setDurationSec(int value) {
        bitField0_ |= 0x00000002;
        durationSec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 durationSec = 2;</code>
       */
      public Builder clearDurationSec() {
        bitField0_ = (bitField0_ & ~0x00000002);
        durationSec_ = 0;
        onChanged();
        return this;
      }

      // optional string originalReleaseDate = 3;
      private java.lang.Object originalReleaseDate_ = "";
      /**
       * <code>optional string originalReleaseDate = 3;</code>
       */
      public boolean hasOriginalReleaseDate() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string originalReleaseDate = 3;</code>
       */
      public java.lang.String getOriginalReleaseDate() {
        java.lang.Object ref = originalReleaseDate_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          originalReleaseDate_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string originalReleaseDate = 3;</code>
       */
      public com.google.protobuf.ByteString
          getOriginalReleaseDateBytes() {
        java.lang.Object ref = originalReleaseDate_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          originalReleaseDate_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string originalReleaseDate = 3;</code>
       */
      public Builder setOriginalReleaseDate(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        originalReleaseDate_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string originalReleaseDate = 3;</code>
       */
      public Builder clearOriginalReleaseDate() {
        bitField0_ = (bitField0_ & ~0x00000004);
        originalReleaseDate_ = getDefaultInstance().getOriginalReleaseDate();
        onChanged();
        return this;
      }
      /**
       * <code>optional string originalReleaseDate = 3;</code>
       */
      public Builder setOriginalReleaseDateBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        originalReleaseDate_ = value;
        onChanged();
        return this;
      }

      // optional string label = 4;
      private java.lang.Object label_ = "";
      /**
       * <code>optional string label = 4;</code>
       */
      public boolean hasLabel() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string label = 4;</code>
       */
      public java.lang.String getLabel() {
        java.lang.Object ref = label_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          label_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string label = 4;</code>
       */
      public com.google.protobuf.ByteString
          getLabelBytes() {
        java.lang.Object ref = label_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          label_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string label = 4;</code>
       */
      public Builder setLabel(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        label_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string label = 4;</code>
       */
      public Builder clearLabel() {
        bitField0_ = (bitField0_ & ~0x00000008);
        label_ = getDefaultInstance().getLabel();
        onChanged();
        return this;
      }
      /**
       * <code>optional string label = 4;</code>
       */
      public Builder setLabelBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        label_ = value;
        onChanged();
        return this;
      }

      // repeated .ArtistDetails artist = 5;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails> artist_ =
        java.util.Collections.emptyList();
      private void ensureArtistIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          artist_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails>(artist_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder> artistBuilder_;

      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails> getArtistList() {
        if (artistBuilder_ == null) {
          return java.util.Collections.unmodifiableList(artist_);
        } else {
          return artistBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public int getArtistCount() {
        if (artistBuilder_ == null) {
          return artist_.size();
        } else {
          return artistBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails getArtist(int index) {
        if (artistBuilder_ == null) {
          return artist_.get(index);
        } else {
          return artistBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public Builder setArtist(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails value) {
        if (artistBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtistIsMutable();
          artist_.set(index, value);
          onChanged();
        } else {
          artistBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public Builder setArtist(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder builderForValue) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          artist_.set(index, builderForValue.build());
          onChanged();
        } else {
          artistBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public Builder addArtist(com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails value) {
        if (artistBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtistIsMutable();
          artist_.add(value);
          onChanged();
        } else {
          artistBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public Builder addArtist(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails value) {
        if (artistBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureArtistIsMutable();
          artist_.add(index, value);
          onChanged();
        } else {
          artistBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public Builder addArtist(
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder builderForValue) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          artist_.add(builderForValue.build());
          onChanged();
        } else {
          artistBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public Builder addArtist(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder builderForValue) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          artist_.add(index, builderForValue.build());
          onChanged();
        } else {
          artistBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public Builder addAllArtist(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails> values) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          super.addAll(values, artist_);
          onChanged();
        } else {
          artistBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public Builder clearArtist() {
        if (artistBuilder_ == null) {
          artist_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          artistBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public Builder removeArtist(int index) {
        if (artistBuilder_ == null) {
          ensureArtistIsMutable();
          artist_.remove(index);
          onChanged();
        } else {
          artistBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder getArtistBuilder(
          int index) {
        return getArtistFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder getArtistOrBuilder(
          int index) {
        if (artistBuilder_ == null) {
          return artist_.get(index);  } else {
          return artistBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder> 
           getArtistOrBuilderList() {
        if (artistBuilder_ != null) {
          return artistBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(artist_);
        }
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder addArtistBuilder() {
        return getArtistFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance());
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder addArtistBuilder(
          int index) {
        return getArtistFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance());
      }
      /**
       * <code>repeated .ArtistDetails artist = 5;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder> 
           getArtistBuilderList() {
        return getArtistFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder> 
          getArtistFieldBuilder() {
        if (artistBuilder_ == null) {
          artistBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder>(
                  artist_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          artist_ = null;
        }
        return artistBuilder_;
      }

      // repeated string genre = 6;
      private com.google.protobuf.LazyStringList genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureGenreIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          genre_ = new com.google.protobuf.LazyStringArrayList(genre_);
          bitField0_ |= 0x00000020;
         }
      }
      /**
       * <code>repeated string genre = 6;</code>
       */
      public java.util.List<java.lang.String>
          getGenreList() {
        return java.util.Collections.unmodifiableList(genre_);
      }
      /**
       * <code>repeated string genre = 6;</code>
       */
      public int getGenreCount() {
        return genre_.size();
      }
      /**
       * <code>repeated string genre = 6;</code>
       */
      public java.lang.String getGenre(int index) {
        return genre_.get(index);
      }
      /**
       * <code>repeated string genre = 6;</code>
       */
      public com.google.protobuf.ByteString
          getGenreBytes(int index) {
        return genre_.getByteString(index);
      }
      /**
       * <code>repeated string genre = 6;</code>
       */
      public Builder setGenre(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGenreIsMutable();
        genre_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 6;</code>
       */
      public Builder addGenre(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGenreIsMutable();
        genre_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 6;</code>
       */
      public Builder addAllGenre(
          java.lang.Iterable<java.lang.String> values) {
        ensureGenreIsMutable();
        super.addAll(values, genre_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 6;</code>
       */
      public Builder clearGenre() {
        genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 6;</code>
       */
      public Builder addGenreBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGenreIsMutable();
        genre_.add(value);
        onChanged();
        return this;
      }

      // optional string releaseDate = 7;
      private java.lang.Object releaseDate_ = "";
      /**
       * <code>optional string releaseDate = 7;</code>
       */
      public boolean hasReleaseDate() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string releaseDate = 7;</code>
       */
      public java.lang.String getReleaseDate() {
        java.lang.Object ref = releaseDate_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          releaseDate_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string releaseDate = 7;</code>
       */
      public com.google.protobuf.ByteString
          getReleaseDateBytes() {
        java.lang.Object ref = releaseDate_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          releaseDate_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string releaseDate = 7;</code>
       */
      public Builder setReleaseDate(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        releaseDate_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string releaseDate = 7;</code>
       */
      public Builder clearReleaseDate() {
        bitField0_ = (bitField0_ & ~0x00000040);
        releaseDate_ = getDefaultInstance().getReleaseDate();
        onChanged();
        return this;
      }
      /**
       * <code>optional string releaseDate = 7;</code>
       */
      public Builder setReleaseDateBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        releaseDate_ = value;
        onChanged();
        return this;
      }

      // repeated int32 releaseType = 8;
      private java.util.List<java.lang.Integer> releaseType_ = java.util.Collections.emptyList();
      private void ensureReleaseTypeIsMutable() {
        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
          releaseType_ = new java.util.ArrayList<java.lang.Integer>(releaseType_);
          bitField0_ |= 0x00000080;
         }
      }
      /**
       * <code>repeated int32 releaseType = 8;</code>
       */
      public java.util.List<java.lang.Integer>
          getReleaseTypeList() {
        return java.util.Collections.unmodifiableList(releaseType_);
      }
      /**
       * <code>repeated int32 releaseType = 8;</code>
       */
      public int getReleaseTypeCount() {
        return releaseType_.size();
      }
      /**
       * <code>repeated int32 releaseType = 8;</code>
       */
      public int getReleaseType(int index) {
        return releaseType_.get(index);
      }
      /**
       * <code>repeated int32 releaseType = 8;</code>
       */
      public Builder setReleaseType(
          int index, int value) {
        ensureReleaseTypeIsMutable();
        releaseType_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 releaseType = 8;</code>
       */
      public Builder addReleaseType(int value) {
        ensureReleaseTypeIsMutable();
        releaseType_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 releaseType = 8;</code>
       */
      public Builder addAllReleaseType(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureReleaseTypeIsMutable();
        super.addAll(values, releaseType_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 releaseType = 8;</code>
       */
      public Builder clearReleaseType() {
        releaseType_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000080);
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:MusicDetails)
    }

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

    // @@protoc_insertion_point(class_scope:MusicDetails)
  }

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

    // optional string name = 1;
    /**
     * <code>optional string name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 1;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 1;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // optional .MusicDetails details = 2;
    /**
     * <code>optional .MusicDetails details = 2;</code>
     */
    boolean hasDetails();
    /**
     * <code>optional .MusicDetails details = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails getDetails();
    /**
     * <code>optional .MusicDetails details = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.MusicDetailsOrBuilder getDetailsOrBuilder();

    // optional string albumName = 3;
    /**
     * <code>optional string albumName = 3;</code>
     */
    boolean hasAlbumName();
    /**
     * <code>optional string albumName = 3;</code>
     */
    java.lang.String getAlbumName();
    /**
     * <code>optional string albumName = 3;</code>
     */
    com.google.protobuf.ByteString
        getAlbumNameBytes();

    // optional int32 trackNumber = 4;
    /**
     * <code>optional int32 trackNumber = 4;</code>
     */
    boolean hasTrackNumber();
    /**
     * <code>optional int32 trackNumber = 4;</code>
     */
    int getTrackNumber();

    // optional string previewUrl = 5;
    /**
     * <code>optional string previewUrl = 5;</code>
     */
    boolean hasPreviewUrl();
    /**
     * <code>optional string previewUrl = 5;</code>
     */
    java.lang.String getPreviewUrl();
    /**
     * <code>optional string previewUrl = 5;</code>
     */
    com.google.protobuf.ByteString
        getPreviewUrlBytes();

    // optional .ArtistDetails displayArtist = 6;
    /**
     * <code>optional .ArtistDetails displayArtist = 6;</code>
     */
    boolean hasDisplayArtist();
    /**
     * <code>optional .ArtistDetails displayArtist = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails getDisplayArtist();
    /**
     * <code>optional .ArtistDetails displayArtist = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder getDisplayArtistOrBuilder();
  }
  /**
   * Protobuf type {@code SongDetails}
   */
  public static final class SongDetails extends
      com.google.protobuf.GeneratedMessage
      implements SongDetailsOrBuilder {
    // Use SongDetails.newBuilder() to construct.
    private SongDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SongDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public SongDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SongDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              name_ = input.readBytes();
              break;
            }
            case 18: {
              com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = details_.toBuilder();
              }
              details_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(details_);
                details_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              albumName_ = input.readBytes();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              trackNumber_ = input.readInt32();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              previewUrl_ = input.readBytes();
              break;
            }
            case 50: {
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = displayArtist_.toBuilder();
              }
              displayArtist_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(displayArtist_);
                displayArtist_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SongDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SongDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .MusicDetails details = 2;
    public static final int DETAILS_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails details_;
    /**
     * <code>optional .MusicDetails details = 2;</code>
     */
    public boolean hasDetails() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .MusicDetails details = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails getDetails() {
      return details_;
    }
    /**
     * <code>optional .MusicDetails details = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.MusicDetailsOrBuilder getDetailsOrBuilder() {
      return details_;
    }

    // optional string albumName = 3;
    public static final int ALBUMNAME_FIELD_NUMBER = 3;
    private java.lang.Object albumName_;
    /**
     * <code>optional string albumName = 3;</code>
     */
    public boolean hasAlbumName() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string albumName = 3;</code>
     */
    public java.lang.String getAlbumName() {
      java.lang.Object ref = albumName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          albumName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string albumName = 3;</code>
     */
    public com.google.protobuf.ByteString
        getAlbumNameBytes() {
      java.lang.Object ref = albumName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        albumName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 trackNumber = 4;
    public static final int TRACKNUMBER_FIELD_NUMBER = 4;
    private int trackNumber_;
    /**
     * <code>optional int32 trackNumber = 4;</code>
     */
    public boolean hasTrackNumber() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int32 trackNumber = 4;</code>
     */
    public int getTrackNumber() {
      return trackNumber_;
    }

    // optional string previewUrl = 5;
    public static final int PREVIEWURL_FIELD_NUMBER = 5;
    private java.lang.Object previewUrl_;
    /**
     * <code>optional string previewUrl = 5;</code>
     */
    public boolean hasPreviewUrl() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string previewUrl = 5;</code>
     */
    public java.lang.String getPreviewUrl() {
      java.lang.Object ref = previewUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          previewUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string previewUrl = 5;</code>
     */
    public com.google.protobuf.ByteString
        getPreviewUrlBytes() {
      java.lang.Object ref = previewUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        previewUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .ArtistDetails displayArtist = 6;
    public static final int DISPLAYARTIST_FIELD_NUMBER = 6;
    private com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails displayArtist_;
    /**
     * <code>optional .ArtistDetails displayArtist = 6;</code>
     */
    public boolean hasDisplayArtist() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .ArtistDetails displayArtist = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails getDisplayArtist() {
      return displayArtist_;
    }
    /**
     * <code>optional .ArtistDetails displayArtist = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder getDisplayArtistOrBuilder() {
      return displayArtist_;
    }

    private void initFields() {
      name_ = "";
      details_ = com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.getDefaultInstance();
      albumName_ = "";
      trackNumber_ = 0;
      previewUrl_ = "";
      displayArtist_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, details_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getAlbumNameBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, trackNumber_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getPreviewUrlBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(6, displayArtist_);
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, details_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getAlbumNameBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, trackNumber_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getPreviewUrlBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, displayArtist_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.SongDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SongDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SongDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SongDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SongDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SongDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SongDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SongDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SongDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SongDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.SongDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code SongDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.SongDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SongDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SongDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        if (detailsBuilder_ == null) {
          details_ = com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.getDefaultInstance();
        } else {
          detailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        albumName_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        trackNumber_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        previewUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        if (displayArtistBuilder_ == null) {
          displayArtist_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance();
        } else {
          displayArtistBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SongDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.SongDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.SongDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.SongDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.SongDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.SongDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.SongDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (detailsBuilder_ == null) {
          result.details_ = details_;
        } else {
          result.details_ = detailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.albumName_ = albumName_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.trackNumber_ = trackNumber_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.previewUrl_ = previewUrl_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (displayArtistBuilder_ == null) {
          result.displayArtist_ = displayArtist_;
        } else {
          result.displayArtist_ = displayArtistBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.SongDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.SongDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.SongDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.SongDetails.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasDetails()) {
          mergeDetails(other.getDetails());
        }
        if (other.hasAlbumName()) {
          bitField0_ |= 0x00000004;
          albumName_ = other.albumName_;
          onChanged();
        }
        if (other.hasTrackNumber()) {
          setTrackNumber(other.getTrackNumber());
        }
        if (other.hasPreviewUrl()) {
          bitField0_ |= 0x00000010;
          previewUrl_ = other.previewUrl_;
          onChanged();
        }
        if (other.hasDisplayArtist()) {
          mergeDisplayArtist(other.getDisplayArtist());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string name = 1;
      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 1;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      // optional .MusicDetails details = 2;
      private com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails details_ = com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails, com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.MusicDetailsOrBuilder> detailsBuilder_;
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public boolean hasDetails() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails getDetails() {
        if (detailsBuilder_ == null) {
          return details_;
        } else {
          return detailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public Builder setDetails(com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails value) {
        if (detailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          details_ = value;
          onChanged();
        } else {
          detailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public Builder setDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.Builder builderForValue) {
        if (detailsBuilder_ == null) {
          details_ = builderForValue.build();
          onChanged();
        } else {
          detailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public Builder mergeDetails(com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails value) {
        if (detailsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              details_ != com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.getDefaultInstance()) {
            details_ =
              com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.newBuilder(details_).mergeFrom(value).buildPartial();
          } else {
            details_ = value;
          }
          onChanged();
        } else {
          detailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public Builder clearDetails() {
        if (detailsBuilder_ == null) {
          details_ = com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.getDefaultInstance();
          onChanged();
        } else {
          detailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.Builder getDetailsBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.MusicDetailsOrBuilder getDetailsOrBuilder() {
        if (detailsBuilder_ != null) {
          return detailsBuilder_.getMessageOrBuilder();
        } else {
          return details_;
        }
      }
      /**
       * <code>optional .MusicDetails details = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails, com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.MusicDetailsOrBuilder> 
          getDetailsFieldBuilder() {
        if (detailsBuilder_ == null) {
          detailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails, com.akdeniz.googleplaycrawler.GooglePlay.MusicDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.MusicDetailsOrBuilder>(
                  details_,
                  getParentForChildren(),
                  isClean());
          details_ = null;
        }
        return detailsBuilder_;
      }

      // optional string albumName = 3;
      private java.lang.Object albumName_ = "";
      /**
       * <code>optional string albumName = 3;</code>
       */
      public boolean hasAlbumName() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string albumName = 3;</code>
       */
      public java.lang.String getAlbumName() {
        java.lang.Object ref = albumName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          albumName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string albumName = 3;</code>
       */
      public com.google.protobuf.ByteString
          getAlbumNameBytes() {
        java.lang.Object ref = albumName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          albumName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string albumName = 3;</code>
       */
      public Builder setAlbumName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        albumName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string albumName = 3;</code>
       */
      public Builder clearAlbumName() {
        bitField0_ = (bitField0_ & ~0x00000004);
        albumName_ = getDefaultInstance().getAlbumName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string albumName = 3;</code>
       */
      public Builder setAlbumNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        albumName_ = value;
        onChanged();
        return this;
      }

      // optional int32 trackNumber = 4;
      private int trackNumber_ ;
      /**
       * <code>optional int32 trackNumber = 4;</code>
       */
      public boolean hasTrackNumber() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int32 trackNumber = 4;</code>
       */
      public int getTrackNumber() {
        return trackNumber_;
      }
      /**
       * <code>optional int32 trackNumber = 4;</code>
       */
      public Builder setTrackNumber(int value) {
        bitField0_ |= 0x00000008;
        trackNumber_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 trackNumber = 4;</code>
       */
      public Builder clearTrackNumber() {
        bitField0_ = (bitField0_ & ~0x00000008);
        trackNumber_ = 0;
        onChanged();
        return this;
      }

      // optional string previewUrl = 5;
      private java.lang.Object previewUrl_ = "";
      /**
       * <code>optional string previewUrl = 5;</code>
       */
      public boolean hasPreviewUrl() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string previewUrl = 5;</code>
       */
      public java.lang.String getPreviewUrl() {
        java.lang.Object ref = previewUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          previewUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string previewUrl = 5;</code>
       */
      public com.google.protobuf.ByteString
          getPreviewUrlBytes() {
        java.lang.Object ref = previewUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          previewUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string previewUrl = 5;</code>
       */
      public Builder setPreviewUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        previewUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string previewUrl = 5;</code>
       */
      public Builder clearPreviewUrl() {
        bitField0_ = (bitField0_ & ~0x00000010);
        previewUrl_ = getDefaultInstance().getPreviewUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string previewUrl = 5;</code>
       */
      public Builder setPreviewUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        previewUrl_ = value;
        onChanged();
        return this;
      }

      // optional .ArtistDetails displayArtist = 6;
      private com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails displayArtist_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder> displayArtistBuilder_;
      /**
       * <code>optional .ArtistDetails displayArtist = 6;</code>
       */
      public boolean hasDisplayArtist() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails getDisplayArtist() {
        if (displayArtistBuilder_ == null) {
          return displayArtist_;
        } else {
          return displayArtistBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 6;</code>
       */
      public Builder setDisplayArtist(com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails value) {
        if (displayArtistBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          displayArtist_ = value;
          onChanged();
        } else {
          displayArtistBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 6;</code>
       */
      public Builder setDisplayArtist(
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder builderForValue) {
        if (displayArtistBuilder_ == null) {
          displayArtist_ = builderForValue.build();
          onChanged();
        } else {
          displayArtistBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 6;</code>
       */
      public Builder mergeDisplayArtist(com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails value) {
        if (displayArtistBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              displayArtist_ != com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance()) {
            displayArtist_ =
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.newBuilder(displayArtist_).mergeFrom(value).buildPartial();
          } else {
            displayArtist_ = value;
          }
          onChanged();
        } else {
          displayArtistBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 6;</code>
       */
      public Builder clearDisplayArtist() {
        if (displayArtistBuilder_ == null) {
          displayArtist_ = com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.getDefaultInstance();
          onChanged();
        } else {
          displayArtistBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder getDisplayArtistBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getDisplayArtistFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder getDisplayArtistOrBuilder() {
        if (displayArtistBuilder_ != null) {
          return displayArtistBuilder_.getMessageOrBuilder();
        } else {
          return displayArtist_;
        }
      }
      /**
       * <code>optional .ArtistDetails displayArtist = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder> 
          getDisplayArtistFieldBuilder() {
        if (displayArtistBuilder_ == null) {
          displayArtistBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ArtistDetailsOrBuilder>(
                  displayArtist_,
                  getParentForChildren(),
                  isClean());
          displayArtist_ = null;
        }
        return displayArtistBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:SongDetails)
    }

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

    // @@protoc_insertion_point(class_scope:SongDetails)
  }

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

    // optional int32 subscriptionPeriod = 1;
    /**
     * <code>optional int32 subscriptionPeriod = 1;</code>
     */
    boolean hasSubscriptionPeriod();
    /**
     * <code>optional int32 subscriptionPeriod = 1;</code>
     */
    int getSubscriptionPeriod();
  }
  /**
   * Protobuf type {@code SubscriptionDetails}
   */
  public static final class SubscriptionDetails extends
      com.google.protobuf.GeneratedMessage
      implements SubscriptionDetailsOrBuilder {
    // Use SubscriptionDetails.newBuilder() to construct.
    private SubscriptionDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SubscriptionDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public SubscriptionDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

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

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SubscriptionDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 subscriptionPeriod = 1;
    public static final int SUBSCRIPTIONPERIOD_FIELD_NUMBER = 1;
    private int subscriptionPeriod_;
    /**
     * <code>optional int32 subscriptionPeriod = 1;</code>
     */
    public boolean hasSubscriptionPeriod() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 subscriptionPeriod = 1;</code>
     */
    public int getSubscriptionPeriod() {
      return subscriptionPeriod_;
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

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

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

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

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code SubscriptionDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SubscriptionDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SubscriptionDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

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

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SubscriptionDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.subscriptionPeriod_ = subscriptionPeriod_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.SubscriptionDetails.getDefaultInstance()) return this;
        if (other.hasSubscriptionPeriod()) {
          setSubscriptionPeriod(other.getSubscriptionPeriod());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional int32 subscriptionPeriod = 1;
      private int subscriptionPeriod_ ;
      /**
       * <code>optional int32 subscriptionPeriod = 1;</code>
       */
      public boolean hasSubscriptionPeriod() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 subscriptionPeriod = 1;</code>
       */
      public int getSubscriptionPeriod() {
        return subscriptionPeriod_;
      }
      /**
       * <code>optional int32 subscriptionPeriod = 1;</code>
       */
      public Builder setSubscriptionPeriod(int value) {
        bitField0_ |= 0x00000001;
        subscriptionPeriod_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 subscriptionPeriod = 1;</code>
       */
      public Builder clearSubscriptionPeriod() {
        bitField0_ = (bitField0_ & ~0x00000001);
        subscriptionPeriod_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:SubscriptionDetails)
    }

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

    // @@protoc_insertion_point(class_scope:SubscriptionDetails)
  }

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

    // optional string trailerId = 1;
    /**
     * <code>optional string trailerId = 1;</code>
     */
    boolean hasTrailerId();
    /**
     * <code>optional string trailerId = 1;</code>
     */
    java.lang.String getTrailerId();
    /**
     * <code>optional string trailerId = 1;</code>
     */
    com.google.protobuf.ByteString
        getTrailerIdBytes();

    // optional string title = 2;
    /**
     * <code>optional string title = 2;</code>
     */
    boolean hasTitle();
    /**
     * <code>optional string title = 2;</code>
     */
    java.lang.String getTitle();
    /**
     * <code>optional string title = 2;</code>
     */
    com.google.protobuf.ByteString
        getTitleBytes();

    // optional string thumbnailUrl = 3;
    /**
     * <code>optional string thumbnailUrl = 3;</code>
     */
    boolean hasThumbnailUrl();
    /**
     * <code>optional string thumbnailUrl = 3;</code>
     */
    java.lang.String getThumbnailUrl();
    /**
     * <code>optional string thumbnailUrl = 3;</code>
     */
    com.google.protobuf.ByteString
        getThumbnailUrlBytes();

    // optional string watchUrl = 4;
    /**
     * <code>optional string watchUrl = 4;</code>
     */
    boolean hasWatchUrl();
    /**
     * <code>optional string watchUrl = 4;</code>
     */
    java.lang.String getWatchUrl();
    /**
     * <code>optional string watchUrl = 4;</code>
     */
    com.google.protobuf.ByteString
        getWatchUrlBytes();

    // optional string duration = 5;
    /**
     * <code>optional string duration = 5;</code>
     */
    boolean hasDuration();
    /**
     * <code>optional string duration = 5;</code>
     */
    java.lang.String getDuration();
    /**
     * <code>optional string duration = 5;</code>
     */
    com.google.protobuf.ByteString
        getDurationBytes();
  }
  /**
   * Protobuf type {@code Trailer}
   */
  public static final class Trailer extends
      com.google.protobuf.GeneratedMessage
      implements TrailerOrBuilder {
    // Use Trailer.newBuilder() to construct.
    private Trailer(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Trailer(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public Trailer getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Trailer(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              trailerId_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              title_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              thumbnailUrl_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              watchUrl_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              duration_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Trailer_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Trailer_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Trailer.class, com.akdeniz.googleplaycrawler.GooglePlay.Trailer.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string trailerId = 1;
    public static final int TRAILERID_FIELD_NUMBER = 1;
    private java.lang.Object trailerId_;
    /**
     * <code>optional string trailerId = 1;</code>
     */
    public boolean hasTrailerId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string trailerId = 1;</code>
     */
    public java.lang.String getTrailerId() {
      java.lang.Object ref = trailerId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          trailerId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string trailerId = 1;</code>
     */
    public com.google.protobuf.ByteString
        getTrailerIdBytes() {
      java.lang.Object ref = trailerId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        trailerId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string title = 2;
    public static final int TITLE_FIELD_NUMBER = 2;
    private java.lang.Object title_;
    /**
     * <code>optional string title = 2;</code>
     */
    public boolean hasTitle() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string title = 2;</code>
     */
    public java.lang.String getTitle() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          title_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string title = 2;</code>
     */
    public com.google.protobuf.ByteString
        getTitleBytes() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        title_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string thumbnailUrl = 3;
    public static final int THUMBNAILURL_FIELD_NUMBER = 3;
    private java.lang.Object thumbnailUrl_;
    /**
     * <code>optional string thumbnailUrl = 3;</code>
     */
    public boolean hasThumbnailUrl() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string thumbnailUrl = 3;</code>
     */
    public java.lang.String getThumbnailUrl() {
      java.lang.Object ref = thumbnailUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          thumbnailUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string thumbnailUrl = 3;</code>
     */
    public com.google.protobuf.ByteString
        getThumbnailUrlBytes() {
      java.lang.Object ref = thumbnailUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        thumbnailUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string watchUrl = 4;
    public static final int WATCHURL_FIELD_NUMBER = 4;
    private java.lang.Object watchUrl_;
    /**
     * <code>optional string watchUrl = 4;</code>
     */
    public boolean hasWatchUrl() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string watchUrl = 4;</code>
     */
    public java.lang.String getWatchUrl() {
      java.lang.Object ref = watchUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          watchUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string watchUrl = 4;</code>
     */
    public com.google.protobuf.ByteString
        getWatchUrlBytes() {
      java.lang.Object ref = watchUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        watchUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string duration = 5;
    public static final int DURATION_FIELD_NUMBER = 5;
    private java.lang.Object duration_;
    /**
     * <code>optional string duration = 5;</code>
     */
    public boolean hasDuration() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string duration = 5;</code>
     */
    public java.lang.String getDuration() {
      java.lang.Object ref = duration_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          duration_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string duration = 5;</code>
     */
    public com.google.protobuf.ByteString
        getDurationBytes() {
      java.lang.Object ref = duration_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        duration_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      trailerId_ = "";
      title_ = "";
      thumbnailUrl_ = "";
      watchUrl_ = "";
      duration_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getTrailerIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getTitleBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getThumbnailUrlBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getWatchUrlBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getDurationBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getTrailerIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getTitleBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getThumbnailUrlBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getWatchUrlBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getDurationBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.Trailer parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Trailer parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Trailer parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Trailer parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Trailer parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Trailer parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Trailer parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Trailer parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Trailer parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Trailer parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Trailer prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Trailer}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.TrailerOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Trailer_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Trailer_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Trailer.class, com.akdeniz.googleplaycrawler.GooglePlay.Trailer.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Trailer.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        trailerId_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        title_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        thumbnailUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        watchUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        duration_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Trailer_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Trailer getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Trailer.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Trailer build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Trailer result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Trailer buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Trailer result = new com.akdeniz.googleplaycrawler.GooglePlay.Trailer(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.trailerId_ = trailerId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.title_ = title_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.thumbnailUrl_ = thumbnailUrl_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.watchUrl_ = watchUrl_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.duration_ = duration_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Trailer) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Trailer)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Trailer other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Trailer.getDefaultInstance()) return this;
        if (other.hasTrailerId()) {
          bitField0_ |= 0x00000001;
          trailerId_ = other.trailerId_;
          onChanged();
        }
        if (other.hasTitle()) {
          bitField0_ |= 0x00000002;
          title_ = other.title_;
          onChanged();
        }
        if (other.hasThumbnailUrl()) {
          bitField0_ |= 0x00000004;
          thumbnailUrl_ = other.thumbnailUrl_;
          onChanged();
        }
        if (other.hasWatchUrl()) {
          bitField0_ |= 0x00000008;
          watchUrl_ = other.watchUrl_;
          onChanged();
        }
        if (other.hasDuration()) {
          bitField0_ |= 0x00000010;
          duration_ = other.duration_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string trailerId = 1;
      private java.lang.Object trailerId_ = "";
      /**
       * <code>optional string trailerId = 1;</code>
       */
      public boolean hasTrailerId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string trailerId = 1;</code>
       */
      public java.lang.String getTrailerId() {
        java.lang.Object ref = trailerId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          trailerId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string trailerId = 1;</code>
       */
      public com.google.protobuf.ByteString
          getTrailerIdBytes() {
        java.lang.Object ref = trailerId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          trailerId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string trailerId = 1;</code>
       */
      public Builder setTrailerId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        trailerId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string trailerId = 1;</code>
       */
      public Builder clearTrailerId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        trailerId_ = getDefaultInstance().getTrailerId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string trailerId = 1;</code>
       */
      public Builder setTrailerIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        trailerId_ = value;
        onChanged();
        return this;
      }

      // optional string title = 2;
      private java.lang.Object title_ = "";
      /**
       * <code>optional string title = 2;</code>
       */
      public boolean hasTitle() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string title = 2;</code>
       */
      public java.lang.String getTitle() {
        java.lang.Object ref = title_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          title_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string title = 2;</code>
       */
      public com.google.protobuf.ByteString
          getTitleBytes() {
        java.lang.Object ref = title_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          title_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string title = 2;</code>
       */
      public Builder setTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        title_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 2;</code>
       */
      public Builder clearTitle() {
        bitField0_ = (bitField0_ & ~0x00000002);
        title_ = getDefaultInstance().getTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 2;</code>
       */
      public Builder setTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        title_ = value;
        onChanged();
        return this;
      }

      // optional string thumbnailUrl = 3;
      private java.lang.Object thumbnailUrl_ = "";
      /**
       * <code>optional string thumbnailUrl = 3;</code>
       */
      public boolean hasThumbnailUrl() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string thumbnailUrl = 3;</code>
       */
      public java.lang.String getThumbnailUrl() {
        java.lang.Object ref = thumbnailUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          thumbnailUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string thumbnailUrl = 3;</code>
       */
      public com.google.protobuf.ByteString
          getThumbnailUrlBytes() {
        java.lang.Object ref = thumbnailUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          thumbnailUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string thumbnailUrl = 3;</code>
       */
      public Builder setThumbnailUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        thumbnailUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string thumbnailUrl = 3;</code>
       */
      public Builder clearThumbnailUrl() {
        bitField0_ = (bitField0_ & ~0x00000004);
        thumbnailUrl_ = getDefaultInstance().getThumbnailUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string thumbnailUrl = 3;</code>
       */
      public Builder setThumbnailUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        thumbnailUrl_ = value;
        onChanged();
        return this;
      }

      // optional string watchUrl = 4;
      private java.lang.Object watchUrl_ = "";
      /**
       * <code>optional string watchUrl = 4;</code>
       */
      public boolean hasWatchUrl() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string watchUrl = 4;</code>
       */
      public java.lang.String getWatchUrl() {
        java.lang.Object ref = watchUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          watchUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string watchUrl = 4;</code>
       */
      public com.google.protobuf.ByteString
          getWatchUrlBytes() {
        java.lang.Object ref = watchUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          watchUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string watchUrl = 4;</code>
       */
      public Builder setWatchUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        watchUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string watchUrl = 4;</code>
       */
      public Builder clearWatchUrl() {
        bitField0_ = (bitField0_ & ~0x00000008);
        watchUrl_ = getDefaultInstance().getWatchUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string watchUrl = 4;</code>
       */
      public Builder setWatchUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        watchUrl_ = value;
        onChanged();
        return this;
      }

      // optional string duration = 5;
      private java.lang.Object duration_ = "";
      /**
       * <code>optional string duration = 5;</code>
       */
      public boolean hasDuration() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string duration = 5;</code>
       */
      public java.lang.String getDuration() {
        java.lang.Object ref = duration_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          duration_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string duration = 5;</code>
       */
      public com.google.protobuf.ByteString
          getDurationBytes() {
        java.lang.Object ref = duration_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          duration_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string duration = 5;</code>
       */
      public Builder setDuration(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        duration_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string duration = 5;</code>
       */
      public Builder clearDuration() {
        bitField0_ = (bitField0_ & ~0x00000010);
        duration_ = getDefaultInstance().getDuration();
        onChanged();
        return this;
      }
      /**
       * <code>optional string duration = 5;</code>
       */
      public Builder setDurationBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        duration_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Trailer)
    }

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

    // @@protoc_insertion_point(class_scope:Trailer)
  }

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

    // optional string parentDetailsUrl = 1;
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    boolean hasParentDetailsUrl();
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    java.lang.String getParentDetailsUrl();
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    com.google.protobuf.ByteString
        getParentDetailsUrlBytes();

    // optional int32 episodeIndex = 2;
    /**
     * <code>optional int32 episodeIndex = 2;</code>
     */
    boolean hasEpisodeIndex();
    /**
     * <code>optional int32 episodeIndex = 2;</code>
     */
    int getEpisodeIndex();

    // optional string releaseDate = 3;
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    boolean hasReleaseDate();
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    java.lang.String getReleaseDate();
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    com.google.protobuf.ByteString
        getReleaseDateBytes();
  }
  /**
   * Protobuf type {@code TvEpisodeDetails}
   */
  public static final class TvEpisodeDetails extends
      com.google.protobuf.GeneratedMessage
      implements TvEpisodeDetailsOrBuilder {
    // Use TvEpisodeDetails.newBuilder() to construct.
    private TvEpisodeDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TvEpisodeDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public TvEpisodeDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TvEpisodeDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              parentDetailsUrl_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              episodeIndex_ = input.readInt32();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              releaseDate_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvEpisodeDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvEpisodeDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string parentDetailsUrl = 1;
    public static final int PARENTDETAILSURL_FIELD_NUMBER = 1;
    private java.lang.Object parentDetailsUrl_;
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    public boolean hasParentDetailsUrl() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    public java.lang.String getParentDetailsUrl() {
      java.lang.Object ref = parentDetailsUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          parentDetailsUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    public com.google.protobuf.ByteString
        getParentDetailsUrlBytes() {
      java.lang.Object ref = parentDetailsUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        parentDetailsUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 episodeIndex = 2;
    public static final int EPISODEINDEX_FIELD_NUMBER = 2;
    private int episodeIndex_;
    /**
     * <code>optional int32 episodeIndex = 2;</code>
     */
    public boolean hasEpisodeIndex() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 episodeIndex = 2;</code>
     */
    public int getEpisodeIndex() {
      return episodeIndex_;
    }

    // optional string releaseDate = 3;
    public static final int RELEASEDATE_FIELD_NUMBER = 3;
    private java.lang.Object releaseDate_;
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    public boolean hasReleaseDate() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    public java.lang.String getReleaseDate() {
      java.lang.Object ref = releaseDate_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          releaseDate_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    public com.google.protobuf.ByteString
        getReleaseDateBytes() {
      java.lang.Object ref = releaseDate_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        releaseDate_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

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

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getParentDetailsUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, episodeIndex_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getReleaseDateBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getParentDetailsUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, episodeIndex_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getReleaseDateBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code TvEpisodeDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvEpisodeDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvEpisodeDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        parentDetailsUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        episodeIndex_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        releaseDate_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvEpisodeDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.parentDetailsUrl_ = parentDetailsUrl_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.episodeIndex_ = episodeIndex_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.releaseDate_ = releaseDate_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.TvEpisodeDetails.getDefaultInstance()) return this;
        if (other.hasParentDetailsUrl()) {
          bitField0_ |= 0x00000001;
          parentDetailsUrl_ = other.parentDetailsUrl_;
          onChanged();
        }
        if (other.hasEpisodeIndex()) {
          setEpisodeIndex(other.getEpisodeIndex());
        }
        if (other.hasReleaseDate()) {
          bitField0_ |= 0x00000004;
          releaseDate_ = other.releaseDate_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string parentDetailsUrl = 1;
      private java.lang.Object parentDetailsUrl_ = "";
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public boolean hasParentDetailsUrl() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public java.lang.String getParentDetailsUrl() {
        java.lang.Object ref = parentDetailsUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          parentDetailsUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public com.google.protobuf.ByteString
          getParentDetailsUrlBytes() {
        java.lang.Object ref = parentDetailsUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          parentDetailsUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public Builder setParentDetailsUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        parentDetailsUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public Builder clearParentDetailsUrl() {
        bitField0_ = (bitField0_ & ~0x00000001);
        parentDetailsUrl_ = getDefaultInstance().getParentDetailsUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public Builder setParentDetailsUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        parentDetailsUrl_ = value;
        onChanged();
        return this;
      }

      // optional int32 episodeIndex = 2;
      private int episodeIndex_ ;
      /**
       * <code>optional int32 episodeIndex = 2;</code>
       */
      public boolean hasEpisodeIndex() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 episodeIndex = 2;</code>
       */
      public int getEpisodeIndex() {
        return episodeIndex_;
      }
      /**
       * <code>optional int32 episodeIndex = 2;</code>
       */
      public Builder setEpisodeIndex(int value) {
        bitField0_ |= 0x00000002;
        episodeIndex_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 episodeIndex = 2;</code>
       */
      public Builder clearEpisodeIndex() {
        bitField0_ = (bitField0_ & ~0x00000002);
        episodeIndex_ = 0;
        onChanged();
        return this;
      }

      // optional string releaseDate = 3;
      private java.lang.Object releaseDate_ = "";
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public boolean hasReleaseDate() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public java.lang.String getReleaseDate() {
        java.lang.Object ref = releaseDate_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          releaseDate_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public com.google.protobuf.ByteString
          getReleaseDateBytes() {
        java.lang.Object ref = releaseDate_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          releaseDate_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public Builder setReleaseDate(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        releaseDate_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public Builder clearReleaseDate() {
        bitField0_ = (bitField0_ & ~0x00000004);
        releaseDate_ = getDefaultInstance().getReleaseDate();
        onChanged();
        return this;
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public Builder setReleaseDateBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        releaseDate_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:TvEpisodeDetails)
    }

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

    // @@protoc_insertion_point(class_scope:TvEpisodeDetails)
  }

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

    // optional string parentDetailsUrl = 1;
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    boolean hasParentDetailsUrl();
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    java.lang.String getParentDetailsUrl();
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    com.google.protobuf.ByteString
        getParentDetailsUrlBytes();

    // optional int32 seasonIndex = 2;
    /**
     * <code>optional int32 seasonIndex = 2;</code>
     */
    boolean hasSeasonIndex();
    /**
     * <code>optional int32 seasonIndex = 2;</code>
     */
    int getSeasonIndex();

    // optional string releaseDate = 3;
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    boolean hasReleaseDate();
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    java.lang.String getReleaseDate();
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    com.google.protobuf.ByteString
        getReleaseDateBytes();

    // optional string broadcaster = 4;
    /**
     * <code>optional string broadcaster = 4;</code>
     */
    boolean hasBroadcaster();
    /**
     * <code>optional string broadcaster = 4;</code>
     */
    java.lang.String getBroadcaster();
    /**
     * <code>optional string broadcaster = 4;</code>
     */
    com.google.protobuf.ByteString
        getBroadcasterBytes();
  }
  /**
   * Protobuf type {@code TvSeasonDetails}
   */
  public static final class TvSeasonDetails extends
      com.google.protobuf.GeneratedMessage
      implements TvSeasonDetailsOrBuilder {
    // Use TvSeasonDetails.newBuilder() to construct.
    private TvSeasonDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TvSeasonDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public TvSeasonDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TvSeasonDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              parentDetailsUrl_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              seasonIndex_ = input.readInt32();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              releaseDate_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              broadcaster_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvSeasonDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvSeasonDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.Builder.class);
    }

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

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

    private int bitField0_;
    // optional string parentDetailsUrl = 1;
    public static final int PARENTDETAILSURL_FIELD_NUMBER = 1;
    private java.lang.Object parentDetailsUrl_;
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    public boolean hasParentDetailsUrl() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    public java.lang.String getParentDetailsUrl() {
      java.lang.Object ref = parentDetailsUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          parentDetailsUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string parentDetailsUrl = 1;</code>
     */
    public com.google.protobuf.ByteString
        getParentDetailsUrlBytes() {
      java.lang.Object ref = parentDetailsUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        parentDetailsUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 seasonIndex = 2;
    public static final int SEASONINDEX_FIELD_NUMBER = 2;
    private int seasonIndex_;
    /**
     * <code>optional int32 seasonIndex = 2;</code>
     */
    public boolean hasSeasonIndex() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 seasonIndex = 2;</code>
     */
    public int getSeasonIndex() {
      return seasonIndex_;
    }

    // optional string releaseDate = 3;
    public static final int RELEASEDATE_FIELD_NUMBER = 3;
    private java.lang.Object releaseDate_;
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    public boolean hasReleaseDate() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    public java.lang.String getReleaseDate() {
      java.lang.Object ref = releaseDate_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          releaseDate_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    public com.google.protobuf.ByteString
        getReleaseDateBytes() {
      java.lang.Object ref = releaseDate_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        releaseDate_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string broadcaster = 4;
    public static final int BROADCASTER_FIELD_NUMBER = 4;
    private java.lang.Object broadcaster_;
    /**
     * <code>optional string broadcaster = 4;</code>
     */
    public boolean hasBroadcaster() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string broadcaster = 4;</code>
     */
    public java.lang.String getBroadcaster() {
      java.lang.Object ref = broadcaster_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          broadcaster_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string broadcaster = 4;</code>
     */
    public com.google.protobuf.ByteString
        getBroadcasterBytes() {
      java.lang.Object ref = broadcaster_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        broadcaster_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      parentDetailsUrl_ = "";
      seasonIndex_ = 0;
      releaseDate_ = "";
      broadcaster_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getParentDetailsUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, seasonIndex_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getReleaseDateBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getBroadcasterBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getParentDetailsUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, seasonIndex_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getReleaseDateBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getBroadcasterBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code TvSeasonDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvSeasonDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvSeasonDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        parentDetailsUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        seasonIndex_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        releaseDate_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        broadcaster_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvSeasonDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.parentDetailsUrl_ = parentDetailsUrl_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.seasonIndex_ = seasonIndex_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.releaseDate_ = releaseDate_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.broadcaster_ = broadcaster_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.TvSeasonDetails.getDefaultInstance()) return this;
        if (other.hasParentDetailsUrl()) {
          bitField0_ |= 0x00000001;
          parentDetailsUrl_ = other.parentDetailsUrl_;
          onChanged();
        }
        if (other.hasSeasonIndex()) {
          setSeasonIndex(other.getSeasonIndex());
        }
        if (other.hasReleaseDate()) {
          bitField0_ |= 0x00000004;
          releaseDate_ = other.releaseDate_;
          onChanged();
        }
        if (other.hasBroadcaster()) {
          bitField0_ |= 0x00000008;
          broadcaster_ = other.broadcaster_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

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

      // optional string parentDetailsUrl = 1;
      private java.lang.Object parentDetailsUrl_ = "";
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public boolean hasParentDetailsUrl() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public java.lang.String getParentDetailsUrl() {
        java.lang.Object ref = parentDetailsUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          parentDetailsUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public com.google.protobuf.ByteString
          getParentDetailsUrlBytes() {
        java.lang.Object ref = parentDetailsUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          parentDetailsUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public Builder setParentDetailsUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        parentDetailsUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public Builder clearParentDetailsUrl() {
        bitField0_ = (bitField0_ & ~0x00000001);
        parentDetailsUrl_ = getDefaultInstance().getParentDetailsUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string parentDetailsUrl = 1;</code>
       */
      public Builder setParentDetailsUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        parentDetailsUrl_ = value;
        onChanged();
        return this;
      }

      // optional int32 seasonIndex = 2;
      private int seasonIndex_ ;
      /**
       * <code>optional int32 seasonIndex = 2;</code>
       */
      public boolean hasSeasonIndex() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 seasonIndex = 2;</code>
       */
      public int getSeasonIndex() {
        return seasonIndex_;
      }
      /**
       * <code>optional int32 seasonIndex = 2;</code>
       */
      public Builder setSeasonIndex(int value) {
        bitField0_ |= 0x00000002;
        seasonIndex_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 seasonIndex = 2;</code>
       */
      public Builder clearSeasonIndex() {
        bitField0_ = (bitField0_ & ~0x00000002);
        seasonIndex_ = 0;
        onChanged();
        return this;
      }

      // optional string releaseDate = 3;
      private java.lang.Object releaseDate_ = "";
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public boolean hasReleaseDate() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public java.lang.String getReleaseDate() {
        java.lang.Object ref = releaseDate_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          releaseDate_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public com.google.protobuf.ByteString
          getReleaseDateBytes() {
        java.lang.Object ref = releaseDate_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          releaseDate_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public Builder setReleaseDate(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        releaseDate_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public Builder clearReleaseDate() {
        bitField0_ = (bitField0_ & ~0x00000004);
        releaseDate_ = getDefaultInstance().getReleaseDate();
        onChanged();
        return this;
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public Builder setReleaseDateBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        releaseDate_ = value;
        onChanged();
        return this;
      }

      // optional string broadcaster = 4;
      private java.lang.Object broadcaster_ = "";
      /**
       * <code>optional string broadcaster = 4;</code>
       */
      public boolean hasBroadcaster() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string broadcaster = 4;</code>
       */
      public java.lang.String getBroadcaster() {
        java.lang.Object ref = broadcaster_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          broadcaster_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string broadcaster = 4;</code>
       */
      public com.google.protobuf.ByteString
          getBroadcasterBytes() {
        java.lang.Object ref = broadcaster_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          broadcaster_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string broadcaster = 4;</code>
       */
      public Builder setBroadcaster(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        broadcaster_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string broadcaster = 4;</code>
       */
      public Builder clearBroadcaster() {
        bitField0_ = (bitField0_ & ~0x00000008);
        broadcaster_ = getDefaultInstance().getBroadcaster();
        onChanged();
        return this;
      }
      /**
       * <code>optional string broadcaster = 4;</code>
       */
      public Builder setBroadcasterBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        broadcaster_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:TvSeasonDetails)
    }

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

    // @@protoc_insertion_point(class_scope:TvSeasonDetails)
  }

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

    // optional int32 seasonCount = 1;
    /**
     * <code>optional int32 seasonCount = 1;</code>
     */
    boolean hasSeasonCount();
    /**
     * <code>optional int32 seasonCount = 1;</code>
     */
    int getSeasonCount();

    // optional int32 startYear = 2;
    /**
     * <code>optional int32 startYear = 2;</code>
     */
    boolean hasStartYear();
    /**
     * <code>optional int32 startYear = 2;</code>
     */
    int getStartYear();

    // optional int32 endYear = 3;
    /**
     * <code>optional int32 endYear = 3;</code>
     */
    boolean hasEndYear();
    /**
     * <code>optional int32 endYear = 3;</code>
     */
    int getEndYear();

    // optional string broadcaster = 4;
    /**
     * <code>optional string broadcaster = 4;</code>
     */
    boolean hasBroadcaster();
    /**
     * <code>optional string broadcaster = 4;</code>
     */
    java.lang.String getBroadcaster();
    /**
     * <code>optional string broadcaster = 4;</code>
     */
    com.google.protobuf.ByteString
        getBroadcasterBytes();
  }
  /**
   * Protobuf type {@code TvShowDetails}
   */
  public static final class TvShowDetails extends
      com.google.protobuf.GeneratedMessage
      implements TvShowDetailsOrBuilder {
    // Use TvShowDetails.newBuilder() to construct.
    private TvShowDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private TvShowDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

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

    public TvShowDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private TvShowDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              seasonCount_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              startYear_ = input.readInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              endYear_ = input.readInt32();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              broadcaster_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvShowDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvShowDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.Builder.class);
    }

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

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

    private int bitField0_;
    // optional int32 seasonCount = 1;
    public static final int SEASONCOUNT_FIELD_NUMBER = 1;
    private int seasonCount_;
    /**
     * <code>optional int32 seasonCount = 1;</code>
     */
    public boolean hasSeasonCount() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 seasonCount = 1;</code>
     */
    public int getSeasonCount() {
      return seasonCount_;
    }

    // optional int32 startYear = 2;
    public static final int STARTYEAR_FIELD_NUMBER = 2;
    private int startYear_;
    /**
     * <code>optional int32 startYear = 2;</code>
     */
    public boolean hasStartYear() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 startYear = 2;</code>
     */
    public int getStartYear() {
      return startYear_;
    }

    // optional int32 endYear = 3;
    public static final int ENDYEAR_FIELD_NUMBER = 3;
    private int endYear_;
    /**
     * <code>optional int32 endYear = 3;</code>
     */
    public boolean hasEndYear() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int32 endYear = 3;</code>
     */
    public int getEndYear() {
      return endYear_;
    }

    // optional string broadcaster = 4;
    public static final int BROADCASTER_FIELD_NUMBER = 4;
    private java.lang.Object broadcaster_;
    /**
     * <code>optional string broadcaster = 4;</code>
     */
    public boolean hasBroadcaster() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string broadcaster = 4;</code>
     */
    public java.lang.String getBroadcaster() {
      java.lang.Object ref = broadcaster_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          broadcaster_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string broadcaster = 4;</code>
     */
    public com.google.protobuf.ByteString
        getBroadcasterBytes() {
      java.lang.Object ref = broadcaster_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        broadcaster_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      seasonCount_ = 0;
      startYear_ = 0;
      endYear_ = 0;
      broadcaster_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, seasonCount_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, startYear_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(3, endYear_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getBroadcasterBytes());
      }
      getUnknownFields().writeTo(output);
    }

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

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, seasonCount_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, startYear_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, endYear_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getBroadcasterBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

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

    public static com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code TvShowDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvShowDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvShowDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

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

      public Builder clear() {
        super.clear();
        seasonCount_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        startYear_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        endYear_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        broadcaster_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

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

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_TvShowDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.seasonCount_ = seasonCount_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.startYear_ = startYear_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.endYear_ = endYear_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.broadcaster_ = broadcaster_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails.getDefaultInstance()) return this;
        if (other.hasSeasonCount()) {
          setSeasonCount(other.getSeasonCount());
        }
        if (other.hasStartYear()) {
          setStartYear(other.getStartYear());
        }
        if (other.hasEndYear()) {
          setEndYear(other.getEndYear());
        }
        if (other.hasBroadcaster()) {
          bitField0_ |= 0x00000008;
          broadcaster_ = other.broadcaster_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.TvShowDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 seasonCount = 1;
      private int seasonCount_ ;
      /**
       * <code>optional int32 seasonCount = 1;</code>
       */
      public boolean hasSeasonCount() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 seasonCount = 1;</code>
       */
      public int getSeasonCount() {
        return seasonCount_;
      }
      /**
       * <code>optional int32 seasonCount = 1;</code>
       */
      public Builder setSeasonCount(int value) {
        bitField0_ |= 0x00000001;
        seasonCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 seasonCount = 1;</code>
       */
      public Builder clearSeasonCount() {
        bitField0_ = (bitField0_ & ~0x00000001);
        seasonCount_ = 0;
        onChanged();
        return this;
      }

      // optional int32 startYear = 2;
      private int startYear_ ;
      /**
       * <code>optional int32 startYear = 2;</code>
       */
      public boolean hasStartYear() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 startYear = 2;</code>
       */
      public int getStartYear() {
        return startYear_;
      }
      /**
       * <code>optional int32 startYear = 2;</code>
       */
      public Builder setStartYear(int value) {
        bitField0_ |= 0x00000002;
        startYear_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 startYear = 2;</code>
       */
      public Builder clearStartYear() {
        bitField0_ = (bitField0_ & ~0x00000002);
        startYear_ = 0;
        onChanged();
        return this;
      }

      // optional int32 endYear = 3;
      private int endYear_ ;
      /**
       * <code>optional int32 endYear = 3;</code>
       */
      public boolean hasEndYear() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int32 endYear = 3;</code>
       */
      public int getEndYear() {
        return endYear_;
      }
      /**
       * <code>optional int32 endYear = 3;</code>
       */
      public Builder setEndYear(int value) {
        bitField0_ |= 0x00000004;
        endYear_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 endYear = 3;</code>
       */
      public Builder clearEndYear() {
        bitField0_ = (bitField0_ & ~0x00000004);
        endYear_ = 0;
        onChanged();
        return this;
      }

      // optional string broadcaster = 4;
      private java.lang.Object broadcaster_ = "";
      /**
       * <code>optional string broadcaster = 4;</code>
       */
      public boolean hasBroadcaster() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string broadcaster = 4;</code>
       */
      public java.lang.String getBroadcaster() {
        java.lang.Object ref = broadcaster_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          broadcaster_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string broadcaster = 4;</code>
       */
      public com.google.protobuf.ByteString
          getBroadcasterBytes() {
        java.lang.Object ref = broadcaster_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          broadcaster_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string broadcaster = 4;</code>
       */
      public Builder setBroadcaster(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        broadcaster_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string broadcaster = 4;</code>
       */
      public Builder clearBroadcaster() {
        bitField0_ = (bitField0_ & ~0x00000008);
        broadcaster_ = getDefaultInstance().getBroadcaster();
        onChanged();
        return this;
      }
      /**
       * <code>optional string broadcaster = 4;</code>
       */
      public Builder setBroadcasterBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        broadcaster_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:TvShowDetails)
    }

    static {
      defaultInstance = new TvShowDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:TvShowDetails)
  }

  public interface VideoCreditOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 creditType = 1;
    /**
     * <code>optional int32 creditType = 1;</code>
     */
    boolean hasCreditType();
    /**
     * <code>optional int32 creditType = 1;</code>
     */
    int getCreditType();

    // optional string credit = 2;
    /**
     * <code>optional string credit = 2;</code>
     */
    boolean hasCredit();
    /**
     * <code>optional string credit = 2;</code>
     */
    java.lang.String getCredit();
    /**
     * <code>optional string credit = 2;</code>
     */
    com.google.protobuf.ByteString
        getCreditBytes();

    // repeated string name = 3;
    /**
     * <code>repeated string name = 3;</code>
     */
    java.util.List<java.lang.String>
    getNameList();
    /**
     * <code>repeated string name = 3;</code>
     */
    int getNameCount();
    /**
     * <code>repeated string name = 3;</code>
     */
    java.lang.String getName(int index);
    /**
     * <code>repeated string name = 3;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes(int index);
  }
  /**
   * Protobuf type {@code VideoCredit}
   */
  public static final class VideoCredit extends
      com.google.protobuf.GeneratedMessage
      implements VideoCreditOrBuilder {
    // Use VideoCredit.newBuilder() to construct.
    private VideoCredit(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private VideoCredit(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final VideoCredit defaultInstance;
    public static VideoCredit getDefaultInstance() {
      return defaultInstance;
    }

    public VideoCredit getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private VideoCredit(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              creditType_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              credit_ = input.readBytes();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                name_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000004;
              }
              name_.add(input.readBytes());
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          name_ = new com.google.protobuf.UnmodifiableLazyStringList(name_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoCredit_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoCredit_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.class, com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.Builder.class);
    }

    public static com.google.protobuf.Parser<VideoCredit> PARSER =
        new com.google.protobuf.AbstractParser<VideoCredit>() {
      public VideoCredit parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new VideoCredit(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<VideoCredit> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 creditType = 1;
    public static final int CREDITTYPE_FIELD_NUMBER = 1;
    private int creditType_;
    /**
     * <code>optional int32 creditType = 1;</code>
     */
    public boolean hasCreditType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 creditType = 1;</code>
     */
    public int getCreditType() {
      return creditType_;
    }

    // optional string credit = 2;
    public static final int CREDIT_FIELD_NUMBER = 2;
    private java.lang.Object credit_;
    /**
     * <code>optional string credit = 2;</code>
     */
    public boolean hasCredit() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string credit = 2;</code>
     */
    public java.lang.String getCredit() {
      java.lang.Object ref = credit_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          credit_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string credit = 2;</code>
     */
    public com.google.protobuf.ByteString
        getCreditBytes() {
      java.lang.Object ref = credit_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        credit_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated string name = 3;
    public static final int NAME_FIELD_NUMBER = 3;
    private com.google.protobuf.LazyStringList name_;
    /**
     * <code>repeated string name = 3;</code>
     */
    public java.util.List<java.lang.String>
        getNameList() {
      return name_;
    }
    /**
     * <code>repeated string name = 3;</code>
     */
    public int getNameCount() {
      return name_.size();
    }
    /**
     * <code>repeated string name = 3;</code>
     */
    public java.lang.String getName(int index) {
      return name_.get(index);
    }
    /**
     * <code>repeated string name = 3;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes(int index) {
      return name_.getByteString(index);
    }

    private void initFields() {
      creditType_ = 0;
      credit_ = "";
      name_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, creditType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getCreditBytes());
      }
      for (int i = 0; i < name_.size(); i++) {
        output.writeBytes(3, name_.getByteString(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, creditType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getCreditBytes());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < name_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(name_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getNameList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code VideoCredit}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.VideoCreditOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoCredit_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoCredit_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.class, com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        creditType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        credit_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoCredit_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit build() {
        com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit result = new com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.creditType_ = creditType_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.credit_ = credit_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          name_ = new com.google.protobuf.UnmodifiableLazyStringList(
              name_);
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.name_ = name_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.getDefaultInstance()) return this;
        if (other.hasCreditType()) {
          setCreditType(other.getCreditType());
        }
        if (other.hasCredit()) {
          bitField0_ |= 0x00000002;
          credit_ = other.credit_;
          onChanged();
        }
        if (!other.name_.isEmpty()) {
          if (name_.isEmpty()) {
            name_ = other.name_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureNameIsMutable();
            name_.addAll(other.name_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 creditType = 1;
      private int creditType_ ;
      /**
       * <code>optional int32 creditType = 1;</code>
       */
      public boolean hasCreditType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 creditType = 1;</code>
       */
      public int getCreditType() {
        return creditType_;
      }
      /**
       * <code>optional int32 creditType = 1;</code>
       */
      public Builder setCreditType(int value) {
        bitField0_ |= 0x00000001;
        creditType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 creditType = 1;</code>
       */
      public Builder clearCreditType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        creditType_ = 0;
        onChanged();
        return this;
      }

      // optional string credit = 2;
      private java.lang.Object credit_ = "";
      /**
       * <code>optional string credit = 2;</code>
       */
      public boolean hasCredit() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string credit = 2;</code>
       */
      public java.lang.String getCredit() {
        java.lang.Object ref = credit_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          credit_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string credit = 2;</code>
       */
      public com.google.protobuf.ByteString
          getCreditBytes() {
        java.lang.Object ref = credit_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          credit_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string credit = 2;</code>
       */
      public Builder setCredit(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        credit_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string credit = 2;</code>
       */
      public Builder clearCredit() {
        bitField0_ = (bitField0_ & ~0x00000002);
        credit_ = getDefaultInstance().getCredit();
        onChanged();
        return this;
      }
      /**
       * <code>optional string credit = 2;</code>
       */
      public Builder setCreditBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        credit_ = value;
        onChanged();
        return this;
      }

      // repeated string name = 3;
      private com.google.protobuf.LazyStringList name_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureNameIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          name_ = new com.google.protobuf.LazyStringArrayList(name_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated string name = 3;</code>
       */
      public java.util.List<java.lang.String>
          getNameList() {
        return java.util.Collections.unmodifiableList(name_);
      }
      /**
       * <code>repeated string name = 3;</code>
       */
      public int getNameCount() {
        return name_.size();
      }
      /**
       * <code>repeated string name = 3;</code>
       */
      public java.lang.String getName(int index) {
        return name_.get(index);
      }
      /**
       * <code>repeated string name = 3;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes(int index) {
        return name_.getByteString(index);
      }
      /**
       * <code>repeated string name = 3;</code>
       */
      public Builder setName(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureNameIsMutable();
        name_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string name = 3;</code>
       */
      public Builder addName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureNameIsMutable();
        name_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string name = 3;</code>
       */
      public Builder addAllName(
          java.lang.Iterable<java.lang.String> values) {
        ensureNameIsMutable();
        super.addAll(values, name_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string name = 3;</code>
       */
      public Builder clearName() {
        name_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string name = 3;</code>
       */
      public Builder addNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureNameIsMutable();
        name_.add(value);
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:VideoCredit)
    }

    static {
      defaultInstance = new VideoCredit(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:VideoCredit)
  }

  public interface VideoDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .VideoCredit credit = 1;
    /**
     * <code>repeated .VideoCredit credit = 1;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit> 
        getCreditList();
    /**
     * <code>repeated .VideoCredit credit = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit getCredit(int index);
    /**
     * <code>repeated .VideoCredit credit = 1;</code>
     */
    int getCreditCount();
    /**
     * <code>repeated .VideoCredit credit = 1;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.VideoCreditOrBuilder> 
        getCreditOrBuilderList();
    /**
     * <code>repeated .VideoCredit credit = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.VideoCreditOrBuilder getCreditOrBuilder(
        int index);

    // optional string duration = 2;
    /**
     * <code>optional string duration = 2;</code>
     */
    boolean hasDuration();
    /**
     * <code>optional string duration = 2;</code>
     */
    java.lang.String getDuration();
    /**
     * <code>optional string duration = 2;</code>
     */
    com.google.protobuf.ByteString
        getDurationBytes();

    // optional string releaseDate = 3;
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    boolean hasReleaseDate();
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    java.lang.String getReleaseDate();
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    com.google.protobuf.ByteString
        getReleaseDateBytes();

    // optional string contentRating = 4;
    /**
     * <code>optional string contentRating = 4;</code>
     */
    boolean hasContentRating();
    /**
     * <code>optional string contentRating = 4;</code>
     */
    java.lang.String getContentRating();
    /**
     * <code>optional string contentRating = 4;</code>
     */
    com.google.protobuf.ByteString
        getContentRatingBytes();

    // optional int64 likes = 5;
    /**
     * <code>optional int64 likes = 5;</code>
     */
    boolean hasLikes();
    /**
     * <code>optional int64 likes = 5;</code>
     */
    long getLikes();

    // optional int64 dislikes = 6;
    /**
     * <code>optional int64 dislikes = 6;</code>
     */
    boolean hasDislikes();
    /**
     * <code>optional int64 dislikes = 6;</code>
     */
    long getDislikes();

    // repeated string genre = 7;
    /**
     * <code>repeated string genre = 7;</code>
     */
    java.util.List<java.lang.String>
    getGenreList();
    /**
     * <code>repeated string genre = 7;</code>
     */
    int getGenreCount();
    /**
     * <code>repeated string genre = 7;</code>
     */
    java.lang.String getGenre(int index);
    /**
     * <code>repeated string genre = 7;</code>
     */
    com.google.protobuf.ByteString
        getGenreBytes(int index);

    // repeated .Trailer trailer = 8;
    /**
     * <code>repeated .Trailer trailer = 8;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Trailer> 
        getTrailerList();
    /**
     * <code>repeated .Trailer trailer = 8;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Trailer getTrailer(int index);
    /**
     * <code>repeated .Trailer trailer = 8;</code>
     */
    int getTrailerCount();
    /**
     * <code>repeated .Trailer trailer = 8;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.TrailerOrBuilder> 
        getTrailerOrBuilderList();
    /**
     * <code>repeated .Trailer trailer = 8;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.TrailerOrBuilder getTrailerOrBuilder(
        int index);

    // repeated .VideoRentalTerm rentalTerm = 9;
    /**
     * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm> 
        getRentalTermList();
    /**
     * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm getRentalTerm(int index);
    /**
     * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
     */
    int getRentalTermCount();
    /**
     * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTermOrBuilder> 
        getRentalTermOrBuilderList();
    /**
     * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTermOrBuilder getRentalTermOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code VideoDetails}
   */
  public static final class VideoDetails extends
      com.google.protobuf.GeneratedMessage
      implements VideoDetailsOrBuilder {
    // Use VideoDetails.newBuilder() to construct.
    private VideoDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private VideoDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final VideoDetails defaultInstance;
    public static VideoDetails getDefaultInstance() {
      return defaultInstance;
    }

    public VideoDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private VideoDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                credit_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit>();
                mutable_bitField0_ |= 0x00000001;
              }
              credit_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.PARSER, extensionRegistry));
              break;
            }
            case 18: {
              bitField0_ |= 0x00000001;
              duration_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000002;
              releaseDate_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000004;
              contentRating_ = input.readBytes();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000008;
              likes_ = input.readInt64();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000010;
              dislikes_ = input.readInt64();
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                genre_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000040;
              }
              genre_.add(input.readBytes());
              break;
            }
            case 66: {
              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                trailer_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Trailer>();
                mutable_bitField0_ |= 0x00000080;
              }
              trailer_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Trailer.PARSER, extensionRegistry));
              break;
            }
            case 74: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                rentalTerm_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm>();
                mutable_bitField0_ |= 0x00000100;
              }
              rentalTerm_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          credit_ = java.util.Collections.unmodifiableList(credit_);
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          genre_ = new com.google.protobuf.UnmodifiableLazyStringList(genre_);
        }
        if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
          trailer_ = java.util.Collections.unmodifiableList(trailer_);
        }
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          rentalTerm_ = java.util.Collections.unmodifiableList(rentalTerm_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<VideoDetails> PARSER =
        new com.google.protobuf.AbstractParser<VideoDetails>() {
      public VideoDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new VideoDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<VideoDetails> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // repeated .VideoCredit credit = 1;
    public static final int CREDIT_FIELD_NUMBER = 1;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit> credit_;
    /**
     * <code>repeated .VideoCredit credit = 1;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit> getCreditList() {
      return credit_;
    }
    /**
     * <code>repeated .VideoCredit credit = 1;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.VideoCreditOrBuilder> 
        getCreditOrBuilderList() {
      return credit_;
    }
    /**
     * <code>repeated .VideoCredit credit = 1;</code>
     */
    public int getCreditCount() {
      return credit_.size();
    }
    /**
     * <code>repeated .VideoCredit credit = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit getCredit(int index) {
      return credit_.get(index);
    }
    /**
     * <code>repeated .VideoCredit credit = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.VideoCreditOrBuilder getCreditOrBuilder(
        int index) {
      return credit_.get(index);
    }

    // optional string duration = 2;
    public static final int DURATION_FIELD_NUMBER = 2;
    private java.lang.Object duration_;
    /**
     * <code>optional string duration = 2;</code>
     */
    public boolean hasDuration() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string duration = 2;</code>
     */
    public java.lang.String getDuration() {
      java.lang.Object ref = duration_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          duration_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string duration = 2;</code>
     */
    public com.google.protobuf.ByteString
        getDurationBytes() {
      java.lang.Object ref = duration_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        duration_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string releaseDate = 3;
    public static final int RELEASEDATE_FIELD_NUMBER = 3;
    private java.lang.Object releaseDate_;
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    public boolean hasReleaseDate() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    public java.lang.String getReleaseDate() {
      java.lang.Object ref = releaseDate_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          releaseDate_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string releaseDate = 3;</code>
     */
    public com.google.protobuf.ByteString
        getReleaseDateBytes() {
      java.lang.Object ref = releaseDate_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        releaseDate_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string contentRating = 4;
    public static final int CONTENTRATING_FIELD_NUMBER = 4;
    private java.lang.Object contentRating_;
    /**
     * <code>optional string contentRating = 4;</code>
     */
    public boolean hasContentRating() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string contentRating = 4;</code>
     */
    public java.lang.String getContentRating() {
      java.lang.Object ref = contentRating_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          contentRating_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string contentRating = 4;</code>
     */
    public com.google.protobuf.ByteString
        getContentRatingBytes() {
      java.lang.Object ref = contentRating_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        contentRating_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 likes = 5;
    public static final int LIKES_FIELD_NUMBER = 5;
    private long likes_;
    /**
     * <code>optional int64 likes = 5;</code>
     */
    public boolean hasLikes() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 likes = 5;</code>
     */
    public long getLikes() {
      return likes_;
    }

    // optional int64 dislikes = 6;
    public static final int DISLIKES_FIELD_NUMBER = 6;
    private long dislikes_;
    /**
     * <code>optional int64 dislikes = 6;</code>
     */
    public boolean hasDislikes() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int64 dislikes = 6;</code>
     */
    public long getDislikes() {
      return dislikes_;
    }

    // repeated string genre = 7;
    public static final int GENRE_FIELD_NUMBER = 7;
    private com.google.protobuf.LazyStringList genre_;
    /**
     * <code>repeated string genre = 7;</code>
     */
    public java.util.List<java.lang.String>
        getGenreList() {
      return genre_;
    }
    /**
     * <code>repeated string genre = 7;</code>
     */
    public int getGenreCount() {
      return genre_.size();
    }
    /**
     * <code>repeated string genre = 7;</code>
     */
    public java.lang.String getGenre(int index) {
      return genre_.get(index);
    }
    /**
     * <code>repeated string genre = 7;</code>
     */
    public com.google.protobuf.ByteString
        getGenreBytes(int index) {
      return genre_.getByteString(index);
    }

    // repeated .Trailer trailer = 8;
    public static final int TRAILER_FIELD_NUMBER = 8;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Trailer> trailer_;
    /**
     * <code>repeated .Trailer trailer = 8;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Trailer> getTrailerList() {
      return trailer_;
    }
    /**
     * <code>repeated .Trailer trailer = 8;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.TrailerOrBuilder> 
        getTrailerOrBuilderList() {
      return trailer_;
    }
    /**
     * <code>repeated .Trailer trailer = 8;</code>
     */
    public int getTrailerCount() {
      return trailer_.size();
    }
    /**
     * <code>repeated .Trailer trailer = 8;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Trailer getTrailer(int index) {
      return trailer_.get(index);
    }
    /**
     * <code>repeated .Trailer trailer = 8;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.TrailerOrBuilder getTrailerOrBuilder(
        int index) {
      return trailer_.get(index);
    }

    // repeated .VideoRentalTerm rentalTerm = 9;
    public static final int RENTALTERM_FIELD_NUMBER = 9;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm> rentalTerm_;
    /**
     * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm> getRentalTermList() {
      return rentalTerm_;
    }
    /**
     * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTermOrBuilder> 
        getRentalTermOrBuilderList() {
      return rentalTerm_;
    }
    /**
     * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
     */
    public int getRentalTermCount() {
      return rentalTerm_.size();
    }
    /**
     * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm getRentalTerm(int index) {
      return rentalTerm_.get(index);
    }
    /**
     * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTermOrBuilder getRentalTermOrBuilder(
        int index) {
      return rentalTerm_.get(index);
    }

    private void initFields() {
      credit_ = java.util.Collections.emptyList();
      duration_ = "";
      releaseDate_ = "";
      contentRating_ = "";
      likes_ = 0L;
      dislikes_ = 0L;
      genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      trailer_ = java.util.Collections.emptyList();
      rentalTerm_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < credit_.size(); i++) {
        output.writeMessage(1, credit_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(2, getDurationBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(3, getReleaseDateBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(4, getContentRatingBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(5, likes_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(6, dislikes_);
      }
      for (int i = 0; i < genre_.size(); i++) {
        output.writeBytes(7, genre_.getByteString(i));
      }
      for (int i = 0; i < trailer_.size(); i++) {
        output.writeMessage(8, trailer_.get(i));
      }
      for (int i = 0; i < rentalTerm_.size(); i++) {
        output.writeMessage(9, rentalTerm_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < credit_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, credit_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getDurationBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getReleaseDateBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getContentRatingBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, likes_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(6, dislikes_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < genre_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(genre_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getGenreList().size();
      }
      for (int i = 0; i < trailer_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, trailer_.get(i));
      }
      for (int i = 0; i < rentalTerm_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, rentalTerm_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code VideoDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.VideoDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getCreditFieldBuilder();
          getTrailerFieldBuilder();
          getRentalTermFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (creditBuilder_ == null) {
          credit_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          creditBuilder_.clear();
        }
        duration_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        releaseDate_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        contentRating_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        likes_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        dislikes_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000020);
        genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000040);
        if (trailerBuilder_ == null) {
          trailer_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
        } else {
          trailerBuilder_.clear();
        }
        if (rentalTermBuilder_ == null) {
          rentalTerm_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          rentalTermBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (creditBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            credit_ = java.util.Collections.unmodifiableList(credit_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.credit_ = credit_;
        } else {
          result.credit_ = creditBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000001;
        }
        result.duration_ = duration_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000002;
        }
        result.releaseDate_ = releaseDate_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.contentRating_ = contentRating_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        result.likes_ = likes_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000010;
        }
        result.dislikes_ = dislikes_;
        if (((bitField0_ & 0x00000040) == 0x00000040)) {
          genre_ = new com.google.protobuf.UnmodifiableLazyStringList(
              genre_);
          bitField0_ = (bitField0_ & ~0x00000040);
        }
        result.genre_ = genre_;
        if (trailerBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080)) {
            trailer_ = java.util.Collections.unmodifiableList(trailer_);
            bitField0_ = (bitField0_ & ~0x00000080);
          }
          result.trailer_ = trailer_;
        } else {
          result.trailer_ = trailerBuilder_.build();
        }
        if (rentalTermBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            rentalTerm_ = java.util.Collections.unmodifiableList(rentalTerm_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.rentalTerm_ = rentalTerm_;
        } else {
          result.rentalTerm_ = rentalTermBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails.getDefaultInstance()) return this;
        if (creditBuilder_ == null) {
          if (!other.credit_.isEmpty()) {
            if (credit_.isEmpty()) {
              credit_ = other.credit_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureCreditIsMutable();
              credit_.addAll(other.credit_);
            }
            onChanged();
          }
        } else {
          if (!other.credit_.isEmpty()) {
            if (creditBuilder_.isEmpty()) {
              creditBuilder_.dispose();
              creditBuilder_ = null;
              credit_ = other.credit_;
              bitField0_ = (bitField0_ & ~0x00000001);
              creditBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getCreditFieldBuilder() : null;
            } else {
              creditBuilder_.addAllMessages(other.credit_);
            }
          }
        }
        if (other.hasDuration()) {
          bitField0_ |= 0x00000002;
          duration_ = other.duration_;
          onChanged();
        }
        if (other.hasReleaseDate()) {
          bitField0_ |= 0x00000004;
          releaseDate_ = other.releaseDate_;
          onChanged();
        }
        if (other.hasContentRating()) {
          bitField0_ |= 0x00000008;
          contentRating_ = other.contentRating_;
          onChanged();
        }
        if (other.hasLikes()) {
          setLikes(other.getLikes());
        }
        if (other.hasDislikes()) {
          setDislikes(other.getDislikes());
        }
        if (!other.genre_.isEmpty()) {
          if (genre_.isEmpty()) {
            genre_ = other.genre_;
            bitField0_ = (bitField0_ & ~0x00000040);
          } else {
            ensureGenreIsMutable();
            genre_.addAll(other.genre_);
          }
          onChanged();
        }
        if (trailerBuilder_ == null) {
          if (!other.trailer_.isEmpty()) {
            if (trailer_.isEmpty()) {
              trailer_ = other.trailer_;
              bitField0_ = (bitField0_ & ~0x00000080);
            } else {
              ensureTrailerIsMutable();
              trailer_.addAll(other.trailer_);
            }
            onChanged();
          }
        } else {
          if (!other.trailer_.isEmpty()) {
            if (trailerBuilder_.isEmpty()) {
              trailerBuilder_.dispose();
              trailerBuilder_ = null;
              trailer_ = other.trailer_;
              bitField0_ = (bitField0_ & ~0x00000080);
              trailerBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getTrailerFieldBuilder() : null;
            } else {
              trailerBuilder_.addAllMessages(other.trailer_);
            }
          }
        }
        if (rentalTermBuilder_ == null) {
          if (!other.rentalTerm_.isEmpty()) {
            if (rentalTerm_.isEmpty()) {
              rentalTerm_ = other.rentalTerm_;
              bitField0_ = (bitField0_ & ~0x00000100);
            } else {
              ensureRentalTermIsMutable();
              rentalTerm_.addAll(other.rentalTerm_);
            }
            onChanged();
          }
        } else {
          if (!other.rentalTerm_.isEmpty()) {
            if (rentalTermBuilder_.isEmpty()) {
              rentalTermBuilder_.dispose();
              rentalTermBuilder_ = null;
              rentalTerm_ = other.rentalTerm_;
              bitField0_ = (bitField0_ & ~0x00000100);
              rentalTermBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getRentalTermFieldBuilder() : null;
            } else {
              rentalTermBuilder_.addAllMessages(other.rentalTerm_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.VideoDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .VideoCredit credit = 1;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit> credit_ =
        java.util.Collections.emptyList();
      private void ensureCreditIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          credit_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit>(credit_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit, com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.Builder, com.akdeniz.googleplaycrawler.GooglePlay.VideoCreditOrBuilder> creditBuilder_;

      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit> getCreditList() {
        if (creditBuilder_ == null) {
          return java.util.Collections.unmodifiableList(credit_);
        } else {
          return creditBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public int getCreditCount() {
        if (creditBuilder_ == null) {
          return credit_.size();
        } else {
          return creditBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit getCredit(int index) {
        if (creditBuilder_ == null) {
          return credit_.get(index);
        } else {
          return creditBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public Builder setCredit(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit value) {
        if (creditBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCreditIsMutable();
          credit_.set(index, value);
          onChanged();
        } else {
          creditBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public Builder setCredit(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.Builder builderForValue) {
        if (creditBuilder_ == null) {
          ensureCreditIsMutable();
          credit_.set(index, builderForValue.build());
          onChanged();
        } else {
          creditBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public Builder addCredit(com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit value) {
        if (creditBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCreditIsMutable();
          credit_.add(value);
          onChanged();
        } else {
          creditBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public Builder addCredit(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit value) {
        if (creditBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureCreditIsMutable();
          credit_.add(index, value);
          onChanged();
        } else {
          creditBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public Builder addCredit(
          com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.Builder builderForValue) {
        if (creditBuilder_ == null) {
          ensureCreditIsMutable();
          credit_.add(builderForValue.build());
          onChanged();
        } else {
          creditBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public Builder addCredit(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.Builder builderForValue) {
        if (creditBuilder_ == null) {
          ensureCreditIsMutable();
          credit_.add(index, builderForValue.build());
          onChanged();
        } else {
          creditBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public Builder addAllCredit(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit> values) {
        if (creditBuilder_ == null) {
          ensureCreditIsMutable();
          super.addAll(values, credit_);
          onChanged();
        } else {
          creditBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public Builder clearCredit() {
        if (creditBuilder_ == null) {
          credit_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          creditBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public Builder removeCredit(int index) {
        if (creditBuilder_ == null) {
          ensureCreditIsMutable();
          credit_.remove(index);
          onChanged();
        } else {
          creditBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.Builder getCreditBuilder(
          int index) {
        return getCreditFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoCreditOrBuilder getCreditOrBuilder(
          int index) {
        if (creditBuilder_ == null) {
          return credit_.get(index);  } else {
          return creditBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.VideoCreditOrBuilder> 
           getCreditOrBuilderList() {
        if (creditBuilder_ != null) {
          return creditBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(credit_);
        }
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.Builder addCreditBuilder() {
        return getCreditFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.getDefaultInstance());
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.Builder addCreditBuilder(
          int index) {
        return getCreditFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.getDefaultInstance());
      }
      /**
       * <code>repeated .VideoCredit credit = 1;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.Builder> 
           getCreditBuilderList() {
        return getCreditFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit, com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.Builder, com.akdeniz.googleplaycrawler.GooglePlay.VideoCreditOrBuilder> 
          getCreditFieldBuilder() {
        if (creditBuilder_ == null) {
          creditBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit, com.akdeniz.googleplaycrawler.GooglePlay.VideoCredit.Builder, com.akdeniz.googleplaycrawler.GooglePlay.VideoCreditOrBuilder>(
                  credit_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          credit_ = null;
        }
        return creditBuilder_;
      }

      // optional string duration = 2;
      private java.lang.Object duration_ = "";
      /**
       * <code>optional string duration = 2;</code>
       */
      public boolean hasDuration() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string duration = 2;</code>
       */
      public java.lang.String getDuration() {
        java.lang.Object ref = duration_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          duration_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string duration = 2;</code>
       */
      public com.google.protobuf.ByteString
          getDurationBytes() {
        java.lang.Object ref = duration_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          duration_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string duration = 2;</code>
       */
      public Builder setDuration(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        duration_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string duration = 2;</code>
       */
      public Builder clearDuration() {
        bitField0_ = (bitField0_ & ~0x00000002);
        duration_ = getDefaultInstance().getDuration();
        onChanged();
        return this;
      }
      /**
       * <code>optional string duration = 2;</code>
       */
      public Builder setDurationBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        duration_ = value;
        onChanged();
        return this;
      }

      // optional string releaseDate = 3;
      private java.lang.Object releaseDate_ = "";
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public boolean hasReleaseDate() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public java.lang.String getReleaseDate() {
        java.lang.Object ref = releaseDate_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          releaseDate_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public com.google.protobuf.ByteString
          getReleaseDateBytes() {
        java.lang.Object ref = releaseDate_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          releaseDate_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public Builder setReleaseDate(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        releaseDate_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public Builder clearReleaseDate() {
        bitField0_ = (bitField0_ & ~0x00000004);
        releaseDate_ = getDefaultInstance().getReleaseDate();
        onChanged();
        return this;
      }
      /**
       * <code>optional string releaseDate = 3;</code>
       */
      public Builder setReleaseDateBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        releaseDate_ = value;
        onChanged();
        return this;
      }

      // optional string contentRating = 4;
      private java.lang.Object contentRating_ = "";
      /**
       * <code>optional string contentRating = 4;</code>
       */
      public boolean hasContentRating() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string contentRating = 4;</code>
       */
      public java.lang.String getContentRating() {
        java.lang.Object ref = contentRating_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          contentRating_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string contentRating = 4;</code>
       */
      public com.google.protobuf.ByteString
          getContentRatingBytes() {
        java.lang.Object ref = contentRating_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          contentRating_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string contentRating = 4;</code>
       */
      public Builder setContentRating(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        contentRating_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string contentRating = 4;</code>
       */
      public Builder clearContentRating() {
        bitField0_ = (bitField0_ & ~0x00000008);
        contentRating_ = getDefaultInstance().getContentRating();
        onChanged();
        return this;
      }
      /**
       * <code>optional string contentRating = 4;</code>
       */
      public Builder setContentRatingBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        contentRating_ = value;
        onChanged();
        return this;
      }

      // optional int64 likes = 5;
      private long likes_ ;
      /**
       * <code>optional int64 likes = 5;</code>
       */
      public boolean hasLikes() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int64 likes = 5;</code>
       */
      public long getLikes() {
        return likes_;
      }
      /**
       * <code>optional int64 likes = 5;</code>
       */
      public Builder setLikes(long value) {
        bitField0_ |= 0x00000010;
        likes_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 likes = 5;</code>
       */
      public Builder clearLikes() {
        bitField0_ = (bitField0_ & ~0x00000010);
        likes_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 dislikes = 6;
      private long dislikes_ ;
      /**
       * <code>optional int64 dislikes = 6;</code>
       */
      public boolean hasDislikes() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int64 dislikes = 6;</code>
       */
      public long getDislikes() {
        return dislikes_;
      }
      /**
       * <code>optional int64 dislikes = 6;</code>
       */
      public Builder setDislikes(long value) {
        bitField0_ |= 0x00000020;
        dislikes_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 dislikes = 6;</code>
       */
      public Builder clearDislikes() {
        bitField0_ = (bitField0_ & ~0x00000020);
        dislikes_ = 0L;
        onChanged();
        return this;
      }

      // repeated string genre = 7;
      private com.google.protobuf.LazyStringList genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureGenreIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          genre_ = new com.google.protobuf.LazyStringArrayList(genre_);
          bitField0_ |= 0x00000040;
         }
      }
      /**
       * <code>repeated string genre = 7;</code>
       */
      public java.util.List<java.lang.String>
          getGenreList() {
        return java.util.Collections.unmodifiableList(genre_);
      }
      /**
       * <code>repeated string genre = 7;</code>
       */
      public int getGenreCount() {
        return genre_.size();
      }
      /**
       * <code>repeated string genre = 7;</code>
       */
      public java.lang.String getGenre(int index) {
        return genre_.get(index);
      }
      /**
       * <code>repeated string genre = 7;</code>
       */
      public com.google.protobuf.ByteString
          getGenreBytes(int index) {
        return genre_.getByteString(index);
      }
      /**
       * <code>repeated string genre = 7;</code>
       */
      public Builder setGenre(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGenreIsMutable();
        genre_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 7;</code>
       */
      public Builder addGenre(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGenreIsMutable();
        genre_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 7;</code>
       */
      public Builder addAllGenre(
          java.lang.Iterable<java.lang.String> values) {
        ensureGenreIsMutable();
        super.addAll(values, genre_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 7;</code>
       */
      public Builder clearGenre() {
        genre_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000040);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string genre = 7;</code>
       */
      public Builder addGenreBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureGenreIsMutable();
        genre_.add(value);
        onChanged();
        return this;
      }

      // repeated .Trailer trailer = 8;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Trailer> trailer_ =
        java.util.Collections.emptyList();
      private void ensureTrailerIsMutable() {
        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
          trailer_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Trailer>(trailer_);
          bitField0_ |= 0x00000080;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Trailer, com.akdeniz.googleplaycrawler.GooglePlay.Trailer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TrailerOrBuilder> trailerBuilder_;

      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Trailer> getTrailerList() {
        if (trailerBuilder_ == null) {
          return java.util.Collections.unmodifiableList(trailer_);
        } else {
          return trailerBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public int getTrailerCount() {
        if (trailerBuilder_ == null) {
          return trailer_.size();
        } else {
          return trailerBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Trailer getTrailer(int index) {
        if (trailerBuilder_ == null) {
          return trailer_.get(index);
        } else {
          return trailerBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public Builder setTrailer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Trailer value) {
        if (trailerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTrailerIsMutable();
          trailer_.set(index, value);
          onChanged();
        } else {
          trailerBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public Builder setTrailer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Trailer.Builder builderForValue) {
        if (trailerBuilder_ == null) {
          ensureTrailerIsMutable();
          trailer_.set(index, builderForValue.build());
          onChanged();
        } else {
          trailerBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public Builder addTrailer(com.akdeniz.googleplaycrawler.GooglePlay.Trailer value) {
        if (trailerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTrailerIsMutable();
          trailer_.add(value);
          onChanged();
        } else {
          trailerBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public Builder addTrailer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Trailer value) {
        if (trailerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTrailerIsMutable();
          trailer_.add(index, value);
          onChanged();
        } else {
          trailerBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public Builder addTrailer(
          com.akdeniz.googleplaycrawler.GooglePlay.Trailer.Builder builderForValue) {
        if (trailerBuilder_ == null) {
          ensureTrailerIsMutable();
          trailer_.add(builderForValue.build());
          onChanged();
        } else {
          trailerBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public Builder addTrailer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Trailer.Builder builderForValue) {
        if (trailerBuilder_ == null) {
          ensureTrailerIsMutable();
          trailer_.add(index, builderForValue.build());
          onChanged();
        } else {
          trailerBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public Builder addAllTrailer(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Trailer> values) {
        if (trailerBuilder_ == null) {
          ensureTrailerIsMutable();
          super.addAll(values, trailer_);
          onChanged();
        } else {
          trailerBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public Builder clearTrailer() {
        if (trailerBuilder_ == null) {
          trailer_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
          onChanged();
        } else {
          trailerBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public Builder removeTrailer(int index) {
        if (trailerBuilder_ == null) {
          ensureTrailerIsMutable();
          trailer_.remove(index);
          onChanged();
        } else {
          trailerBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Trailer.Builder getTrailerBuilder(
          int index) {
        return getTrailerFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.TrailerOrBuilder getTrailerOrBuilder(
          int index) {
        if (trailerBuilder_ == null) {
          return trailer_.get(index);  } else {
          return trailerBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.TrailerOrBuilder> 
           getTrailerOrBuilderList() {
        if (trailerBuilder_ != null) {
          return trailerBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(trailer_);
        }
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Trailer.Builder addTrailerBuilder() {
        return getTrailerFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Trailer.getDefaultInstance());
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Trailer.Builder addTrailerBuilder(
          int index) {
        return getTrailerFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Trailer.getDefaultInstance());
      }
      /**
       * <code>repeated .Trailer trailer = 8;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Trailer.Builder> 
           getTrailerBuilderList() {
        return getTrailerFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Trailer, com.akdeniz.googleplaycrawler.GooglePlay.Trailer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TrailerOrBuilder> 
          getTrailerFieldBuilder() {
        if (trailerBuilder_ == null) {
          trailerBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Trailer, com.akdeniz.googleplaycrawler.GooglePlay.Trailer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.TrailerOrBuilder>(
                  trailer_,
                  ((bitField0_ & 0x00000080) == 0x00000080),
                  getParentForChildren(),
                  isClean());
          trailer_ = null;
        }
        return trailerBuilder_;
      }

      // repeated .VideoRentalTerm rentalTerm = 9;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm> rentalTerm_ =
        java.util.Collections.emptyList();
      private void ensureRentalTermIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          rentalTerm_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm>(rentalTerm_);
          bitField0_ |= 0x00000100;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Builder, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTermOrBuilder> rentalTermBuilder_;

      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm> getRentalTermList() {
        if (rentalTermBuilder_ == null) {
          return java.util.Collections.unmodifiableList(rentalTerm_);
        } else {
          return rentalTermBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public int getRentalTermCount() {
        if (rentalTermBuilder_ == null) {
          return rentalTerm_.size();
        } else {
          return rentalTermBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm getRentalTerm(int index) {
        if (rentalTermBuilder_ == null) {
          return rentalTerm_.get(index);
        } else {
          return rentalTermBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public Builder setRentalTerm(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm value) {
        if (rentalTermBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRentalTermIsMutable();
          rentalTerm_.set(index, value);
          onChanged();
        } else {
          rentalTermBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public Builder setRentalTerm(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Builder builderForValue) {
        if (rentalTermBuilder_ == null) {
          ensureRentalTermIsMutable();
          rentalTerm_.set(index, builderForValue.build());
          onChanged();
        } else {
          rentalTermBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public Builder addRentalTerm(com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm value) {
        if (rentalTermBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRentalTermIsMutable();
          rentalTerm_.add(value);
          onChanged();
        } else {
          rentalTermBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public Builder addRentalTerm(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm value) {
        if (rentalTermBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRentalTermIsMutable();
          rentalTerm_.add(index, value);
          onChanged();
        } else {
          rentalTermBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public Builder addRentalTerm(
          com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Builder builderForValue) {
        if (rentalTermBuilder_ == null) {
          ensureRentalTermIsMutable();
          rentalTerm_.add(builderForValue.build());
          onChanged();
        } else {
          rentalTermBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public Builder addRentalTerm(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Builder builderForValue) {
        if (rentalTermBuilder_ == null) {
          ensureRentalTermIsMutable();
          rentalTerm_.add(index, builderForValue.build());
          onChanged();
        } else {
          rentalTermBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public Builder addAllRentalTerm(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm> values) {
        if (rentalTermBuilder_ == null) {
          ensureRentalTermIsMutable();
          super.addAll(values, rentalTerm_);
          onChanged();
        } else {
          rentalTermBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public Builder clearRentalTerm() {
        if (rentalTermBuilder_ == null) {
          rentalTerm_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          rentalTermBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public Builder removeRentalTerm(int index) {
        if (rentalTermBuilder_ == null) {
          ensureRentalTermIsMutable();
          rentalTerm_.remove(index);
          onChanged();
        } else {
          rentalTermBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Builder getRentalTermBuilder(
          int index) {
        return getRentalTermFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTermOrBuilder getRentalTermOrBuilder(
          int index) {
        if (rentalTermBuilder_ == null) {
          return rentalTerm_.get(index);  } else {
          return rentalTermBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTermOrBuilder> 
           getRentalTermOrBuilderList() {
        if (rentalTermBuilder_ != null) {
          return rentalTermBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(rentalTerm_);
        }
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Builder addRentalTermBuilder() {
        return getRentalTermFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.getDefaultInstance());
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Builder addRentalTermBuilder(
          int index) {
        return getRentalTermFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.getDefaultInstance());
      }
      /**
       * <code>repeated .VideoRentalTerm rentalTerm = 9;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Builder> 
           getRentalTermBuilderList() {
        return getRentalTermFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Builder, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTermOrBuilder> 
          getRentalTermFieldBuilder() {
        if (rentalTermBuilder_ == null) {
          rentalTermBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Builder, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTermOrBuilder>(
                  rentalTerm_,
                  ((bitField0_ & 0x00000100) == 0x00000100),
                  getParentForChildren(),
                  isClean());
          rentalTerm_ = null;
        }
        return rentalTermBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:VideoDetails)
    }

    static {
      defaultInstance = new VideoDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:VideoDetails)
  }

  public interface VideoRentalTermOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 offerType = 1;
    /**
     * <code>optional int32 offerType = 1;</code>
     */
    boolean hasOfferType();
    /**
     * <code>optional int32 offerType = 1;</code>
     */
    int getOfferType();

    // optional string offerAbbreviation = 2;
    /**
     * <code>optional string offerAbbreviation = 2;</code>
     */
    boolean hasOfferAbbreviation();
    /**
     * <code>optional string offerAbbreviation = 2;</code>
     */
    java.lang.String getOfferAbbreviation();
    /**
     * <code>optional string offerAbbreviation = 2;</code>
     */
    com.google.protobuf.ByteString
        getOfferAbbreviationBytes();

    // optional string rentalHeader = 3;
    /**
     * <code>optional string rentalHeader = 3;</code>
     */
    boolean hasRentalHeader();
    /**
     * <code>optional string rentalHeader = 3;</code>
     */
    java.lang.String getRentalHeader();
    /**
     * <code>optional string rentalHeader = 3;</code>
     */
    com.google.protobuf.ByteString
        getRentalHeaderBytes();

    // repeated group Term = 4 {
    /**
     * <code>repeated group Term = 4 { ... }</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term> 
        getTermList();
    /**
     * <code>repeated group Term = 4 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term getTerm(int index);
    /**
     * <code>repeated group Term = 4 { ... }</code>
     */
    int getTermCount();
    /**
     * <code>repeated group Term = 4 { ... }</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.TermOrBuilder> 
        getTermOrBuilderList();
    /**
     * <code>repeated group Term = 4 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.TermOrBuilder getTermOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code VideoRentalTerm}
   */
  public static final class VideoRentalTerm extends
      com.google.protobuf.GeneratedMessage
      implements VideoRentalTermOrBuilder {
    // Use VideoRentalTerm.newBuilder() to construct.
    private VideoRentalTerm(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private VideoRentalTerm(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final VideoRentalTerm defaultInstance;
    public static VideoRentalTerm getDefaultInstance() {
      return defaultInstance;
    }

    public VideoRentalTerm getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private VideoRentalTerm(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              offerType_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              offerAbbreviation_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              rentalHeader_ = input.readBytes();
              break;
            }
            case 35: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                term_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term>();
                mutable_bitField0_ |= 0x00000008;
              }
              term_.add(input.readGroup(4, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.PARSER,
                  extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          term_ = java.util.Collections.unmodifiableList(term_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoRentalTerm_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoRentalTerm_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.class, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Builder.class);
    }

    public static com.google.protobuf.Parser<VideoRentalTerm> PARSER =
        new com.google.protobuf.AbstractParser<VideoRentalTerm>() {
      public VideoRentalTerm parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new VideoRentalTerm(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<VideoRentalTerm> getParserForType() {
      return PARSER;
    }

    public interface TermOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

      // optional string header = 5;
      /**
       * <code>optional string header = 5;</code>
       */
      boolean hasHeader();
      /**
       * <code>optional string header = 5;</code>
       */
      java.lang.String getHeader();
      /**
       * <code>optional string header = 5;</code>
       */
      com.google.protobuf.ByteString
          getHeaderBytes();

      // optional string body = 6;
      /**
       * <code>optional string body = 6;</code>
       */
      boolean hasBody();
      /**
       * <code>optional string body = 6;</code>
       */
      java.lang.String getBody();
      /**
       * <code>optional string body = 6;</code>
       */
      com.google.protobuf.ByteString
          getBodyBytes();
    }
    /**
     * Protobuf type {@code VideoRentalTerm.Term}
     */
    public static final class Term extends
        com.google.protobuf.GeneratedMessage
        implements TermOrBuilder {
      // Use Term.newBuilder() to construct.
      private Term(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Term(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final Term defaultInstance;
      public static Term getDefaultInstance() {
        return defaultInstance;
      }

      public Term getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Term(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 42: {
                bitField0_ |= 0x00000001;
                header_ = input.readBytes();
                break;
              }
              case 50: {
                bitField0_ |= 0x00000002;
                body_ = input.readBytes();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoRentalTerm_Term_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoRentalTerm_Term_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.class, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.Builder.class);
      }

      public static com.google.protobuf.Parser<Term> PARSER =
          new com.google.protobuf.AbstractParser<Term>() {
        public Term parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Term(input, extensionRegistry);
        }
      };

      @java.lang.Override
      public com.google.protobuf.Parser<Term> getParserForType() {
        return PARSER;
      }

      private int bitField0_;
      // optional string header = 5;
      public static final int HEADER_FIELD_NUMBER = 5;
      private java.lang.Object header_;
      /**
       * <code>optional string header = 5;</code>
       */
      public boolean hasHeader() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string header = 5;</code>
       */
      public java.lang.String getHeader() {
        java.lang.Object ref = header_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            header_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string header = 5;</code>
       */
      public com.google.protobuf.ByteString
          getHeaderBytes() {
        java.lang.Object ref = header_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          header_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // optional string body = 6;
      public static final int BODY_FIELD_NUMBER = 6;
      private java.lang.Object body_;
      /**
       * <code>optional string body = 6;</code>
       */
      public boolean hasBody() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string body = 6;</code>
       */
      public java.lang.String getBody() {
        java.lang.Object ref = body_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            body_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string body = 6;</code>
       */
      public com.google.protobuf.ByteString
          getBodyBytes() {
        java.lang.Object ref = body_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          body_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private void initFields() {
        header_ = "";
        body_ = "";
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(5, getHeaderBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(6, getBodyBytes());
        }
        getUnknownFields().writeTo(output);
      }

      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(5, getHeaderBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(6, getBodyBytes());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code VideoRentalTerm.Term}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.TermOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoRentalTerm_Term_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoRentalTerm_Term_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.class, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.Builder.class);
        }

        // Construct using com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          header_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          body_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoRentalTerm_Term_descriptor;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term getDefaultInstanceForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.getDefaultInstance();
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term build() {
          com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term buildPartial() {
          com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term result = new com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.header_ = header_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.body_ = body_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term) {
            return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term other) {
          if (other == com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.getDefaultInstance()) return this;
          if (other.hasHeader()) {
            bitField0_ |= 0x00000001;
            header_ = other.header_;
            onChanged();
          }
          if (other.hasBody()) {
            bitField0_ |= 0x00000002;
            body_ = other.body_;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        // optional string header = 5;
        private java.lang.Object header_ = "";
        /**
         * <code>optional string header = 5;</code>
         */
        public boolean hasHeader() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string header = 5;</code>
         */
        public java.lang.String getHeader() {
          java.lang.Object ref = header_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            header_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string header = 5;</code>
         */
        public com.google.protobuf.ByteString
            getHeaderBytes() {
          java.lang.Object ref = header_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            header_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string header = 5;</code>
         */
        public Builder setHeader(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          header_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string header = 5;</code>
         */
        public Builder clearHeader() {
          bitField0_ = (bitField0_ & ~0x00000001);
          header_ = getDefaultInstance().getHeader();
          onChanged();
          return this;
        }
        /**
         * <code>optional string header = 5;</code>
         */
        public Builder setHeaderBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          header_ = value;
          onChanged();
          return this;
        }

        // optional string body = 6;
        private java.lang.Object body_ = "";
        /**
         * <code>optional string body = 6;</code>
         */
        public boolean hasBody() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string body = 6;</code>
         */
        public java.lang.String getBody() {
          java.lang.Object ref = body_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            body_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string body = 6;</code>
         */
        public com.google.protobuf.ByteString
            getBodyBytes() {
          java.lang.Object ref = body_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            body_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string body = 6;</code>
         */
        public Builder setBody(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          body_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string body = 6;</code>
         */
        public Builder clearBody() {
          bitField0_ = (bitField0_ & ~0x00000002);
          body_ = getDefaultInstance().getBody();
          onChanged();
          return this;
        }
        /**
         * <code>optional string body = 6;</code>
         */
        public Builder setBodyBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          body_ = value;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:VideoRentalTerm.Term)
      }

      static {
        defaultInstance = new Term(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:VideoRentalTerm.Term)
    }

    private int bitField0_;
    // optional int32 offerType = 1;
    public static final int OFFERTYPE_FIELD_NUMBER = 1;
    private int offerType_;
    /**
     * <code>optional int32 offerType = 1;</code>
     */
    public boolean hasOfferType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 offerType = 1;</code>
     */
    public int getOfferType() {
      return offerType_;
    }

    // optional string offerAbbreviation = 2;
    public static final int OFFERABBREVIATION_FIELD_NUMBER = 2;
    private java.lang.Object offerAbbreviation_;
    /**
     * <code>optional string offerAbbreviation = 2;</code>
     */
    public boolean hasOfferAbbreviation() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string offerAbbreviation = 2;</code>
     */
    public java.lang.String getOfferAbbreviation() {
      java.lang.Object ref = offerAbbreviation_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          offerAbbreviation_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string offerAbbreviation = 2;</code>
     */
    public com.google.protobuf.ByteString
        getOfferAbbreviationBytes() {
      java.lang.Object ref = offerAbbreviation_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        offerAbbreviation_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string rentalHeader = 3;
    public static final int RENTALHEADER_FIELD_NUMBER = 3;
    private java.lang.Object rentalHeader_;
    /**
     * <code>optional string rentalHeader = 3;</code>
     */
    public boolean hasRentalHeader() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string rentalHeader = 3;</code>
     */
    public java.lang.String getRentalHeader() {
      java.lang.Object ref = rentalHeader_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          rentalHeader_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string rentalHeader = 3;</code>
     */
    public com.google.protobuf.ByteString
        getRentalHeaderBytes() {
      java.lang.Object ref = rentalHeader_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        rentalHeader_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated group Term = 4 {
    public static final int TERM_FIELD_NUMBER = 4;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term> term_;
    /**
     * <code>repeated group Term = 4 { ... }</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term> getTermList() {
      return term_;
    }
    /**
     * <code>repeated group Term = 4 { ... }</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.TermOrBuilder> 
        getTermOrBuilderList() {
      return term_;
    }
    /**
     * <code>repeated group Term = 4 { ... }</code>
     */
    public int getTermCount() {
      return term_.size();
    }
    /**
     * <code>repeated group Term = 4 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term getTerm(int index) {
      return term_.get(index);
    }
    /**
     * <code>repeated group Term = 4 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.TermOrBuilder getTermOrBuilder(
        int index) {
      return term_.get(index);
    }

    private void initFields() {
      offerType_ = 0;
      offerAbbreviation_ = "";
      rentalHeader_ = "";
      term_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, offerType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getOfferAbbreviationBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getRentalHeaderBytes());
      }
      for (int i = 0; i < term_.size(); i++) {
        output.writeGroup(4, term_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, offerType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getOfferAbbreviationBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getRentalHeaderBytes());
      }
      for (int i = 0; i < term_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeGroupSize(4, term_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code VideoRentalTerm}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTermOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoRentalTerm_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoRentalTerm_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.class, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getTermFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        offerType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        offerAbbreviation_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        rentalHeader_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        if (termBuilder_ == null) {
          term_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          termBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_VideoRentalTerm_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm build() {
        com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm result = new com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.offerType_ = offerType_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.offerAbbreviation_ = offerAbbreviation_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.rentalHeader_ = rentalHeader_;
        if (termBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            term_ = java.util.Collections.unmodifiableList(term_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.term_ = term_;
        } else {
          result.term_ = termBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.getDefaultInstance()) return this;
        if (other.hasOfferType()) {
          setOfferType(other.getOfferType());
        }
        if (other.hasOfferAbbreviation()) {
          bitField0_ |= 0x00000002;
          offerAbbreviation_ = other.offerAbbreviation_;
          onChanged();
        }
        if (other.hasRentalHeader()) {
          bitField0_ |= 0x00000004;
          rentalHeader_ = other.rentalHeader_;
          onChanged();
        }
        if (termBuilder_ == null) {
          if (!other.term_.isEmpty()) {
            if (term_.isEmpty()) {
              term_ = other.term_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureTermIsMutable();
              term_.addAll(other.term_);
            }
            onChanged();
          }
        } else {
          if (!other.term_.isEmpty()) {
            if (termBuilder_.isEmpty()) {
              termBuilder_.dispose();
              termBuilder_ = null;
              term_ = other.term_;
              bitField0_ = (bitField0_ & ~0x00000008);
              termBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getTermFieldBuilder() : null;
            } else {
              termBuilder_.addAllMessages(other.term_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 offerType = 1;
      private int offerType_ ;
      /**
       * <code>optional int32 offerType = 1;</code>
       */
      public boolean hasOfferType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 offerType = 1;</code>
       */
      public int getOfferType() {
        return offerType_;
      }
      /**
       * <code>optional int32 offerType = 1;</code>
       */
      public Builder setOfferType(int value) {
        bitField0_ |= 0x00000001;
        offerType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 offerType = 1;</code>
       */
      public Builder clearOfferType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        offerType_ = 0;
        onChanged();
        return this;
      }

      // optional string offerAbbreviation = 2;
      private java.lang.Object offerAbbreviation_ = "";
      /**
       * <code>optional string offerAbbreviation = 2;</code>
       */
      public boolean hasOfferAbbreviation() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string offerAbbreviation = 2;</code>
       */
      public java.lang.String getOfferAbbreviation() {
        java.lang.Object ref = offerAbbreviation_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          offerAbbreviation_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string offerAbbreviation = 2;</code>
       */
      public com.google.protobuf.ByteString
          getOfferAbbreviationBytes() {
        java.lang.Object ref = offerAbbreviation_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          offerAbbreviation_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string offerAbbreviation = 2;</code>
       */
      public Builder setOfferAbbreviation(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        offerAbbreviation_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string offerAbbreviation = 2;</code>
       */
      public Builder clearOfferAbbreviation() {
        bitField0_ = (bitField0_ & ~0x00000002);
        offerAbbreviation_ = getDefaultInstance().getOfferAbbreviation();
        onChanged();
        return this;
      }
      /**
       * <code>optional string offerAbbreviation = 2;</code>
       */
      public Builder setOfferAbbreviationBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        offerAbbreviation_ = value;
        onChanged();
        return this;
      }

      // optional string rentalHeader = 3;
      private java.lang.Object rentalHeader_ = "";
      /**
       * <code>optional string rentalHeader = 3;</code>
       */
      public boolean hasRentalHeader() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string rentalHeader = 3;</code>
       */
      public java.lang.String getRentalHeader() {
        java.lang.Object ref = rentalHeader_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          rentalHeader_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string rentalHeader = 3;</code>
       */
      public com.google.protobuf.ByteString
          getRentalHeaderBytes() {
        java.lang.Object ref = rentalHeader_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          rentalHeader_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string rentalHeader = 3;</code>
       */
      public Builder setRentalHeader(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        rentalHeader_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string rentalHeader = 3;</code>
       */
      public Builder clearRentalHeader() {
        bitField0_ = (bitField0_ & ~0x00000004);
        rentalHeader_ = getDefaultInstance().getRentalHeader();
        onChanged();
        return this;
      }
      /**
       * <code>optional string rentalHeader = 3;</code>
       */
      public Builder setRentalHeaderBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        rentalHeader_ = value;
        onChanged();
        return this;
      }

      // repeated group Term = 4 {
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term> term_ =
        java.util.Collections.emptyList();
      private void ensureTermIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          term_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term>(term_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.Builder, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.TermOrBuilder> termBuilder_;

      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term> getTermList() {
        if (termBuilder_ == null) {
          return java.util.Collections.unmodifiableList(term_);
        } else {
          return termBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public int getTermCount() {
        if (termBuilder_ == null) {
          return term_.size();
        } else {
          return termBuilder_.getCount();
        }
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term getTerm(int index) {
        if (termBuilder_ == null) {
          return term_.get(index);
        } else {
          return termBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public Builder setTerm(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term value) {
        if (termBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTermIsMutable();
          term_.set(index, value);
          onChanged();
        } else {
          termBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public Builder setTerm(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.Builder builderForValue) {
        if (termBuilder_ == null) {
          ensureTermIsMutable();
          term_.set(index, builderForValue.build());
          onChanged();
        } else {
          termBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public Builder addTerm(com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term value) {
        if (termBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTermIsMutable();
          term_.add(value);
          onChanged();
        } else {
          termBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public Builder addTerm(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term value) {
        if (termBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTermIsMutable();
          term_.add(index, value);
          onChanged();
        } else {
          termBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public Builder addTerm(
          com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.Builder builderForValue) {
        if (termBuilder_ == null) {
          ensureTermIsMutable();
          term_.add(builderForValue.build());
          onChanged();
        } else {
          termBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public Builder addTerm(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.Builder builderForValue) {
        if (termBuilder_ == null) {
          ensureTermIsMutable();
          term_.add(index, builderForValue.build());
          onChanged();
        } else {
          termBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public Builder addAllTerm(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term> values) {
        if (termBuilder_ == null) {
          ensureTermIsMutable();
          super.addAll(values, term_);
          onChanged();
        } else {
          termBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public Builder clearTerm() {
        if (termBuilder_ == null) {
          term_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          termBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public Builder removeTerm(int index) {
        if (termBuilder_ == null) {
          ensureTermIsMutable();
          term_.remove(index);
          onChanged();
        } else {
          termBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.Builder getTermBuilder(
          int index) {
        return getTermFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.TermOrBuilder getTermOrBuilder(
          int index) {
        if (termBuilder_ == null) {
          return term_.get(index);  } else {
          return termBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.TermOrBuilder> 
           getTermOrBuilderList() {
        if (termBuilder_ != null) {
          return termBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(term_);
        }
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.Builder addTermBuilder() {
        return getTermFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.getDefaultInstance());
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.Builder addTermBuilder(
          int index) {
        return getTermFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.getDefaultInstance());
      }
      /**
       * <code>repeated group Term = 4 { ... }</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.Builder> 
           getTermBuilderList() {
        return getTermFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.Builder, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.TermOrBuilder> 
          getTermFieldBuilder() {
        if (termBuilder_ == null) {
          termBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.Term.Builder, com.akdeniz.googleplaycrawler.GooglePlay.VideoRentalTerm.TermOrBuilder>(
                  term_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          term_ = null;
        }
        return termBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:VideoRentalTerm)
    }

    static {
      defaultInstance = new VideoRentalTerm(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:VideoRentalTerm)
  }

  public interface BucketOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .DocV1 document = 1;
    /**
     * <code>repeated .DocV1 document = 1;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV1> 
        getDocumentList();
    /**
     * <code>repeated .DocV1 document = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocV1 getDocument(int index);
    /**
     * <code>repeated .DocV1 document = 1;</code>
     */
    int getDocumentCount();
    /**
     * <code>repeated .DocV1 document = 1;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder> 
        getDocumentOrBuilderList();
    /**
     * <code>repeated .DocV1 document = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder getDocumentOrBuilder(
        int index);

    // optional bool multiCorpus = 2;
    /**
     * <code>optional bool multiCorpus = 2;</code>
     */
    boolean hasMultiCorpus();
    /**
     * <code>optional bool multiCorpus = 2;</code>
     */
    boolean getMultiCorpus();

    // optional string title = 3;
    /**
     * <code>optional string title = 3;</code>
     */
    boolean hasTitle();
    /**
     * <code>optional string title = 3;</code>
     */
    java.lang.String getTitle();
    /**
     * <code>optional string title = 3;</code>
     */
    com.google.protobuf.ByteString
        getTitleBytes();

    // optional string iconUrl = 4;
    /**
     * <code>optional string iconUrl = 4;</code>
     */
    boolean hasIconUrl();
    /**
     * <code>optional string iconUrl = 4;</code>
     */
    java.lang.String getIconUrl();
    /**
     * <code>optional string iconUrl = 4;</code>
     */
    com.google.protobuf.ByteString
        getIconUrlBytes();

    // optional string fullContentsUrl = 5;
    /**
     * <code>optional string fullContentsUrl = 5;</code>
     */
    boolean hasFullContentsUrl();
    /**
     * <code>optional string fullContentsUrl = 5;</code>
     */
    java.lang.String getFullContentsUrl();
    /**
     * <code>optional string fullContentsUrl = 5;</code>
     */
    com.google.protobuf.ByteString
        getFullContentsUrlBytes();

    // optional double relevance = 6;
    /**
     * <code>optional double relevance = 6;</code>
     */
    boolean hasRelevance();
    /**
     * <code>optional double relevance = 6;</code>
     */
    double getRelevance();

    // optional int64 estimatedResults = 7;
    /**
     * <code>optional int64 estimatedResults = 7;</code>
     */
    boolean hasEstimatedResults();
    /**
     * <code>optional int64 estimatedResults = 7;</code>
     */
    long getEstimatedResults();

    // optional string analyticsCookie = 8;
    /**
     * <code>optional string analyticsCookie = 8;</code>
     */
    boolean hasAnalyticsCookie();
    /**
     * <code>optional string analyticsCookie = 8;</code>
     */
    java.lang.String getAnalyticsCookie();
    /**
     * <code>optional string analyticsCookie = 8;</code>
     */
    com.google.protobuf.ByteString
        getAnalyticsCookieBytes();

    // optional string fullContentsListUrl = 9;
    /**
     * <code>optional string fullContentsListUrl = 9;</code>
     */
    boolean hasFullContentsListUrl();
    /**
     * <code>optional string fullContentsListUrl = 9;</code>
     */
    java.lang.String getFullContentsListUrl();
    /**
     * <code>optional string fullContentsListUrl = 9;</code>
     */
    com.google.protobuf.ByteString
        getFullContentsListUrlBytes();

    // optional string nextPageUrl = 10;
    /**
     * <code>optional string nextPageUrl = 10;</code>
     */
    boolean hasNextPageUrl();
    /**
     * <code>optional string nextPageUrl = 10;</code>
     */
    java.lang.String getNextPageUrl();
    /**
     * <code>optional string nextPageUrl = 10;</code>
     */
    com.google.protobuf.ByteString
        getNextPageUrlBytes();

    // optional bool ordered = 11;
    /**
     * <code>optional bool ordered = 11;</code>
     */
    boolean hasOrdered();
    /**
     * <code>optional bool ordered = 11;</code>
     */
    boolean getOrdered();
  }
  /**
   * Protobuf type {@code Bucket}
   */
  public static final class Bucket extends
      com.google.protobuf.GeneratedMessage
      implements BucketOrBuilder {
    // Use Bucket.newBuilder() to construct.
    private Bucket(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Bucket(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Bucket defaultInstance;
    public static Bucket getDefaultInstance() {
      return defaultInstance;
    }

    public Bucket getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Bucket(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                document_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.DocV1>();
                mutable_bitField0_ |= 0x00000001;
              }
              document_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.DocV1.PARSER, extensionRegistry));
              break;
            }
            case 16: {
              bitField0_ |= 0x00000001;
              multiCorpus_ = input.readBool();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000002;
              title_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000004;
              iconUrl_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000008;
              fullContentsUrl_ = input.readBytes();
              break;
            }
            case 49: {
              bitField0_ |= 0x00000010;
              relevance_ = input.readDouble();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000020;
              estimatedResults_ = input.readInt64();
              break;
            }
            case 66: {
              bitField0_ |= 0x00000040;
              analyticsCookie_ = input.readBytes();
              break;
            }
            case 74: {
              bitField0_ |= 0x00000080;
              fullContentsListUrl_ = input.readBytes();
              break;
            }
            case 82: {
              bitField0_ |= 0x00000100;
              nextPageUrl_ = input.readBytes();
              break;
            }
            case 88: {
              bitField0_ |= 0x00000200;
              ordered_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          document_ = java.util.Collections.unmodifiableList(document_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Bucket_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Bucket_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Bucket.class, com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder.class);
    }

    public static com.google.protobuf.Parser<Bucket> PARSER =
        new com.google.protobuf.AbstractParser<Bucket>() {
      public Bucket parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Bucket(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Bucket> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // repeated .DocV1 document = 1;
    public static final int DOCUMENT_FIELD_NUMBER = 1;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV1> document_;
    /**
     * <code>repeated .DocV1 document = 1;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV1> getDocumentList() {
      return document_;
    }
    /**
     * <code>repeated .DocV1 document = 1;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder> 
        getDocumentOrBuilderList() {
      return document_;
    }
    /**
     * <code>repeated .DocV1 document = 1;</code>
     */
    public int getDocumentCount() {
      return document_.size();
    }
    /**
     * <code>repeated .DocV1 document = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocV1 getDocument(int index) {
      return document_.get(index);
    }
    /**
     * <code>repeated .DocV1 document = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder getDocumentOrBuilder(
        int index) {
      return document_.get(index);
    }

    // optional bool multiCorpus = 2;
    public static final int MULTICORPUS_FIELD_NUMBER = 2;
    private boolean multiCorpus_;
    /**
     * <code>optional bool multiCorpus = 2;</code>
     */
    public boolean hasMultiCorpus() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool multiCorpus = 2;</code>
     */
    public boolean getMultiCorpus() {
      return multiCorpus_;
    }

    // optional string title = 3;
    public static final int TITLE_FIELD_NUMBER = 3;
    private java.lang.Object title_;
    /**
     * <code>optional string title = 3;</code>
     */
    public boolean hasTitle() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string title = 3;</code>
     */
    public java.lang.String getTitle() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          title_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string title = 3;</code>
     */
    public com.google.protobuf.ByteString
        getTitleBytes() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        title_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string iconUrl = 4;
    public static final int ICONURL_FIELD_NUMBER = 4;
    private java.lang.Object iconUrl_;
    /**
     * <code>optional string iconUrl = 4;</code>
     */
    public boolean hasIconUrl() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string iconUrl = 4;</code>
     */
    public java.lang.String getIconUrl() {
      java.lang.Object ref = iconUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          iconUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string iconUrl = 4;</code>
     */
    public com.google.protobuf.ByteString
        getIconUrlBytes() {
      java.lang.Object ref = iconUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        iconUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string fullContentsUrl = 5;
    public static final int FULLCONTENTSURL_FIELD_NUMBER = 5;
    private java.lang.Object fullContentsUrl_;
    /**
     * <code>optional string fullContentsUrl = 5;</code>
     */
    public boolean hasFullContentsUrl() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string fullContentsUrl = 5;</code>
     */
    public java.lang.String getFullContentsUrl() {
      java.lang.Object ref = fullContentsUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          fullContentsUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string fullContentsUrl = 5;</code>
     */
    public com.google.protobuf.ByteString
        getFullContentsUrlBytes() {
      java.lang.Object ref = fullContentsUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        fullContentsUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional double relevance = 6;
    public static final int RELEVANCE_FIELD_NUMBER = 6;
    private double relevance_;
    /**
     * <code>optional double relevance = 6;</code>
     */
    public boolean hasRelevance() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional double relevance = 6;</code>
     */
    public double getRelevance() {
      return relevance_;
    }

    // optional int64 estimatedResults = 7;
    public static final int ESTIMATEDRESULTS_FIELD_NUMBER = 7;
    private long estimatedResults_;
    /**
     * <code>optional int64 estimatedResults = 7;</code>
     */
    public boolean hasEstimatedResults() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional int64 estimatedResults = 7;</code>
     */
    public long getEstimatedResults() {
      return estimatedResults_;
    }

    // optional string analyticsCookie = 8;
    public static final int ANALYTICSCOOKIE_FIELD_NUMBER = 8;
    private java.lang.Object analyticsCookie_;
    /**
     * <code>optional string analyticsCookie = 8;</code>
     */
    public boolean hasAnalyticsCookie() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional string analyticsCookie = 8;</code>
     */
    public java.lang.String getAnalyticsCookie() {
      java.lang.Object ref = analyticsCookie_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          analyticsCookie_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string analyticsCookie = 8;</code>
     */
    public com.google.protobuf.ByteString
        getAnalyticsCookieBytes() {
      java.lang.Object ref = analyticsCookie_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        analyticsCookie_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string fullContentsListUrl = 9;
    public static final int FULLCONTENTSLISTURL_FIELD_NUMBER = 9;
    private java.lang.Object fullContentsListUrl_;
    /**
     * <code>optional string fullContentsListUrl = 9;</code>
     */
    public boolean hasFullContentsListUrl() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional string fullContentsListUrl = 9;</code>
     */
    public java.lang.String getFullContentsListUrl() {
      java.lang.Object ref = fullContentsListUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          fullContentsListUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string fullContentsListUrl = 9;</code>
     */
    public com.google.protobuf.ByteString
        getFullContentsListUrlBytes() {
      java.lang.Object ref = fullContentsListUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        fullContentsListUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string nextPageUrl = 10;
    public static final int NEXTPAGEURL_FIELD_NUMBER = 10;
    private java.lang.Object nextPageUrl_;
    /**
     * <code>optional string nextPageUrl = 10;</code>
     */
    public boolean hasNextPageUrl() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional string nextPageUrl = 10;</code>
     */
    public java.lang.String getNextPageUrl() {
      java.lang.Object ref = nextPageUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          nextPageUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string nextPageUrl = 10;</code>
     */
    public com.google.protobuf.ByteString
        getNextPageUrlBytes() {
      java.lang.Object ref = nextPageUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        nextPageUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool ordered = 11;
    public static final int ORDERED_FIELD_NUMBER = 11;
    private boolean ordered_;
    /**
     * <code>optional bool ordered = 11;</code>
     */
    public boolean hasOrdered() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional bool ordered = 11;</code>
     */
    public boolean getOrdered() {
      return ordered_;
    }

    private void initFields() {
      document_ = java.util.Collections.emptyList();
      multiCorpus_ = false;
      title_ = "";
      iconUrl_ = "";
      fullContentsUrl_ = "";
      relevance_ = 0D;
      estimatedResults_ = 0L;
      analyticsCookie_ = "";
      fullContentsListUrl_ = "";
      nextPageUrl_ = "";
      ordered_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < document_.size(); i++) {
        output.writeMessage(1, document_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(2, multiCorpus_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(3, getTitleBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(4, getIconUrlBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(5, getFullContentsUrlBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeDouble(6, relevance_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt64(7, estimatedResults_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(8, getAnalyticsCookieBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBytes(9, getFullContentsListUrlBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBytes(10, getNextPageUrlBytes());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBool(11, ordered_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < document_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, document_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, multiCorpus_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getTitleBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getIconUrlBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getFullContentsUrlBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(6, relevance_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(7, estimatedResults_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getAnalyticsCookieBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(9, getFullContentsListUrlBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(10, getNextPageUrlBytes());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(11, ordered_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.Bucket parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Bucket parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Bucket parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Bucket parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Bucket parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Bucket parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Bucket parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Bucket parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Bucket parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Bucket parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Bucket prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Bucket}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Bucket_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Bucket_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Bucket.class, com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Bucket.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getDocumentFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (documentBuilder_ == null) {
          document_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          documentBuilder_.clear();
        }
        multiCorpus_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        title_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        iconUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        fullContentsUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        relevance_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000020);
        estimatedResults_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        analyticsCookie_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        fullContentsListUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000100);
        nextPageUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        ordered_ = false;
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Bucket_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Bucket getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Bucket.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Bucket build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Bucket result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Bucket buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Bucket result = new com.akdeniz.googleplaycrawler.GooglePlay.Bucket(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (documentBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            document_ = java.util.Collections.unmodifiableList(document_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.document_ = document_;
        } else {
          result.document_ = documentBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000001;
        }
        result.multiCorpus_ = multiCorpus_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000002;
        }
        result.title_ = title_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.iconUrl_ = iconUrl_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        result.fullContentsUrl_ = fullContentsUrl_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000010;
        }
        result.relevance_ = relevance_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000020;
        }
        result.estimatedResults_ = estimatedResults_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000040;
        }
        result.analyticsCookie_ = analyticsCookie_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000080;
        }
        result.fullContentsListUrl_ = fullContentsListUrl_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000100;
        }
        result.nextPageUrl_ = nextPageUrl_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000200;
        }
        result.ordered_ = ordered_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Bucket) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Bucket)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Bucket other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Bucket.getDefaultInstance()) return this;
        if (documentBuilder_ == null) {
          if (!other.document_.isEmpty()) {
            if (document_.isEmpty()) {
              document_ = other.document_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureDocumentIsMutable();
              document_.addAll(other.document_);
            }
            onChanged();
          }
        } else {
          if (!other.document_.isEmpty()) {
            if (documentBuilder_.isEmpty()) {
              documentBuilder_.dispose();
              documentBuilder_ = null;
              document_ = other.document_;
              bitField0_ = (bitField0_ & ~0x00000001);
              documentBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getDocumentFieldBuilder() : null;
            } else {
              documentBuilder_.addAllMessages(other.document_);
            }
          }
        }
        if (other.hasMultiCorpus()) {
          setMultiCorpus(other.getMultiCorpus());
        }
        if (other.hasTitle()) {
          bitField0_ |= 0x00000004;
          title_ = other.title_;
          onChanged();
        }
        if (other.hasIconUrl()) {
          bitField0_ |= 0x00000008;
          iconUrl_ = other.iconUrl_;
          onChanged();
        }
        if (other.hasFullContentsUrl()) {
          bitField0_ |= 0x00000010;
          fullContentsUrl_ = other.fullContentsUrl_;
          onChanged();
        }
        if (other.hasRelevance()) {
          setRelevance(other.getRelevance());
        }
        if (other.hasEstimatedResults()) {
          setEstimatedResults(other.getEstimatedResults());
        }
        if (other.hasAnalyticsCookie()) {
          bitField0_ |= 0x00000080;
          analyticsCookie_ = other.analyticsCookie_;
          onChanged();
        }
        if (other.hasFullContentsListUrl()) {
          bitField0_ |= 0x00000100;
          fullContentsListUrl_ = other.fullContentsListUrl_;
          onChanged();
        }
        if (other.hasNextPageUrl()) {
          bitField0_ |= 0x00000200;
          nextPageUrl_ = other.nextPageUrl_;
          onChanged();
        }
        if (other.hasOrdered()) {
          setOrdered(other.getOrdered());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.Bucket parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.Bucket) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .DocV1 document = 1;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV1> document_ =
        java.util.Collections.emptyList();
      private void ensureDocumentIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          document_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.DocV1>(document_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocV1, com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder> documentBuilder_;

      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV1> getDocumentList() {
        if (documentBuilder_ == null) {
          return java.util.Collections.unmodifiableList(document_);
        } else {
          return documentBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public int getDocumentCount() {
        if (documentBuilder_ == null) {
          return document_.size();
        } else {
          return documentBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV1 getDocument(int index) {
        if (documentBuilder_ == null) {
          return document_.get(index);
        } else {
          return documentBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public Builder setDocument(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV1 value) {
        if (documentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocumentIsMutable();
          document_.set(index, value);
          onChanged();
        } else {
          documentBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public Builder setDocument(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder builderForValue) {
        if (documentBuilder_ == null) {
          ensureDocumentIsMutable();
          document_.set(index, builderForValue.build());
          onChanged();
        } else {
          documentBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public Builder addDocument(com.akdeniz.googleplaycrawler.GooglePlay.DocV1 value) {
        if (documentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocumentIsMutable();
          document_.add(value);
          onChanged();
        } else {
          documentBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public Builder addDocument(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV1 value) {
        if (documentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocumentIsMutable();
          document_.add(index, value);
          onChanged();
        } else {
          documentBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public Builder addDocument(
          com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder builderForValue) {
        if (documentBuilder_ == null) {
          ensureDocumentIsMutable();
          document_.add(builderForValue.build());
          onChanged();
        } else {
          documentBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public Builder addDocument(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder builderForValue) {
        if (documentBuilder_ == null) {
          ensureDocumentIsMutable();
          document_.add(index, builderForValue.build());
          onChanged();
        } else {
          documentBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public Builder addAllDocument(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV1> values) {
        if (documentBuilder_ == null) {
          ensureDocumentIsMutable();
          super.addAll(values, document_);
          onChanged();
        } else {
          documentBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public Builder clearDocument() {
        if (documentBuilder_ == null) {
          document_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          documentBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public Builder removeDocument(int index) {
        if (documentBuilder_ == null) {
          ensureDocumentIsMutable();
          document_.remove(index);
          onChanged();
        } else {
          documentBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder getDocumentBuilder(
          int index) {
        return getDocumentFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder getDocumentOrBuilder(
          int index) {
        if (documentBuilder_ == null) {
          return document_.get(index);  } else {
          return documentBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder> 
           getDocumentOrBuilderList() {
        if (documentBuilder_ != null) {
          return documentBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(document_);
        }
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder addDocumentBuilder() {
        return getDocumentFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.DocV1.getDefaultInstance());
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder addDocumentBuilder(
          int index) {
        return getDocumentFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.DocV1.getDefaultInstance());
      }
      /**
       * <code>repeated .DocV1 document = 1;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder> 
           getDocumentBuilderList() {
        return getDocumentFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocV1, com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder> 
          getDocumentFieldBuilder() {
        if (documentBuilder_ == null) {
          documentBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DocV1, com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder>(
                  document_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          document_ = null;
        }
        return documentBuilder_;
      }

      // optional bool multiCorpus = 2;
      private boolean multiCorpus_ ;
      /**
       * <code>optional bool multiCorpus = 2;</code>
       */
      public boolean hasMultiCorpus() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool multiCorpus = 2;</code>
       */
      public boolean getMultiCorpus() {
        return multiCorpus_;
      }
      /**
       * <code>optional bool multiCorpus = 2;</code>
       */
      public Builder setMultiCorpus(boolean value) {
        bitField0_ |= 0x00000002;
        multiCorpus_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool multiCorpus = 2;</code>
       */
      public Builder clearMultiCorpus() {
        bitField0_ = (bitField0_ & ~0x00000002);
        multiCorpus_ = false;
        onChanged();
        return this;
      }

      // optional string title = 3;
      private java.lang.Object title_ = "";
      /**
       * <code>optional string title = 3;</code>
       */
      public boolean hasTitle() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public java.lang.String getTitle() {
        java.lang.Object ref = title_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          title_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public com.google.protobuf.ByteString
          getTitleBytes() {
        java.lang.Object ref = title_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          title_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public Builder setTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        title_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public Builder clearTitle() {
        bitField0_ = (bitField0_ & ~0x00000004);
        title_ = getDefaultInstance().getTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 3;</code>
       */
      public Builder setTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        title_ = value;
        onChanged();
        return this;
      }

      // optional string iconUrl = 4;
      private java.lang.Object iconUrl_ = "";
      /**
       * <code>optional string iconUrl = 4;</code>
       */
      public boolean hasIconUrl() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string iconUrl = 4;</code>
       */
      public java.lang.String getIconUrl() {
        java.lang.Object ref = iconUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          iconUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string iconUrl = 4;</code>
       */
      public com.google.protobuf.ByteString
          getIconUrlBytes() {
        java.lang.Object ref = iconUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          iconUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string iconUrl = 4;</code>
       */
      public Builder setIconUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        iconUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string iconUrl = 4;</code>
       */
      public Builder clearIconUrl() {
        bitField0_ = (bitField0_ & ~0x00000008);
        iconUrl_ = getDefaultInstance().getIconUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string iconUrl = 4;</code>
       */
      public Builder setIconUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        iconUrl_ = value;
        onChanged();
        return this;
      }

      // optional string fullContentsUrl = 5;
      private java.lang.Object fullContentsUrl_ = "";
      /**
       * <code>optional string fullContentsUrl = 5;</code>
       */
      public boolean hasFullContentsUrl() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string fullContentsUrl = 5;</code>
       */
      public java.lang.String getFullContentsUrl() {
        java.lang.Object ref = fullContentsUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          fullContentsUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string fullContentsUrl = 5;</code>
       */
      public com.google.protobuf.ByteString
          getFullContentsUrlBytes() {
        java.lang.Object ref = fullContentsUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          fullContentsUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string fullContentsUrl = 5;</code>
       */
      public Builder setFullContentsUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        fullContentsUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string fullContentsUrl = 5;</code>
       */
      public Builder clearFullContentsUrl() {
        bitField0_ = (bitField0_ & ~0x00000010);
        fullContentsUrl_ = getDefaultInstance().getFullContentsUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string fullContentsUrl = 5;</code>
       */
      public Builder setFullContentsUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        fullContentsUrl_ = value;
        onChanged();
        return this;
      }

      // optional double relevance = 6;
      private double relevance_ ;
      /**
       * <code>optional double relevance = 6;</code>
       */
      public boolean hasRelevance() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional double relevance = 6;</code>
       */
      public double getRelevance() {
        return relevance_;
      }
      /**
       * <code>optional double relevance = 6;</code>
       */
      public Builder setRelevance(double value) {
        bitField0_ |= 0x00000020;
        relevance_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional double relevance = 6;</code>
       */
      public Builder clearRelevance() {
        bitField0_ = (bitField0_ & ~0x00000020);
        relevance_ = 0D;
        onChanged();
        return this;
      }

      // optional int64 estimatedResults = 7;
      private long estimatedResults_ ;
      /**
       * <code>optional int64 estimatedResults = 7;</code>
       */
      public boolean hasEstimatedResults() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional int64 estimatedResults = 7;</code>
       */
      public long getEstimatedResults() {
        return estimatedResults_;
      }
      /**
       * <code>optional int64 estimatedResults = 7;</code>
       */
      public Builder setEstimatedResults(long value) {
        bitField0_ |= 0x00000040;
        estimatedResults_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 estimatedResults = 7;</code>
       */
      public Builder clearEstimatedResults() {
        bitField0_ = (bitField0_ & ~0x00000040);
        estimatedResults_ = 0L;
        onChanged();
        return this;
      }

      // optional string analyticsCookie = 8;
      private java.lang.Object analyticsCookie_ = "";
      /**
       * <code>optional string analyticsCookie = 8;</code>
       */
      public boolean hasAnalyticsCookie() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string analyticsCookie = 8;</code>
       */
      public java.lang.String getAnalyticsCookie() {
        java.lang.Object ref = analyticsCookie_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          analyticsCookie_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string analyticsCookie = 8;</code>
       */
      public com.google.protobuf.ByteString
          getAnalyticsCookieBytes() {
        java.lang.Object ref = analyticsCookie_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          analyticsCookie_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string analyticsCookie = 8;</code>
       */
      public Builder setAnalyticsCookie(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        analyticsCookie_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string analyticsCookie = 8;</code>
       */
      public Builder clearAnalyticsCookie() {
        bitField0_ = (bitField0_ & ~0x00000080);
        analyticsCookie_ = getDefaultInstance().getAnalyticsCookie();
        onChanged();
        return this;
      }
      /**
       * <code>optional string analyticsCookie = 8;</code>
       */
      public Builder setAnalyticsCookieBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        analyticsCookie_ = value;
        onChanged();
        return this;
      }

      // optional string fullContentsListUrl = 9;
      private java.lang.Object fullContentsListUrl_ = "";
      /**
       * <code>optional string fullContentsListUrl = 9;</code>
       */
      public boolean hasFullContentsListUrl() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional string fullContentsListUrl = 9;</code>
       */
      public java.lang.String getFullContentsListUrl() {
        java.lang.Object ref = fullContentsListUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          fullContentsListUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string fullContentsListUrl = 9;</code>
       */
      public com.google.protobuf.ByteString
          getFullContentsListUrlBytes() {
        java.lang.Object ref = fullContentsListUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          fullContentsListUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string fullContentsListUrl = 9;</code>
       */
      public Builder setFullContentsListUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        fullContentsListUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string fullContentsListUrl = 9;</code>
       */
      public Builder clearFullContentsListUrl() {
        bitField0_ = (bitField0_ & ~0x00000100);
        fullContentsListUrl_ = getDefaultInstance().getFullContentsListUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string fullContentsListUrl = 9;</code>
       */
      public Builder setFullContentsListUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        fullContentsListUrl_ = value;
        onChanged();
        return this;
      }

      // optional string nextPageUrl = 10;
      private java.lang.Object nextPageUrl_ = "";
      /**
       * <code>optional string nextPageUrl = 10;</code>
       */
      public boolean hasNextPageUrl() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional string nextPageUrl = 10;</code>
       */
      public java.lang.String getNextPageUrl() {
        java.lang.Object ref = nextPageUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          nextPageUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string nextPageUrl = 10;</code>
       */
      public com.google.protobuf.ByteString
          getNextPageUrlBytes() {
        java.lang.Object ref = nextPageUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          nextPageUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string nextPageUrl = 10;</code>
       */
      public Builder setNextPageUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        nextPageUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string nextPageUrl = 10;</code>
       */
      public Builder clearNextPageUrl() {
        bitField0_ = (bitField0_ & ~0x00000200);
        nextPageUrl_ = getDefaultInstance().getNextPageUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string nextPageUrl = 10;</code>
       */
      public Builder setNextPageUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        nextPageUrl_ = value;
        onChanged();
        return this;
      }

      // optional bool ordered = 11;
      private boolean ordered_ ;
      /**
       * <code>optional bool ordered = 11;</code>
       */
      public boolean hasOrdered() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional bool ordered = 11;</code>
       */
      public boolean getOrdered() {
        return ordered_;
      }
      /**
       * <code>optional bool ordered = 11;</code>
       */
      public Builder setOrdered(boolean value) {
        bitField0_ |= 0x00000400;
        ordered_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool ordered = 11;</code>
       */
      public Builder clearOrdered() {
        bitField0_ = (bitField0_ & ~0x00000400);
        ordered_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Bucket)
    }

    static {
      defaultInstance = new Bucket(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Bucket)
  }

  public interface ListResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .Bucket bucket = 1;
    /**
     * <code>repeated .Bucket bucket = 1;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Bucket> 
        getBucketList();
    /**
     * <code>repeated .Bucket bucket = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Bucket getBucket(int index);
    /**
     * <code>repeated .Bucket bucket = 1;</code>
     */
    int getBucketCount();
    /**
     * <code>repeated .Bucket bucket = 1;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder> 
        getBucketOrBuilderList();
    /**
     * <code>repeated .Bucket bucket = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder getBucketOrBuilder(
        int index);

    // repeated .DocV2 doc = 2;
    /**
     * <code>repeated .DocV2 doc = 2;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> 
        getDocList();
    /**
     * <code>repeated .DocV2 doc = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getDoc(int index);
    /**
     * <code>repeated .DocV2 doc = 2;</code>
     */
    int getDocCount();
    /**
     * <code>repeated .DocV2 doc = 2;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> 
        getDocOrBuilderList();
    /**
     * <code>repeated .DocV2 doc = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getDocOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code ListResponse}
   */
  public static final class ListResponse extends
      com.google.protobuf.GeneratedMessage
      implements ListResponseOrBuilder {
    // Use ListResponse.newBuilder() to construct.
    private ListResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ListResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ListResponse defaultInstance;
    public static ListResponse getDefaultInstance() {
      return defaultInstance;
    }

    public ListResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ListResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                bucket_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Bucket>();
                mutable_bitField0_ |= 0x00000001;
              }
              bucket_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Bucket.PARSER, extensionRegistry));
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                doc_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.DocV2>();
                mutable_bitField0_ |= 0x00000002;
              }
              doc_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.DocV2.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          bucket_ = java.util.Collections.unmodifiableList(bucket_);
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          doc_ = java.util.Collections.unmodifiableList(doc_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ListResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ListResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.Builder.class);
    }

    public static com.google.protobuf.Parser<ListResponse> PARSER =
        new com.google.protobuf.AbstractParser<ListResponse>() {
      public ListResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ListResponse(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ListResponse> getParserForType() {
      return PARSER;
    }

    // repeated .Bucket bucket = 1;
    public static final int BUCKET_FIELD_NUMBER = 1;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Bucket> bucket_;
    /**
     * <code>repeated .Bucket bucket = 1;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Bucket> getBucketList() {
      return bucket_;
    }
    /**
     * <code>repeated .Bucket bucket = 1;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder> 
        getBucketOrBuilderList() {
      return bucket_;
    }
    /**
     * <code>repeated .Bucket bucket = 1;</code>
     */
    public int getBucketCount() {
      return bucket_.size();
    }
    /**
     * <code>repeated .Bucket bucket = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Bucket getBucket(int index) {
      return bucket_.get(index);
    }
    /**
     * <code>repeated .Bucket bucket = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder getBucketOrBuilder(
        int index) {
      return bucket_.get(index);
    }

    // repeated .DocV2 doc = 2;
    public static final int DOC_FIELD_NUMBER = 2;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> doc_;
    /**
     * <code>repeated .DocV2 doc = 2;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> getDocList() {
      return doc_;
    }
    /**
     * <code>repeated .DocV2 doc = 2;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> 
        getDocOrBuilderList() {
      return doc_;
    }
    /**
     * <code>repeated .DocV2 doc = 2;</code>
     */
    public int getDocCount() {
      return doc_.size();
    }
    /**
     * <code>repeated .DocV2 doc = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getDoc(int index) {
      return doc_.get(index);
    }
    /**
     * <code>repeated .DocV2 doc = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getDocOrBuilder(
        int index) {
      return doc_.get(index);
    }

    private void initFields() {
      bucket_ = java.util.Collections.emptyList();
      doc_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < bucket_.size(); i++) {
        output.writeMessage(1, bucket_.get(i));
      }
      for (int i = 0; i < doc_.size(); i++) {
        output.writeMessage(2, doc_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < bucket_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, bucket_.get(i));
      }
      for (int i = 0; i < doc_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, doc_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.ListResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ListResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ListResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ListResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ListResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ListResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ListResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ListResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ListResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ListResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.ListResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code ListResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.ListResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ListResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ListResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getBucketFieldBuilder();
          getDocFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (bucketBuilder_ == null) {
          bucket_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          bucketBuilder_.clear();
        }
        if (docBuilder_ == null) {
          doc_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          docBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ListResponse_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ListResponse getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ListResponse build() {
        com.akdeniz.googleplaycrawler.GooglePlay.ListResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ListResponse buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.ListResponse result = new com.akdeniz.googleplaycrawler.GooglePlay.ListResponse(this);
        int from_bitField0_ = bitField0_;
        if (bucketBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            bucket_ = java.util.Collections.unmodifiableList(bucket_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.bucket_ = bucket_;
        } else {
          result.bucket_ = bucketBuilder_.build();
        }
        if (docBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            doc_ = java.util.Collections.unmodifiableList(doc_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.doc_ = doc_;
        } else {
          result.doc_ = docBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.ListResponse) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.ListResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.ListResponse other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.getDefaultInstance()) return this;
        if (bucketBuilder_ == null) {
          if (!other.bucket_.isEmpty()) {
            if (bucket_.isEmpty()) {
              bucket_ = other.bucket_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureBucketIsMutable();
              bucket_.addAll(other.bucket_);
            }
            onChanged();
          }
        } else {
          if (!other.bucket_.isEmpty()) {
            if (bucketBuilder_.isEmpty()) {
              bucketBuilder_.dispose();
              bucketBuilder_ = null;
              bucket_ = other.bucket_;
              bitField0_ = (bitField0_ & ~0x00000001);
              bucketBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getBucketFieldBuilder() : null;
            } else {
              bucketBuilder_.addAllMessages(other.bucket_);
            }
          }
        }
        if (docBuilder_ == null) {
          if (!other.doc_.isEmpty()) {
            if (doc_.isEmpty()) {
              doc_ = other.doc_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureDocIsMutable();
              doc_.addAll(other.doc_);
            }
            onChanged();
          }
        } else {
          if (!other.doc_.isEmpty()) {
            if (docBuilder_.isEmpty()) {
              docBuilder_.dispose();
              docBuilder_ = null;
              doc_ = other.doc_;
              bitField0_ = (bitField0_ & ~0x00000002);
              docBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getDocFieldBuilder() : null;
            } else {
              docBuilder_.addAllMessages(other.doc_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.ListResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.ListResponse) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .Bucket bucket = 1;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Bucket> bucket_ =
        java.util.Collections.emptyList();
      private void ensureBucketIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          bucket_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Bucket>(bucket_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Bucket, com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder> bucketBuilder_;

      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Bucket> getBucketList() {
        if (bucketBuilder_ == null) {
          return java.util.Collections.unmodifiableList(bucket_);
        } else {
          return bucketBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public int getBucketCount() {
        if (bucketBuilder_ == null) {
          return bucket_.size();
        } else {
          return bucketBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Bucket getBucket(int index) {
        if (bucketBuilder_ == null) {
          return bucket_.get(index);
        } else {
          return bucketBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public Builder setBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Bucket value) {
        if (bucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBucketIsMutable();
          bucket_.set(index, value);
          onChanged();
        } else {
          bucketBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public Builder setBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder builderForValue) {
        if (bucketBuilder_ == null) {
          ensureBucketIsMutable();
          bucket_.set(index, builderForValue.build());
          onChanged();
        } else {
          bucketBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public Builder addBucket(com.akdeniz.googleplaycrawler.GooglePlay.Bucket value) {
        if (bucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBucketIsMutable();
          bucket_.add(value);
          onChanged();
        } else {
          bucketBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public Builder addBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Bucket value) {
        if (bucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBucketIsMutable();
          bucket_.add(index, value);
          onChanged();
        } else {
          bucketBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public Builder addBucket(
          com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder builderForValue) {
        if (bucketBuilder_ == null) {
          ensureBucketIsMutable();
          bucket_.add(builderForValue.build());
          onChanged();
        } else {
          bucketBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public Builder addBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder builderForValue) {
        if (bucketBuilder_ == null) {
          ensureBucketIsMutable();
          bucket_.add(index, builderForValue.build());
          onChanged();
        } else {
          bucketBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public Builder addAllBucket(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Bucket> values) {
        if (bucketBuilder_ == null) {
          ensureBucketIsMutable();
          super.addAll(values, bucket_);
          onChanged();
        } else {
          bucketBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public Builder clearBucket() {
        if (bucketBuilder_ == null) {
          bucket_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          bucketBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public Builder removeBucket(int index) {
        if (bucketBuilder_ == null) {
          ensureBucketIsMutable();
          bucket_.remove(index);
          onChanged();
        } else {
          bucketBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder getBucketBuilder(
          int index) {
        return getBucketFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder getBucketOrBuilder(
          int index) {
        if (bucketBuilder_ == null) {
          return bucket_.get(index);  } else {
          return bucketBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder> 
           getBucketOrBuilderList() {
        if (bucketBuilder_ != null) {
          return bucketBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(bucket_);
        }
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder addBucketBuilder() {
        return getBucketFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Bucket.getDefaultInstance());
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder addBucketBuilder(
          int index) {
        return getBucketFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Bucket.getDefaultInstance());
      }
      /**
       * <code>repeated .Bucket bucket = 1;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder> 
           getBucketBuilderList() {
        return getBucketFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Bucket, com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder> 
          getBucketFieldBuilder() {
        if (bucketBuilder_ == null) {
          bucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Bucket, com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder>(
                  bucket_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          bucket_ = null;
        }
        return bucketBuilder_;
      }

      // repeated .DocV2 doc = 2;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> doc_ =
        java.util.Collections.emptyList();
      private void ensureDocIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          doc_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.DocV2>(doc_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> docBuilder_;

      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> getDocList() {
        if (docBuilder_ == null) {
          return java.util.Collections.unmodifiableList(doc_);
        } else {
          return docBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public int getDocCount() {
        if (docBuilder_ == null) {
          return doc_.size();
        } else {
          return docBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getDoc(int index) {
        if (docBuilder_ == null) {
          return doc_.get(index);
        } else {
          return docBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public Builder setDoc(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2 value) {
        if (docBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocIsMutable();
          doc_.set(index, value);
          onChanged();
        } else {
          docBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public Builder setDoc(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder builderForValue) {
        if (docBuilder_ == null) {
          ensureDocIsMutable();
          doc_.set(index, builderForValue.build());
          onChanged();
        } else {
          docBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public Builder addDoc(com.akdeniz.googleplaycrawler.GooglePlay.DocV2 value) {
        if (docBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocIsMutable();
          doc_.add(value);
          onChanged();
        } else {
          docBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public Builder addDoc(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2 value) {
        if (docBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocIsMutable();
          doc_.add(index, value);
          onChanged();
        } else {
          docBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public Builder addDoc(
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder builderForValue) {
        if (docBuilder_ == null) {
          ensureDocIsMutable();
          doc_.add(builderForValue.build());
          onChanged();
        } else {
          docBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public Builder addDoc(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder builderForValue) {
        if (docBuilder_ == null) {
          ensureDocIsMutable();
          doc_.add(index, builderForValue.build());
          onChanged();
        } else {
          docBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public Builder addAllDoc(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV2> values) {
        if (docBuilder_ == null) {
          ensureDocIsMutable();
          super.addAll(values, doc_);
          onChanged();
        } else {
          docBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public Builder clearDoc() {
        if (docBuilder_ == null) {
          doc_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          docBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public Builder removeDoc(int index) {
        if (docBuilder_ == null) {
          ensureDocIsMutable();
          doc_.remove(index);
          onChanged();
        } else {
          docBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder getDocBuilder(
          int index) {
        return getDocFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getDocOrBuilder(
          int index) {
        if (docBuilder_ == null) {
          return doc_.get(index);  } else {
          return docBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> 
           getDocOrBuilderList() {
        if (docBuilder_ != null) {
          return docBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(doc_);
        }
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder addDocBuilder() {
        return getDocFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance());
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder addDocBuilder(
          int index) {
        return getDocFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance());
      }
      /**
       * <code>repeated .DocV2 doc = 2;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder> 
           getDocBuilderList() {
        return getDocFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> 
          getDocFieldBuilder() {
        if (docBuilder_ == null) {
          docBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder>(
                  doc_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          doc_ = null;
        }
        return docBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:ListResponse)
    }

    static {
      defaultInstance = new ListResponse(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:ListResponse)
  }

  public interface DocV1OrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Document finskyDoc = 1;
    /**
     * <code>optional .Document finskyDoc = 1;</code>
     */
    boolean hasFinskyDoc();
    /**
     * <code>optional .Document finskyDoc = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Document getFinskyDoc();
    /**
     * <code>optional .Document finskyDoc = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getFinskyDocOrBuilder();

    // optional string docid = 2;
    /**
     * <code>optional string docid = 2;</code>
     */
    boolean hasDocid();
    /**
     * <code>optional string docid = 2;</code>
     */
    java.lang.String getDocid();
    /**
     * <code>optional string docid = 2;</code>
     */
    com.google.protobuf.ByteString
        getDocidBytes();

    // optional string detailsUrl = 3;
    /**
     * <code>optional string detailsUrl = 3;</code>
     */
    boolean hasDetailsUrl();
    /**
     * <code>optional string detailsUrl = 3;</code>
     */
    java.lang.String getDetailsUrl();
    /**
     * <code>optional string detailsUrl = 3;</code>
     */
    com.google.protobuf.ByteString
        getDetailsUrlBytes();

    // optional string reviewsUrl = 4;
    /**
     * <code>optional string reviewsUrl = 4;</code>
     */
    boolean hasReviewsUrl();
    /**
     * <code>optional string reviewsUrl = 4;</code>
     */
    java.lang.String getReviewsUrl();
    /**
     * <code>optional string reviewsUrl = 4;</code>
     */
    com.google.protobuf.ByteString
        getReviewsUrlBytes();

    // optional string relatedListUrl = 5;
    /**
     * <code>optional string relatedListUrl = 5;</code>
     */
    boolean hasRelatedListUrl();
    /**
     * <code>optional string relatedListUrl = 5;</code>
     */
    java.lang.String getRelatedListUrl();
    /**
     * <code>optional string relatedListUrl = 5;</code>
     */
    com.google.protobuf.ByteString
        getRelatedListUrlBytes();

    // optional string moreByListUrl = 6;
    /**
     * <code>optional string moreByListUrl = 6;</code>
     */
    boolean hasMoreByListUrl();
    /**
     * <code>optional string moreByListUrl = 6;</code>
     */
    java.lang.String getMoreByListUrl();
    /**
     * <code>optional string moreByListUrl = 6;</code>
     */
    com.google.protobuf.ByteString
        getMoreByListUrlBytes();

    // optional string shareUrl = 7;
    /**
     * <code>optional string shareUrl = 7;</code>
     */
    boolean hasShareUrl();
    /**
     * <code>optional string shareUrl = 7;</code>
     */
    java.lang.String getShareUrl();
    /**
     * <code>optional string shareUrl = 7;</code>
     */
    com.google.protobuf.ByteString
        getShareUrlBytes();

    // optional string creator = 8;
    /**
     * <code>optional string creator = 8;</code>
     */
    boolean hasCreator();
    /**
     * <code>optional string creator = 8;</code>
     */
    java.lang.String getCreator();
    /**
     * <code>optional string creator = 8;</code>
     */
    com.google.protobuf.ByteString
        getCreatorBytes();

    // optional .DocumentDetails details = 9;
    /**
     * <code>optional .DocumentDetails details = 9;</code>
     */
    boolean hasDetails();
    /**
     * <code>optional .DocumentDetails details = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails getDetails();
    /**
     * <code>optional .DocumentDetails details = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetailsOrBuilder getDetailsOrBuilder();

    // optional string descriptionHtml = 10;
    /**
     * <code>optional string descriptionHtml = 10;</code>
     */
    boolean hasDescriptionHtml();
    /**
     * <code>optional string descriptionHtml = 10;</code>
     */
    java.lang.String getDescriptionHtml();
    /**
     * <code>optional string descriptionHtml = 10;</code>
     */
    com.google.protobuf.ByteString
        getDescriptionHtmlBytes();

    // optional string relatedBrowseUrl = 11;
    /**
     * <code>optional string relatedBrowseUrl = 11;</code>
     */
    boolean hasRelatedBrowseUrl();
    /**
     * <code>optional string relatedBrowseUrl = 11;</code>
     */
    java.lang.String getRelatedBrowseUrl();
    /**
     * <code>optional string relatedBrowseUrl = 11;</code>
     */
    com.google.protobuf.ByteString
        getRelatedBrowseUrlBytes();

    // optional string moreByBrowseUrl = 12;
    /**
     * <code>optional string moreByBrowseUrl = 12;</code>
     */
    boolean hasMoreByBrowseUrl();
    /**
     * <code>optional string moreByBrowseUrl = 12;</code>
     */
    java.lang.String getMoreByBrowseUrl();
    /**
     * <code>optional string moreByBrowseUrl = 12;</code>
     */
    com.google.protobuf.ByteString
        getMoreByBrowseUrlBytes();

    // optional string relatedHeader = 13;
    /**
     * <code>optional string relatedHeader = 13;</code>
     */
    boolean hasRelatedHeader();
    /**
     * <code>optional string relatedHeader = 13;</code>
     */
    java.lang.String getRelatedHeader();
    /**
     * <code>optional string relatedHeader = 13;</code>
     */
    com.google.protobuf.ByteString
        getRelatedHeaderBytes();

    // optional string moreByHeader = 14;
    /**
     * <code>optional string moreByHeader = 14;</code>
     */
    boolean hasMoreByHeader();
    /**
     * <code>optional string moreByHeader = 14;</code>
     */
    java.lang.String getMoreByHeader();
    /**
     * <code>optional string moreByHeader = 14;</code>
     */
    com.google.protobuf.ByteString
        getMoreByHeaderBytes();

    // optional string title = 15;
    /**
     * <code>optional string title = 15;</code>
     */
    boolean hasTitle();
    /**
     * <code>optional string title = 15;</code>
     */
    java.lang.String getTitle();
    /**
     * <code>optional string title = 15;</code>
     */
    com.google.protobuf.ByteString
        getTitleBytes();

    // optional .PlusOneData plusOneData = 16;
    /**
     * <code>optional .PlusOneData plusOneData = 16;</code>
     */
    boolean hasPlusOneData();
    /**
     * <code>optional .PlusOneData plusOneData = 16;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData getPlusOneData();
    /**
     * <code>optional .PlusOneData plusOneData = 16;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PlusOneDataOrBuilder getPlusOneDataOrBuilder();

    // optional string warningMessage = 17;
    /**
     * <code>optional string warningMessage = 17;</code>
     */
    boolean hasWarningMessage();
    /**
     * <code>optional string warningMessage = 17;</code>
     */
    java.lang.String getWarningMessage();
    /**
     * <code>optional string warningMessage = 17;</code>
     */
    com.google.protobuf.ByteString
        getWarningMessageBytes();
  }
  /**
   * Protobuf type {@code DocV1}
   */
  public static final class DocV1 extends
      com.google.protobuf.GeneratedMessage
      implements DocV1OrBuilder {
    // Use DocV1.newBuilder() to construct.
    private DocV1(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DocV1(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final DocV1 defaultInstance;
    public static DocV1 getDefaultInstance() {
      return defaultInstance;
    }

    public DocV1 getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DocV1(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = finskyDoc_.toBuilder();
              }
              finskyDoc_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Document.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(finskyDoc_);
                finskyDoc_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              docid_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              detailsUrl_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              reviewsUrl_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              relatedListUrl_ = input.readBytes();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000020;
              moreByListUrl_ = input.readBytes();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000040;
              shareUrl_ = input.readBytes();
              break;
            }
            case 66: {
              bitField0_ |= 0x00000080;
              creator_ = input.readBytes();
              break;
            }
            case 74: {
              com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = details_.toBuilder();
              }
              details_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(details_);
                details_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 82: {
              bitField0_ |= 0x00000200;
              descriptionHtml_ = input.readBytes();
              break;
            }
            case 90: {
              bitField0_ |= 0x00000400;
              relatedBrowseUrl_ = input.readBytes();
              break;
            }
            case 98: {
              bitField0_ |= 0x00000800;
              moreByBrowseUrl_ = input.readBytes();
              break;
            }
            case 106: {
              bitField0_ |= 0x00001000;
              relatedHeader_ = input.readBytes();
              break;
            }
            case 114: {
              bitField0_ |= 0x00002000;
              moreByHeader_ = input.readBytes();
              break;
            }
            case 122: {
              bitField0_ |= 0x00004000;
              title_ = input.readBytes();
              break;
            }
            case 130: {
              com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.Builder subBuilder = null;
              if (((bitField0_ & 0x00008000) == 0x00008000)) {
                subBuilder = plusOneData_.toBuilder();
              }
              plusOneData_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(plusOneData_);
                plusOneData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00008000;
              break;
            }
            case 138: {
              bitField0_ |= 0x00010000;
              warningMessage_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocV1_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocV1_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.DocV1.class, com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder.class);
    }

    public static com.google.protobuf.Parser<DocV1> PARSER =
        new com.google.protobuf.AbstractParser<DocV1>() {
      public DocV1 parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DocV1(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<DocV1> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Document finskyDoc = 1;
    public static final int FINSKYDOC_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.Document finskyDoc_;
    /**
     * <code>optional .Document finskyDoc = 1;</code>
     */
    public boolean hasFinskyDoc() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .Document finskyDoc = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Document getFinskyDoc() {
      return finskyDoc_;
    }
    /**
     * <code>optional .Document finskyDoc = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getFinskyDocOrBuilder() {
      return finskyDoc_;
    }

    // optional string docid = 2;
    public static final int DOCID_FIELD_NUMBER = 2;
    private java.lang.Object docid_;
    /**
     * <code>optional string docid = 2;</code>
     */
    public boolean hasDocid() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string docid = 2;</code>
     */
    public java.lang.String getDocid() {
      java.lang.Object ref = docid_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          docid_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string docid = 2;</code>
     */
    public com.google.protobuf.ByteString
        getDocidBytes() {
      java.lang.Object ref = docid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        docid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string detailsUrl = 3;
    public static final int DETAILSURL_FIELD_NUMBER = 3;
    private java.lang.Object detailsUrl_;
    /**
     * <code>optional string detailsUrl = 3;</code>
     */
    public boolean hasDetailsUrl() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string detailsUrl = 3;</code>
     */
    public java.lang.String getDetailsUrl() {
      java.lang.Object ref = detailsUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          detailsUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string detailsUrl = 3;</code>
     */
    public com.google.protobuf.ByteString
        getDetailsUrlBytes() {
      java.lang.Object ref = detailsUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        detailsUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string reviewsUrl = 4;
    public static final int REVIEWSURL_FIELD_NUMBER = 4;
    private java.lang.Object reviewsUrl_;
    /**
     * <code>optional string reviewsUrl = 4;</code>
     */
    public boolean hasReviewsUrl() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string reviewsUrl = 4;</code>
     */
    public java.lang.String getReviewsUrl() {
      java.lang.Object ref = reviewsUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          reviewsUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string reviewsUrl = 4;</code>
     */
    public com.google.protobuf.ByteString
        getReviewsUrlBytes() {
      java.lang.Object ref = reviewsUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        reviewsUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string relatedListUrl = 5;
    public static final int RELATEDLISTURL_FIELD_NUMBER = 5;
    private java.lang.Object relatedListUrl_;
    /**
     * <code>optional string relatedListUrl = 5;</code>
     */
    public boolean hasRelatedListUrl() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string relatedListUrl = 5;</code>
     */
    public java.lang.String getRelatedListUrl() {
      java.lang.Object ref = relatedListUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          relatedListUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string relatedListUrl = 5;</code>
     */
    public com.google.protobuf.ByteString
        getRelatedListUrlBytes() {
      java.lang.Object ref = relatedListUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        relatedListUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string moreByListUrl = 6;
    public static final int MOREBYLISTURL_FIELD_NUMBER = 6;
    private java.lang.Object moreByListUrl_;
    /**
     * <code>optional string moreByListUrl = 6;</code>
     */
    public boolean hasMoreByListUrl() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string moreByListUrl = 6;</code>
     */
    public java.lang.String getMoreByListUrl() {
      java.lang.Object ref = moreByListUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          moreByListUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string moreByListUrl = 6;</code>
     */
    public com.google.protobuf.ByteString
        getMoreByListUrlBytes() {
      java.lang.Object ref = moreByListUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        moreByListUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string shareUrl = 7;
    public static final int SHAREURL_FIELD_NUMBER = 7;
    private java.lang.Object shareUrl_;
    /**
     * <code>optional string shareUrl = 7;</code>
     */
    public boolean hasShareUrl() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional string shareUrl = 7;</code>
     */
    public java.lang.String getShareUrl() {
      java.lang.Object ref = shareUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          shareUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string shareUrl = 7;</code>
     */
    public com.google.protobuf.ByteString
        getShareUrlBytes() {
      java.lang.Object ref = shareUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        shareUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string creator = 8;
    public static final int CREATOR_FIELD_NUMBER = 8;
    private java.lang.Object creator_;
    /**
     * <code>optional string creator = 8;</code>
     */
    public boolean hasCreator() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional string creator = 8;</code>
     */
    public java.lang.String getCreator() {
      java.lang.Object ref = creator_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          creator_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string creator = 8;</code>
     */
    public com.google.protobuf.ByteString
        getCreatorBytes() {
      java.lang.Object ref = creator_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        creator_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .DocumentDetails details = 9;
    public static final int DETAILS_FIELD_NUMBER = 9;
    private com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails details_;
    /**
     * <code>optional .DocumentDetails details = 9;</code>
     */
    public boolean hasDetails() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional .DocumentDetails details = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails getDetails() {
      return details_;
    }
    /**
     * <code>optional .DocumentDetails details = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetailsOrBuilder getDetailsOrBuilder() {
      return details_;
    }

    // optional string descriptionHtml = 10;
    public static final int DESCRIPTIONHTML_FIELD_NUMBER = 10;
    private java.lang.Object descriptionHtml_;
    /**
     * <code>optional string descriptionHtml = 10;</code>
     */
    public boolean hasDescriptionHtml() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional string descriptionHtml = 10;</code>
     */
    public java.lang.String getDescriptionHtml() {
      java.lang.Object ref = descriptionHtml_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          descriptionHtml_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string descriptionHtml = 10;</code>
     */
    public com.google.protobuf.ByteString
        getDescriptionHtmlBytes() {
      java.lang.Object ref = descriptionHtml_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        descriptionHtml_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string relatedBrowseUrl = 11;
    public static final int RELATEDBROWSEURL_FIELD_NUMBER = 11;
    private java.lang.Object relatedBrowseUrl_;
    /**
     * <code>optional string relatedBrowseUrl = 11;</code>
     */
    public boolean hasRelatedBrowseUrl() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional string relatedBrowseUrl = 11;</code>
     */
    public java.lang.String getRelatedBrowseUrl() {
      java.lang.Object ref = relatedBrowseUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          relatedBrowseUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string relatedBrowseUrl = 11;</code>
     */
    public com.google.protobuf.ByteString
        getRelatedBrowseUrlBytes() {
      java.lang.Object ref = relatedBrowseUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        relatedBrowseUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string moreByBrowseUrl = 12;
    public static final int MOREBYBROWSEURL_FIELD_NUMBER = 12;
    private java.lang.Object moreByBrowseUrl_;
    /**
     * <code>optional string moreByBrowseUrl = 12;</code>
     */
    public boolean hasMoreByBrowseUrl() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional string moreByBrowseUrl = 12;</code>
     */
    public java.lang.String getMoreByBrowseUrl() {
      java.lang.Object ref = moreByBrowseUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          moreByBrowseUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string moreByBrowseUrl = 12;</code>
     */
    public com.google.protobuf.ByteString
        getMoreByBrowseUrlBytes() {
      java.lang.Object ref = moreByBrowseUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        moreByBrowseUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string relatedHeader = 13;
    public static final int RELATEDHEADER_FIELD_NUMBER = 13;
    private java.lang.Object relatedHeader_;
    /**
     * <code>optional string relatedHeader = 13;</code>
     */
    public boolean hasRelatedHeader() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <code>optional string relatedHeader = 13;</code>
     */
    public java.lang.String getRelatedHeader() {
      java.lang.Object ref = relatedHeader_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          relatedHeader_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string relatedHeader = 13;</code>
     */
    public com.google.protobuf.ByteString
        getRelatedHeaderBytes() {
      java.lang.Object ref = relatedHeader_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        relatedHeader_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string moreByHeader = 14;
    public static final int MOREBYHEADER_FIELD_NUMBER = 14;
    private java.lang.Object moreByHeader_;
    /**
     * <code>optional string moreByHeader = 14;</code>
     */
    public boolean hasMoreByHeader() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     * <code>optional string moreByHeader = 14;</code>
     */
    public java.lang.String getMoreByHeader() {
      java.lang.Object ref = moreByHeader_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          moreByHeader_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string moreByHeader = 14;</code>
     */
    public com.google.protobuf.ByteString
        getMoreByHeaderBytes() {
      java.lang.Object ref = moreByHeader_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        moreByHeader_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string title = 15;
    public static final int TITLE_FIELD_NUMBER = 15;
    private java.lang.Object title_;
    /**
     * <code>optional string title = 15;</code>
     */
    public boolean hasTitle() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     * <code>optional string title = 15;</code>
     */
    public java.lang.String getTitle() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          title_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string title = 15;</code>
     */
    public com.google.protobuf.ByteString
        getTitleBytes() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        title_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .PlusOneData plusOneData = 16;
    public static final int PLUSONEDATA_FIELD_NUMBER = 16;
    private com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData plusOneData_;
    /**
     * <code>optional .PlusOneData plusOneData = 16;</code>
     */
    public boolean hasPlusOneData() {
      return ((bitField0_ & 0x00008000) == 0x00008000);
    }
    /**
     * <code>optional .PlusOneData plusOneData = 16;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData getPlusOneData() {
      return plusOneData_;
    }
    /**
     * <code>optional .PlusOneData plusOneData = 16;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PlusOneDataOrBuilder getPlusOneDataOrBuilder() {
      return plusOneData_;
    }

    // optional string warningMessage = 17;
    public static final int WARNINGMESSAGE_FIELD_NUMBER = 17;
    private java.lang.Object warningMessage_;
    /**
     * <code>optional string warningMessage = 17;</code>
     */
    public boolean hasWarningMessage() {
      return ((bitField0_ & 0x00010000) == 0x00010000);
    }
    /**
     * <code>optional string warningMessage = 17;</code>
     */
    public java.lang.String getWarningMessage() {
      java.lang.Object ref = warningMessage_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          warningMessage_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string warningMessage = 17;</code>
     */
    public com.google.protobuf.ByteString
        getWarningMessageBytes() {
      java.lang.Object ref = warningMessage_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        warningMessage_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      finskyDoc_ = com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance();
      docid_ = "";
      detailsUrl_ = "";
      reviewsUrl_ = "";
      relatedListUrl_ = "";
      moreByListUrl_ = "";
      shareUrl_ = "";
      creator_ = "";
      details_ = com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.getDefaultInstance();
      descriptionHtml_ = "";
      relatedBrowseUrl_ = "";
      moreByBrowseUrl_ = "";
      relatedHeader_ = "";
      moreByHeader_ = "";
      title_ = "";
      plusOneData_ = com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.getDefaultInstance();
      warningMessage_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, finskyDoc_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getDocidBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getDetailsUrlBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getReviewsUrlBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getRelatedListUrlBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(6, getMoreByListUrlBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(7, getShareUrlBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBytes(8, getCreatorBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(9, details_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBytes(10, getDescriptionHtmlBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBytes(11, getRelatedBrowseUrlBytes());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeBytes(12, getMoreByBrowseUrlBytes());
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeBytes(13, getRelatedHeaderBytes());
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeBytes(14, getMoreByHeaderBytes());
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeBytes(15, getTitleBytes());
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        output.writeMessage(16, plusOneData_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        output.writeBytes(17, getWarningMessageBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, finskyDoc_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getDocidBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getDetailsUrlBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getReviewsUrlBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getRelatedListUrlBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getMoreByListUrlBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getShareUrlBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getCreatorBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, details_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(10, getDescriptionHtmlBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(11, getRelatedBrowseUrlBytes());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(12, getMoreByBrowseUrlBytes());
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(13, getRelatedHeaderBytes());
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(14, getMoreByHeaderBytes());
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(15, getTitleBytes());
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(16, plusOneData_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(17, getWarningMessageBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV1 parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV1 parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV1 parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV1 parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV1 parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV1 parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV1 parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV1 parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV1 parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV1 parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.DocV1 prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code DocV1}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.DocV1OrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocV1_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocV1_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.DocV1.class, com.akdeniz.googleplaycrawler.GooglePlay.DocV1.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.DocV1.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getFinskyDocFieldBuilder();
          getDetailsFieldBuilder();
          getPlusOneDataFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (finskyDocBuilder_ == null) {
          finskyDoc_ = com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance();
        } else {
          finskyDocBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        docid_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        detailsUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        reviewsUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        relatedListUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        moreByListUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        shareUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        creator_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        if (detailsBuilder_ == null) {
          details_ = com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.getDefaultInstance();
        } else {
          detailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        descriptionHtml_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        relatedBrowseUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000400);
        moreByBrowseUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000800);
        relatedHeader_ = "";
        bitField0_ = (bitField0_ & ~0x00001000);
        moreByHeader_ = "";
        bitField0_ = (bitField0_ & ~0x00002000);
        title_ = "";
        bitField0_ = (bitField0_ & ~0x00004000);
        if (plusOneDataBuilder_ == null) {
          plusOneData_ = com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.getDefaultInstance();
        } else {
          plusOneDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00008000);
        warningMessage_ = "";
        bitField0_ = (bitField0_ & ~0x00010000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocV1_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DocV1 getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.DocV1.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DocV1 build() {
        com.akdeniz.googleplaycrawler.GooglePlay.DocV1 result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DocV1 buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.DocV1 result = new com.akdeniz.googleplaycrawler.GooglePlay.DocV1(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (finskyDocBuilder_ == null) {
          result.finskyDoc_ = finskyDoc_;
        } else {
          result.finskyDoc_ = finskyDocBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.docid_ = docid_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.detailsUrl_ = detailsUrl_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.reviewsUrl_ = reviewsUrl_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.relatedListUrl_ = relatedListUrl_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.moreByListUrl_ = moreByListUrl_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.shareUrl_ = shareUrl_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.creator_ = creator_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        if (detailsBuilder_ == null) {
          result.details_ = details_;
        } else {
          result.details_ = detailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.descriptionHtml_ = descriptionHtml_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.relatedBrowseUrl_ = relatedBrowseUrl_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        result.moreByBrowseUrl_ = moreByBrowseUrl_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.relatedHeader_ = relatedHeader_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00002000;
        }
        result.moreByHeader_ = moreByHeader_;
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00004000;
        }
        result.title_ = title_;
        if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
          to_bitField0_ |= 0x00008000;
        }
        if (plusOneDataBuilder_ == null) {
          result.plusOneData_ = plusOneData_;
        } else {
          result.plusOneData_ = plusOneDataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x00010000;
        }
        result.warningMessage_ = warningMessage_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.DocV1) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.DocV1)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.DocV1 other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.DocV1.getDefaultInstance()) return this;
        if (other.hasFinskyDoc()) {
          mergeFinskyDoc(other.getFinskyDoc());
        }
        if (other.hasDocid()) {
          bitField0_ |= 0x00000002;
          docid_ = other.docid_;
          onChanged();
        }
        if (other.hasDetailsUrl()) {
          bitField0_ |= 0x00000004;
          detailsUrl_ = other.detailsUrl_;
          onChanged();
        }
        if (other.hasReviewsUrl()) {
          bitField0_ |= 0x00000008;
          reviewsUrl_ = other.reviewsUrl_;
          onChanged();
        }
        if (other.hasRelatedListUrl()) {
          bitField0_ |= 0x00000010;
          relatedListUrl_ = other.relatedListUrl_;
          onChanged();
        }
        if (other.hasMoreByListUrl()) {
          bitField0_ |= 0x00000020;
          moreByListUrl_ = other.moreByListUrl_;
          onChanged();
        }
        if (other.hasShareUrl()) {
          bitField0_ |= 0x00000040;
          shareUrl_ = other.shareUrl_;
          onChanged();
        }
        if (other.hasCreator()) {
          bitField0_ |= 0x00000080;
          creator_ = other.creator_;
          onChanged();
        }
        if (other.hasDetails()) {
          mergeDetails(other.getDetails());
        }
        if (other.hasDescriptionHtml()) {
          bitField0_ |= 0x00000200;
          descriptionHtml_ = other.descriptionHtml_;
          onChanged();
        }
        if (other.hasRelatedBrowseUrl()) {
          bitField0_ |= 0x00000400;
          relatedBrowseUrl_ = other.relatedBrowseUrl_;
          onChanged();
        }
        if (other.hasMoreByBrowseUrl()) {
          bitField0_ |= 0x00000800;
          moreByBrowseUrl_ = other.moreByBrowseUrl_;
          onChanged();
        }
        if (other.hasRelatedHeader()) {
          bitField0_ |= 0x00001000;
          relatedHeader_ = other.relatedHeader_;
          onChanged();
        }
        if (other.hasMoreByHeader()) {
          bitField0_ |= 0x00002000;
          moreByHeader_ = other.moreByHeader_;
          onChanged();
        }
        if (other.hasTitle()) {
          bitField0_ |= 0x00004000;
          title_ = other.title_;
          onChanged();
        }
        if (other.hasPlusOneData()) {
          mergePlusOneData(other.getPlusOneData());
        }
        if (other.hasWarningMessage()) {
          bitField0_ |= 0x00010000;
          warningMessage_ = other.warningMessage_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.DocV1 parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.DocV1) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Document finskyDoc = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.Document finskyDoc_ = com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> finskyDocBuilder_;
      /**
       * <code>optional .Document finskyDoc = 1;</code>
       */
      public boolean hasFinskyDoc() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .Document finskyDoc = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document getFinskyDoc() {
        if (finskyDocBuilder_ == null) {
          return finskyDoc_;
        } else {
          return finskyDocBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Document finskyDoc = 1;</code>
       */
      public Builder setFinskyDoc(com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (finskyDocBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          finskyDoc_ = value;
          onChanged();
        } else {
          finskyDocBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Document finskyDoc = 1;</code>
       */
      public Builder setFinskyDoc(
          com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder builderForValue) {
        if (finskyDocBuilder_ == null) {
          finskyDoc_ = builderForValue.build();
          onChanged();
        } else {
          finskyDocBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Document finskyDoc = 1;</code>
       */
      public Builder mergeFinskyDoc(com.akdeniz.googleplaycrawler.GooglePlay.Document value) {
        if (finskyDocBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              finskyDoc_ != com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance()) {
            finskyDoc_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Document.newBuilder(finskyDoc_).mergeFrom(value).buildPartial();
          } else {
            finskyDoc_ = value;
          }
          onChanged();
        } else {
          finskyDocBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Document finskyDoc = 1;</code>
       */
      public Builder clearFinskyDoc() {
        if (finskyDocBuilder_ == null) {
          finskyDoc_ = com.akdeniz.googleplaycrawler.GooglePlay.Document.getDefaultInstance();
          onChanged();
        } else {
          finskyDocBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .Document finskyDoc = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder getFinskyDocBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getFinskyDocFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Document finskyDoc = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder getFinskyDocOrBuilder() {
        if (finskyDocBuilder_ != null) {
          return finskyDocBuilder_.getMessageOrBuilder();
        } else {
          return finskyDoc_;
        }
      }
      /**
       * <code>optional .Document finskyDoc = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder> 
          getFinskyDocFieldBuilder() {
        if (finskyDocBuilder_ == null) {
          finskyDocBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Document, com.akdeniz.googleplaycrawler.GooglePlay.Document.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentOrBuilder>(
                  finskyDoc_,
                  getParentForChildren(),
                  isClean());
          finskyDoc_ = null;
        }
        return finskyDocBuilder_;
      }

      // optional string docid = 2;
      private java.lang.Object docid_ = "";
      /**
       * <code>optional string docid = 2;</code>
       */
      public boolean hasDocid() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string docid = 2;</code>
       */
      public java.lang.String getDocid() {
        java.lang.Object ref = docid_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          docid_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string docid = 2;</code>
       */
      public com.google.protobuf.ByteString
          getDocidBytes() {
        java.lang.Object ref = docid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          docid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string docid = 2;</code>
       */
      public Builder setDocid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        docid_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string docid = 2;</code>
       */
      public Builder clearDocid() {
        bitField0_ = (bitField0_ & ~0x00000002);
        docid_ = getDefaultInstance().getDocid();
        onChanged();
        return this;
      }
      /**
       * <code>optional string docid = 2;</code>
       */
      public Builder setDocidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        docid_ = value;
        onChanged();
        return this;
      }

      // optional string detailsUrl = 3;
      private java.lang.Object detailsUrl_ = "";
      /**
       * <code>optional string detailsUrl = 3;</code>
       */
      public boolean hasDetailsUrl() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string detailsUrl = 3;</code>
       */
      public java.lang.String getDetailsUrl() {
        java.lang.Object ref = detailsUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          detailsUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string detailsUrl = 3;</code>
       */
      public com.google.protobuf.ByteString
          getDetailsUrlBytes() {
        java.lang.Object ref = detailsUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          detailsUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string detailsUrl = 3;</code>
       */
      public Builder setDetailsUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        detailsUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string detailsUrl = 3;</code>
       */
      public Builder clearDetailsUrl() {
        bitField0_ = (bitField0_ & ~0x00000004);
        detailsUrl_ = getDefaultInstance().getDetailsUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string detailsUrl = 3;</code>
       */
      public Builder setDetailsUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        detailsUrl_ = value;
        onChanged();
        return this;
      }

      // optional string reviewsUrl = 4;
      private java.lang.Object reviewsUrl_ = "";
      /**
       * <code>optional string reviewsUrl = 4;</code>
       */
      public boolean hasReviewsUrl() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string reviewsUrl = 4;</code>
       */
      public java.lang.String getReviewsUrl() {
        java.lang.Object ref = reviewsUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          reviewsUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string reviewsUrl = 4;</code>
       */
      public com.google.protobuf.ByteString
          getReviewsUrlBytes() {
        java.lang.Object ref = reviewsUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          reviewsUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string reviewsUrl = 4;</code>
       */
      public Builder setReviewsUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        reviewsUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string reviewsUrl = 4;</code>
       */
      public Builder clearReviewsUrl() {
        bitField0_ = (bitField0_ & ~0x00000008);
        reviewsUrl_ = getDefaultInstance().getReviewsUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string reviewsUrl = 4;</code>
       */
      public Builder setReviewsUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        reviewsUrl_ = value;
        onChanged();
        return this;
      }

      // optional string relatedListUrl = 5;
      private java.lang.Object relatedListUrl_ = "";
      /**
       * <code>optional string relatedListUrl = 5;</code>
       */
      public boolean hasRelatedListUrl() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string relatedListUrl = 5;</code>
       */
      public java.lang.String getRelatedListUrl() {
        java.lang.Object ref = relatedListUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          relatedListUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string relatedListUrl = 5;</code>
       */
      public com.google.protobuf.ByteString
          getRelatedListUrlBytes() {
        java.lang.Object ref = relatedListUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          relatedListUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string relatedListUrl = 5;</code>
       */
      public Builder setRelatedListUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        relatedListUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string relatedListUrl = 5;</code>
       */
      public Builder clearRelatedListUrl() {
        bitField0_ = (bitField0_ & ~0x00000010);
        relatedListUrl_ = getDefaultInstance().getRelatedListUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string relatedListUrl = 5;</code>
       */
      public Builder setRelatedListUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        relatedListUrl_ = value;
        onChanged();
        return this;
      }

      // optional string moreByListUrl = 6;
      private java.lang.Object moreByListUrl_ = "";
      /**
       * <code>optional string moreByListUrl = 6;</code>
       */
      public boolean hasMoreByListUrl() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional string moreByListUrl = 6;</code>
       */
      public java.lang.String getMoreByListUrl() {
        java.lang.Object ref = moreByListUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          moreByListUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string moreByListUrl = 6;</code>
       */
      public com.google.protobuf.ByteString
          getMoreByListUrlBytes() {
        java.lang.Object ref = moreByListUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          moreByListUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string moreByListUrl = 6;</code>
       */
      public Builder setMoreByListUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        moreByListUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string moreByListUrl = 6;</code>
       */
      public Builder clearMoreByListUrl() {
        bitField0_ = (bitField0_ & ~0x00000020);
        moreByListUrl_ = getDefaultInstance().getMoreByListUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string moreByListUrl = 6;</code>
       */
      public Builder setMoreByListUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        moreByListUrl_ = value;
        onChanged();
        return this;
      }

      // optional string shareUrl = 7;
      private java.lang.Object shareUrl_ = "";
      /**
       * <code>optional string shareUrl = 7;</code>
       */
      public boolean hasShareUrl() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string shareUrl = 7;</code>
       */
      public java.lang.String getShareUrl() {
        java.lang.Object ref = shareUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          shareUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string shareUrl = 7;</code>
       */
      public com.google.protobuf.ByteString
          getShareUrlBytes() {
        java.lang.Object ref = shareUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          shareUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string shareUrl = 7;</code>
       */
      public Builder setShareUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        shareUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string shareUrl = 7;</code>
       */
      public Builder clearShareUrl() {
        bitField0_ = (bitField0_ & ~0x00000040);
        shareUrl_ = getDefaultInstance().getShareUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string shareUrl = 7;</code>
       */
      public Builder setShareUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        shareUrl_ = value;
        onChanged();
        return this;
      }

      // optional string creator = 8;
      private java.lang.Object creator_ = "";
      /**
       * <code>optional string creator = 8;</code>
       */
      public boolean hasCreator() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string creator = 8;</code>
       */
      public java.lang.String getCreator() {
        java.lang.Object ref = creator_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          creator_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string creator = 8;</code>
       */
      public com.google.protobuf.ByteString
          getCreatorBytes() {
        java.lang.Object ref = creator_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          creator_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string creator = 8;</code>
       */
      public Builder setCreator(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        creator_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string creator = 8;</code>
       */
      public Builder clearCreator() {
        bitField0_ = (bitField0_ & ~0x00000080);
        creator_ = getDefaultInstance().getCreator();
        onChanged();
        return this;
      }
      /**
       * <code>optional string creator = 8;</code>
       */
      public Builder setCreatorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        creator_ = value;
        onChanged();
        return this;
      }

      // optional .DocumentDetails details = 9;
      private com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails details_ = com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails, com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetailsOrBuilder> detailsBuilder_;
      /**
       * <code>optional .DocumentDetails details = 9;</code>
       */
      public boolean hasDetails() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional .DocumentDetails details = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails getDetails() {
        if (detailsBuilder_ == null) {
          return details_;
        } else {
          return detailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .DocumentDetails details = 9;</code>
       */
      public Builder setDetails(com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails value) {
        if (detailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          details_ = value;
          onChanged();
        } else {
          detailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .DocumentDetails details = 9;</code>
       */
      public Builder setDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.Builder builderForValue) {
        if (detailsBuilder_ == null) {
          details_ = builderForValue.build();
          onChanged();
        } else {
          detailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .DocumentDetails details = 9;</code>
       */
      public Builder mergeDetails(com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails value) {
        if (detailsBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              details_ != com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.getDefaultInstance()) {
            details_ =
              com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.newBuilder(details_).mergeFrom(value).buildPartial();
          } else {
            details_ = value;
          }
          onChanged();
        } else {
          detailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .DocumentDetails details = 9;</code>
       */
      public Builder clearDetails() {
        if (detailsBuilder_ == null) {
          details_ = com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.getDefaultInstance();
          onChanged();
        } else {
          detailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       * <code>optional .DocumentDetails details = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.Builder getDetailsBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .DocumentDetails details = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetailsOrBuilder getDetailsOrBuilder() {
        if (detailsBuilder_ != null) {
          return detailsBuilder_.getMessageOrBuilder();
        } else {
          return details_;
        }
      }
      /**
       * <code>optional .DocumentDetails details = 9;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails, com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetailsOrBuilder> 
          getDetailsFieldBuilder() {
        if (detailsBuilder_ == null) {
          detailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails, com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetailsOrBuilder>(
                  details_,
                  getParentForChildren(),
                  isClean());
          details_ = null;
        }
        return detailsBuilder_;
      }

      // optional string descriptionHtml = 10;
      private java.lang.Object descriptionHtml_ = "";
      /**
       * <code>optional string descriptionHtml = 10;</code>
       */
      public boolean hasDescriptionHtml() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional string descriptionHtml = 10;</code>
       */
      public java.lang.String getDescriptionHtml() {
        java.lang.Object ref = descriptionHtml_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          descriptionHtml_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string descriptionHtml = 10;</code>
       */
      public com.google.protobuf.ByteString
          getDescriptionHtmlBytes() {
        java.lang.Object ref = descriptionHtml_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          descriptionHtml_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string descriptionHtml = 10;</code>
       */
      public Builder setDescriptionHtml(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        descriptionHtml_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string descriptionHtml = 10;</code>
       */
      public Builder clearDescriptionHtml() {
        bitField0_ = (bitField0_ & ~0x00000200);
        descriptionHtml_ = getDefaultInstance().getDescriptionHtml();
        onChanged();
        return this;
      }
      /**
       * <code>optional string descriptionHtml = 10;</code>
       */
      public Builder setDescriptionHtmlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        descriptionHtml_ = value;
        onChanged();
        return this;
      }

      // optional string relatedBrowseUrl = 11;
      private java.lang.Object relatedBrowseUrl_ = "";
      /**
       * <code>optional string relatedBrowseUrl = 11;</code>
       */
      public boolean hasRelatedBrowseUrl() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional string relatedBrowseUrl = 11;</code>
       */
      public java.lang.String getRelatedBrowseUrl() {
        java.lang.Object ref = relatedBrowseUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          relatedBrowseUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string relatedBrowseUrl = 11;</code>
       */
      public com.google.protobuf.ByteString
          getRelatedBrowseUrlBytes() {
        java.lang.Object ref = relatedBrowseUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          relatedBrowseUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string relatedBrowseUrl = 11;</code>
       */
      public Builder setRelatedBrowseUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        relatedBrowseUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string relatedBrowseUrl = 11;</code>
       */
      public Builder clearRelatedBrowseUrl() {
        bitField0_ = (bitField0_ & ~0x00000400);
        relatedBrowseUrl_ = getDefaultInstance().getRelatedBrowseUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string relatedBrowseUrl = 11;</code>
       */
      public Builder setRelatedBrowseUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        relatedBrowseUrl_ = value;
        onChanged();
        return this;
      }

      // optional string moreByBrowseUrl = 12;
      private java.lang.Object moreByBrowseUrl_ = "";
      /**
       * <code>optional string moreByBrowseUrl = 12;</code>
       */
      public boolean hasMoreByBrowseUrl() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional string moreByBrowseUrl = 12;</code>
       */
      public java.lang.String getMoreByBrowseUrl() {
        java.lang.Object ref = moreByBrowseUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          moreByBrowseUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string moreByBrowseUrl = 12;</code>
       */
      public com.google.protobuf.ByteString
          getMoreByBrowseUrlBytes() {
        java.lang.Object ref = moreByBrowseUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          moreByBrowseUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string moreByBrowseUrl = 12;</code>
       */
      public Builder setMoreByBrowseUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        moreByBrowseUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string moreByBrowseUrl = 12;</code>
       */
      public Builder clearMoreByBrowseUrl() {
        bitField0_ = (bitField0_ & ~0x00000800);
        moreByBrowseUrl_ = getDefaultInstance().getMoreByBrowseUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string moreByBrowseUrl = 12;</code>
       */
      public Builder setMoreByBrowseUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        moreByBrowseUrl_ = value;
        onChanged();
        return this;
      }

      // optional string relatedHeader = 13;
      private java.lang.Object relatedHeader_ = "";
      /**
       * <code>optional string relatedHeader = 13;</code>
       */
      public boolean hasRelatedHeader() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional string relatedHeader = 13;</code>
       */
      public java.lang.String getRelatedHeader() {
        java.lang.Object ref = relatedHeader_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          relatedHeader_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string relatedHeader = 13;</code>
       */
      public com.google.protobuf.ByteString
          getRelatedHeaderBytes() {
        java.lang.Object ref = relatedHeader_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          relatedHeader_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string relatedHeader = 13;</code>
       */
      public Builder setRelatedHeader(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        relatedHeader_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string relatedHeader = 13;</code>
       */
      public Builder clearRelatedHeader() {
        bitField0_ = (bitField0_ & ~0x00001000);
        relatedHeader_ = getDefaultInstance().getRelatedHeader();
        onChanged();
        return this;
      }
      /**
       * <code>optional string relatedHeader = 13;</code>
       */
      public Builder setRelatedHeaderBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        relatedHeader_ = value;
        onChanged();
        return this;
      }

      // optional string moreByHeader = 14;
      private java.lang.Object moreByHeader_ = "";
      /**
       * <code>optional string moreByHeader = 14;</code>
       */
      public boolean hasMoreByHeader() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <code>optional string moreByHeader = 14;</code>
       */
      public java.lang.String getMoreByHeader() {
        java.lang.Object ref = moreByHeader_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          moreByHeader_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string moreByHeader = 14;</code>
       */
      public com.google.protobuf.ByteString
          getMoreByHeaderBytes() {
        java.lang.Object ref = moreByHeader_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          moreByHeader_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string moreByHeader = 14;</code>
       */
      public Builder setMoreByHeader(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00002000;
        moreByHeader_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string moreByHeader = 14;</code>
       */
      public Builder clearMoreByHeader() {
        bitField0_ = (bitField0_ & ~0x00002000);
        moreByHeader_ = getDefaultInstance().getMoreByHeader();
        onChanged();
        return this;
      }
      /**
       * <code>optional string moreByHeader = 14;</code>
       */
      public Builder setMoreByHeaderBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00002000;
        moreByHeader_ = value;
        onChanged();
        return this;
      }

      // optional string title = 15;
      private java.lang.Object title_ = "";
      /**
       * <code>optional string title = 15;</code>
       */
      public boolean hasTitle() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       * <code>optional string title = 15;</code>
       */
      public java.lang.String getTitle() {
        java.lang.Object ref = title_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          title_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string title = 15;</code>
       */
      public com.google.protobuf.ByteString
          getTitleBytes() {
        java.lang.Object ref = title_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          title_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string title = 15;</code>
       */
      public Builder setTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00004000;
        title_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 15;</code>
       */
      public Builder clearTitle() {
        bitField0_ = (bitField0_ & ~0x00004000);
        title_ = getDefaultInstance().getTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 15;</code>
       */
      public Builder setTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00004000;
        title_ = value;
        onChanged();
        return this;
      }

      // optional .PlusOneData plusOneData = 16;
      private com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData plusOneData_ = com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData, com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PlusOneDataOrBuilder> plusOneDataBuilder_;
      /**
       * <code>optional .PlusOneData plusOneData = 16;</code>
       */
      public boolean hasPlusOneData() {
        return ((bitField0_ & 0x00008000) == 0x00008000);
      }
      /**
       * <code>optional .PlusOneData plusOneData = 16;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData getPlusOneData() {
        if (plusOneDataBuilder_ == null) {
          return plusOneData_;
        } else {
          return plusOneDataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .PlusOneData plusOneData = 16;</code>
       */
      public Builder setPlusOneData(com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData value) {
        if (plusOneDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          plusOneData_ = value;
          onChanged();
        } else {
          plusOneDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00008000;
        return this;
      }
      /**
       * <code>optional .PlusOneData plusOneData = 16;</code>
       */
      public Builder setPlusOneData(
          com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.Builder builderForValue) {
        if (plusOneDataBuilder_ == null) {
          plusOneData_ = builderForValue.build();
          onChanged();
        } else {
          plusOneDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00008000;
        return this;
      }
      /**
       * <code>optional .PlusOneData plusOneData = 16;</code>
       */
      public Builder mergePlusOneData(com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData value) {
        if (plusOneDataBuilder_ == null) {
          if (((bitField0_ & 0x00008000) == 0x00008000) &&
              plusOneData_ != com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.getDefaultInstance()) {
            plusOneData_ =
              com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.newBuilder(plusOneData_).mergeFrom(value).buildPartial();
          } else {
            plusOneData_ = value;
          }
          onChanged();
        } else {
          plusOneDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00008000;
        return this;
      }
      /**
       * <code>optional .PlusOneData plusOneData = 16;</code>
       */
      public Builder clearPlusOneData() {
        if (plusOneDataBuilder_ == null) {
          plusOneData_ = com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.getDefaultInstance();
          onChanged();
        } else {
          plusOneDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00008000);
        return this;
      }
      /**
       * <code>optional .PlusOneData plusOneData = 16;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.Builder getPlusOneDataBuilder() {
        bitField0_ |= 0x00008000;
        onChanged();
        return getPlusOneDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .PlusOneData plusOneData = 16;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PlusOneDataOrBuilder getPlusOneDataOrBuilder() {
        if (plusOneDataBuilder_ != null) {
          return plusOneDataBuilder_.getMessageOrBuilder();
        } else {
          return plusOneData_;
        }
      }
      /**
       * <code>optional .PlusOneData plusOneData = 16;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData, com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PlusOneDataOrBuilder> 
          getPlusOneDataFieldBuilder() {
        if (plusOneDataBuilder_ == null) {
          plusOneDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData, com.akdeniz.googleplaycrawler.GooglePlay.PlusOneData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PlusOneDataOrBuilder>(
                  plusOneData_,
                  getParentForChildren(),
                  isClean());
          plusOneData_ = null;
        }
        return plusOneDataBuilder_;
      }

      // optional string warningMessage = 17;
      private java.lang.Object warningMessage_ = "";
      /**
       * <code>optional string warningMessage = 17;</code>
       */
      public boolean hasWarningMessage() {
        return ((bitField0_ & 0x00010000) == 0x00010000);
      }
      /**
       * <code>optional string warningMessage = 17;</code>
       */
      public java.lang.String getWarningMessage() {
        java.lang.Object ref = warningMessage_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          warningMessage_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string warningMessage = 17;</code>
       */
      public com.google.protobuf.ByteString
          getWarningMessageBytes() {
        java.lang.Object ref = warningMessage_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          warningMessage_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string warningMessage = 17;</code>
       */
      public Builder setWarningMessage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00010000;
        warningMessage_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string warningMessage = 17;</code>
       */
      public Builder clearWarningMessage() {
        bitField0_ = (bitField0_ & ~0x00010000);
        warningMessage_ = getDefaultInstance().getWarningMessage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string warningMessage = 17;</code>
       */
      public Builder setWarningMessageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00010000;
        warningMessage_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:DocV1)
    }

    static {
      defaultInstance = new DocV1(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:DocV1)
  }

  public interface DocV2OrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string docid = 1;
    /**
     * <code>optional string docid = 1;</code>
     */
    boolean hasDocid();
    /**
     * <code>optional string docid = 1;</code>
     */
    java.lang.String getDocid();
    /**
     * <code>optional string docid = 1;</code>
     */
    com.google.protobuf.ByteString
        getDocidBytes();

    // optional string backendDocid = 2;
    /**
     * <code>optional string backendDocid = 2;</code>
     */
    boolean hasBackendDocid();
    /**
     * <code>optional string backendDocid = 2;</code>
     */
    java.lang.String getBackendDocid();
    /**
     * <code>optional string backendDocid = 2;</code>
     */
    com.google.protobuf.ByteString
        getBackendDocidBytes();

    // optional int32 docType = 3;
    /**
     * <code>optional int32 docType = 3;</code>
     */
    boolean hasDocType();
    /**
     * <code>optional int32 docType = 3;</code>
     */
    int getDocType();

    // optional int32 backendId = 4;
    /**
     * <code>optional int32 backendId = 4;</code>
     */
    boolean hasBackendId();
    /**
     * <code>optional int32 backendId = 4;</code>
     */
    int getBackendId();

    // optional string title = 5;
    /**
     * <code>optional string title = 5;</code>
     */
    boolean hasTitle();
    /**
     * <code>optional string title = 5;</code>
     */
    java.lang.String getTitle();
    /**
     * <code>optional string title = 5;</code>
     */
    com.google.protobuf.ByteString
        getTitleBytes();

    // optional string creator = 6;
    /**
     * <code>optional string creator = 6;</code>
     */
    boolean hasCreator();
    /**
     * <code>optional string creator = 6;</code>
     */
    java.lang.String getCreator();
    /**
     * <code>optional string creator = 6;</code>
     */
    com.google.protobuf.ByteString
        getCreatorBytes();

    // optional string descriptionHtml = 7;
    /**
     * <code>optional string descriptionHtml = 7;</code>
     */
    boolean hasDescriptionHtml();
    /**
     * <code>optional string descriptionHtml = 7;</code>
     */
    java.lang.String getDescriptionHtml();
    /**
     * <code>optional string descriptionHtml = 7;</code>
     */
    com.google.protobuf.ByteString
        getDescriptionHtmlBytes();

    // repeated .Offer offer = 8;
    /**
     * <code>repeated .Offer offer = 8;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> 
        getOfferList();
    /**
     * <code>repeated .Offer offer = 8;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Offer getOffer(int index);
    /**
     * <code>repeated .Offer offer = 8;</code>
     */
    int getOfferCount();
    /**
     * <code>repeated .Offer offer = 8;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
        getOfferOrBuilderList();
    /**
     * <code>repeated .Offer offer = 8;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getOfferOrBuilder(
        int index);

    // optional .Availability availability = 9;
    /**
     * <code>optional .Availability availability = 9;</code>
     */
    boolean hasAvailability();
    /**
     * <code>optional .Availability availability = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Availability getAvailability();
    /**
     * <code>optional .Availability availability = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AvailabilityOrBuilder getAvailabilityOrBuilder();

    // repeated .Image image = 10;
    /**
     * <code>repeated .Image image = 10;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Image> 
        getImageList();
    /**
     * <code>repeated .Image image = 10;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Image getImage(int index);
    /**
     * <code>repeated .Image image = 10;</code>
     */
    int getImageCount();
    /**
     * <code>repeated .Image image = 10;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder> 
        getImageOrBuilderList();
    /**
     * <code>repeated .Image image = 10;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder getImageOrBuilder(
        int index);

    // repeated .DocV2 child = 11;
    /**
     * <code>repeated .DocV2 child = 11;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> 
        getChildList();
    /**
     * <code>repeated .DocV2 child = 11;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getChild(int index);
    /**
     * <code>repeated .DocV2 child = 11;</code>
     */
    int getChildCount();
    /**
     * <code>repeated .DocV2 child = 11;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> 
        getChildOrBuilderList();
    /**
     * <code>repeated .DocV2 child = 11;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getChildOrBuilder(
        int index);

    // optional .ContainerMetadata containerMetadata = 12;
    /**
     * <code>optional .ContainerMetadata containerMetadata = 12;</code>
     */
    boolean hasContainerMetadata();
    /**
     * <code>optional .ContainerMetadata containerMetadata = 12;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata getContainerMetadata();
    /**
     * <code>optional .ContainerMetadata containerMetadata = 12;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadataOrBuilder getContainerMetadataOrBuilder();

    // optional .DocumentDetails details = 13;
    /**
     * <code>optional .DocumentDetails details = 13;</code>
     */
    boolean hasDetails();
    /**
     * <code>optional .DocumentDetails details = 13;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails getDetails();
    /**
     * <code>optional .DocumentDetails details = 13;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetailsOrBuilder getDetailsOrBuilder();

    // optional .AggregateRating aggregateRating = 14;
    /**
     * <code>optional .AggregateRating aggregateRating = 14;</code>
     */
    boolean hasAggregateRating();
    /**
     * <code>optional .AggregateRating aggregateRating = 14;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating getAggregateRating();
    /**
     * <code>optional .AggregateRating aggregateRating = 14;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AggregateRatingOrBuilder getAggregateRatingOrBuilder();

    // optional string detailsUrl = 16;
    /**
     * <code>optional string detailsUrl = 16;</code>
     */
    boolean hasDetailsUrl();
    /**
     * <code>optional string detailsUrl = 16;</code>
     */
    java.lang.String getDetailsUrl();
    /**
     * <code>optional string detailsUrl = 16;</code>
     */
    com.google.protobuf.ByteString
        getDetailsUrlBytes();

    // optional string shareUrl = 17;
    /**
     * <code>optional string shareUrl = 17;</code>
     */
    boolean hasShareUrl();
    /**
     * <code>optional string shareUrl = 17;</code>
     */
    java.lang.String getShareUrl();
    /**
     * <code>optional string shareUrl = 17;</code>
     */
    com.google.protobuf.ByteString
        getShareUrlBytes();

    // optional string reviewsUrl = 18;
    /**
     * <code>optional string reviewsUrl = 18;</code>
     */
    boolean hasReviewsUrl();
    /**
     * <code>optional string reviewsUrl = 18;</code>
     */
    java.lang.String getReviewsUrl();
    /**
     * <code>optional string reviewsUrl = 18;</code>
     */
    com.google.protobuf.ByteString
        getReviewsUrlBytes();

    // optional string backendUrl = 19;
    /**
     * <code>optional string backendUrl = 19;</code>
     */
    boolean hasBackendUrl();
    /**
     * <code>optional string backendUrl = 19;</code>
     */
    java.lang.String getBackendUrl();
    /**
     * <code>optional string backendUrl = 19;</code>
     */
    com.google.protobuf.ByteString
        getBackendUrlBytes();

    // optional string purchaseDetailsUrl = 20;
    /**
     * <code>optional string purchaseDetailsUrl = 20;</code>
     */
    boolean hasPurchaseDetailsUrl();
    /**
     * <code>optional string purchaseDetailsUrl = 20;</code>
     */
    java.lang.String getPurchaseDetailsUrl();
    /**
     * <code>optional string purchaseDetailsUrl = 20;</code>
     */
    com.google.protobuf.ByteString
        getPurchaseDetailsUrlBytes();

    // optional bool detailsReusable = 21;
    /**
     * <code>optional bool detailsReusable = 21;</code>
     */
    boolean hasDetailsReusable();
    /**
     * <code>optional bool detailsReusable = 21;</code>
     */
    boolean getDetailsReusable();

    // optional string subtitle = 22;
    /**
     * <code>optional string subtitle = 22;</code>
     */
    boolean hasSubtitle();
    /**
     * <code>optional string subtitle = 22;</code>
     */
    java.lang.String getSubtitle();
    /**
     * <code>optional string subtitle = 22;</code>
     */
    com.google.protobuf.ByteString
        getSubtitleBytes();
  }
  /**
   * Protobuf type {@code DocV2}
   */
  public static final class DocV2 extends
      com.google.protobuf.GeneratedMessage
      implements DocV2OrBuilder {
    // Use DocV2.newBuilder() to construct.
    private DocV2(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private DocV2(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final DocV2 defaultInstance;
    public static DocV2 getDefaultInstance() {
      return defaultInstance;
    }

    public DocV2 getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private DocV2(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              docid_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              backendDocid_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              docType_ = input.readInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              backendId_ = input.readInt32();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              title_ = input.readBytes();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000020;
              creator_ = input.readBytes();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000040;
              descriptionHtml_ = input.readBytes();
              break;
            }
            case 66: {
              if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
                offer_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Offer>();
                mutable_bitField0_ |= 0x00000080;
              }
              offer_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Offer.PARSER, extensionRegistry));
              break;
            }
            case 74: {
              com.akdeniz.googleplaycrawler.GooglePlay.Availability.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = availability_.toBuilder();
              }
              availability_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Availability.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(availability_);
                availability_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 82: {
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                image_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Image>();
                mutable_bitField0_ |= 0x00000200;
              }
              image_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Image.PARSER, extensionRegistry));
              break;
            }
            case 90: {
              if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
                child_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.DocV2>();
                mutable_bitField0_ |= 0x00000400;
              }
              child_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.DocV2.PARSER, extensionRegistry));
              break;
            }
            case 98: {
              com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = containerMetadata_.toBuilder();
              }
              containerMetadata_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(containerMetadata_);
                containerMetadata_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 106: {
              com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000200) == 0x00000200)) {
                subBuilder = details_.toBuilder();
              }
              details_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(details_);
                details_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000200;
              break;
            }
            case 114: {
              com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.Builder subBuilder = null;
              if (((bitField0_ & 0x00000400) == 0x00000400)) {
                subBuilder = aggregateRating_.toBuilder();
              }
              aggregateRating_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(aggregateRating_);
                aggregateRating_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000400;
              break;
            }
            case 130: {
              bitField0_ |= 0x00000800;
              detailsUrl_ = input.readBytes();
              break;
            }
            case 138: {
              bitField0_ |= 0x00001000;
              shareUrl_ = input.readBytes();
              break;
            }
            case 146: {
              bitField0_ |= 0x00002000;
              reviewsUrl_ = input.readBytes();
              break;
            }
            case 154: {
              bitField0_ |= 0x00004000;
              backendUrl_ = input.readBytes();
              break;
            }
            case 162: {
              bitField0_ |= 0x00008000;
              purchaseDetailsUrl_ = input.readBytes();
              break;
            }
            case 168: {
              bitField0_ |= 0x00010000;
              detailsReusable_ = input.readBool();
              break;
            }
            case 178: {
              bitField0_ |= 0x00020000;
              subtitle_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) {
          offer_ = java.util.Collections.unmodifiableList(offer_);
        }
        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
          image_ = java.util.Collections.unmodifiableList(image_);
        }
        if (((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
          child_ = java.util.Collections.unmodifiableList(child_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocV2_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocV2_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.DocV2.class, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder.class);
    }

    public static com.google.protobuf.Parser<DocV2> PARSER =
        new com.google.protobuf.AbstractParser<DocV2>() {
      public DocV2 parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DocV2(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<DocV2> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string docid = 1;
    public static final int DOCID_FIELD_NUMBER = 1;
    private java.lang.Object docid_;
    /**
     * <code>optional string docid = 1;</code>
     */
    public boolean hasDocid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string docid = 1;</code>
     */
    public java.lang.String getDocid() {
      java.lang.Object ref = docid_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          docid_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string docid = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDocidBytes() {
      java.lang.Object ref = docid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        docid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string backendDocid = 2;
    public static final int BACKENDDOCID_FIELD_NUMBER = 2;
    private java.lang.Object backendDocid_;
    /**
     * <code>optional string backendDocid = 2;</code>
     */
    public boolean hasBackendDocid() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string backendDocid = 2;</code>
     */
    public java.lang.String getBackendDocid() {
      java.lang.Object ref = backendDocid_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          backendDocid_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string backendDocid = 2;</code>
     */
    public com.google.protobuf.ByteString
        getBackendDocidBytes() {
      java.lang.Object ref = backendDocid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        backendDocid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 docType = 3;
    public static final int DOCTYPE_FIELD_NUMBER = 3;
    private int docType_;
    /**
     * <code>optional int32 docType = 3;</code>
     */
    public boolean hasDocType() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int32 docType = 3;</code>
     */
    public int getDocType() {
      return docType_;
    }

    // optional int32 backendId = 4;
    public static final int BACKENDID_FIELD_NUMBER = 4;
    private int backendId_;
    /**
     * <code>optional int32 backendId = 4;</code>
     */
    public boolean hasBackendId() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int32 backendId = 4;</code>
     */
    public int getBackendId() {
      return backendId_;
    }

    // optional string title = 5;
    public static final int TITLE_FIELD_NUMBER = 5;
    private java.lang.Object title_;
    /**
     * <code>optional string title = 5;</code>
     */
    public boolean hasTitle() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string title = 5;</code>
     */
    public java.lang.String getTitle() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          title_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string title = 5;</code>
     */
    public com.google.protobuf.ByteString
        getTitleBytes() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        title_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string creator = 6;
    public static final int CREATOR_FIELD_NUMBER = 6;
    private java.lang.Object creator_;
    /**
     * <code>optional string creator = 6;</code>
     */
    public boolean hasCreator() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string creator = 6;</code>
     */
    public java.lang.String getCreator() {
      java.lang.Object ref = creator_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          creator_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string creator = 6;</code>
     */
    public com.google.protobuf.ByteString
        getCreatorBytes() {
      java.lang.Object ref = creator_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        creator_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string descriptionHtml = 7;
    public static final int DESCRIPTIONHTML_FIELD_NUMBER = 7;
    private java.lang.Object descriptionHtml_;
    /**
     * <code>optional string descriptionHtml = 7;</code>
     */
    public boolean hasDescriptionHtml() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional string descriptionHtml = 7;</code>
     */
    public java.lang.String getDescriptionHtml() {
      java.lang.Object ref = descriptionHtml_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          descriptionHtml_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string descriptionHtml = 7;</code>
     */
    public com.google.protobuf.ByteString
        getDescriptionHtmlBytes() {
      java.lang.Object ref = descriptionHtml_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        descriptionHtml_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated .Offer offer = 8;
    public static final int OFFER_FIELD_NUMBER = 8;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> offer_;
    /**
     * <code>repeated .Offer offer = 8;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> getOfferList() {
      return offer_;
    }
    /**
     * <code>repeated .Offer offer = 8;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
        getOfferOrBuilderList() {
      return offer_;
    }
    /**
     * <code>repeated .Offer offer = 8;</code>
     */
    public int getOfferCount() {
      return offer_.size();
    }
    /**
     * <code>repeated .Offer offer = 8;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Offer getOffer(int index) {
      return offer_.get(index);
    }
    /**
     * <code>repeated .Offer offer = 8;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getOfferOrBuilder(
        int index) {
      return offer_.get(index);
    }

    // optional .Availability availability = 9;
    public static final int AVAILABILITY_FIELD_NUMBER = 9;
    private com.akdeniz.googleplaycrawler.GooglePlay.Availability availability_;
    /**
     * <code>optional .Availability availability = 9;</code>
     */
    public boolean hasAvailability() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional .Availability availability = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Availability getAvailability() {
      return availability_;
    }
    /**
     * <code>optional .Availability availability = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AvailabilityOrBuilder getAvailabilityOrBuilder() {
      return availability_;
    }

    // repeated .Image image = 10;
    public static final int IMAGE_FIELD_NUMBER = 10;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Image> image_;
    /**
     * <code>repeated .Image image = 10;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Image> getImageList() {
      return image_;
    }
    /**
     * <code>repeated .Image image = 10;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder> 
        getImageOrBuilderList() {
      return image_;
    }
    /**
     * <code>repeated .Image image = 10;</code>
     */
    public int getImageCount() {
      return image_.size();
    }
    /**
     * <code>repeated .Image image = 10;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Image getImage(int index) {
      return image_.get(index);
    }
    /**
     * <code>repeated .Image image = 10;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder getImageOrBuilder(
        int index) {
      return image_.get(index);
    }

    // repeated .DocV2 child = 11;
    public static final int CHILD_FIELD_NUMBER = 11;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> child_;
    /**
     * <code>repeated .DocV2 child = 11;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> getChildList() {
      return child_;
    }
    /**
     * <code>repeated .DocV2 child = 11;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> 
        getChildOrBuilderList() {
      return child_;
    }
    /**
     * <code>repeated .DocV2 child = 11;</code>
     */
    public int getChildCount() {
      return child_.size();
    }
    /**
     * <code>repeated .DocV2 child = 11;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getChild(int index) {
      return child_.get(index);
    }
    /**
     * <code>repeated .DocV2 child = 11;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getChildOrBuilder(
        int index) {
      return child_.get(index);
    }

    // optional .ContainerMetadata containerMetadata = 12;
    public static final int CONTAINERMETADATA_FIELD_NUMBER = 12;
    private com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata containerMetadata_;
    /**
     * <code>optional .ContainerMetadata containerMetadata = 12;</code>
     */
    public boolean hasContainerMetadata() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional .ContainerMetadata containerMetadata = 12;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata getContainerMetadata() {
      return containerMetadata_;
    }
    /**
     * <code>optional .ContainerMetadata containerMetadata = 12;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadataOrBuilder getContainerMetadataOrBuilder() {
      return containerMetadata_;
    }

    // optional .DocumentDetails details = 13;
    public static final int DETAILS_FIELD_NUMBER = 13;
    private com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails details_;
    /**
     * <code>optional .DocumentDetails details = 13;</code>
     */
    public boolean hasDetails() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional .DocumentDetails details = 13;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails getDetails() {
      return details_;
    }
    /**
     * <code>optional .DocumentDetails details = 13;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetailsOrBuilder getDetailsOrBuilder() {
      return details_;
    }

    // optional .AggregateRating aggregateRating = 14;
    public static final int AGGREGATERATING_FIELD_NUMBER = 14;
    private com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating aggregateRating_;
    /**
     * <code>optional .AggregateRating aggregateRating = 14;</code>
     */
    public boolean hasAggregateRating() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional .AggregateRating aggregateRating = 14;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating getAggregateRating() {
      return aggregateRating_;
    }
    /**
     * <code>optional .AggregateRating aggregateRating = 14;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AggregateRatingOrBuilder getAggregateRatingOrBuilder() {
      return aggregateRating_;
    }

    // optional string detailsUrl = 16;
    public static final int DETAILSURL_FIELD_NUMBER = 16;
    private java.lang.Object detailsUrl_;
    /**
     * <code>optional string detailsUrl = 16;</code>
     */
    public boolean hasDetailsUrl() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional string detailsUrl = 16;</code>
     */
    public java.lang.String getDetailsUrl() {
      java.lang.Object ref = detailsUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          detailsUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string detailsUrl = 16;</code>
     */
    public com.google.protobuf.ByteString
        getDetailsUrlBytes() {
      java.lang.Object ref = detailsUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        detailsUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string shareUrl = 17;
    public static final int SHAREURL_FIELD_NUMBER = 17;
    private java.lang.Object shareUrl_;
    /**
     * <code>optional string shareUrl = 17;</code>
     */
    public boolean hasShareUrl() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <code>optional string shareUrl = 17;</code>
     */
    public java.lang.String getShareUrl() {
      java.lang.Object ref = shareUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          shareUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string shareUrl = 17;</code>
     */
    public com.google.protobuf.ByteString
        getShareUrlBytes() {
      java.lang.Object ref = shareUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        shareUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string reviewsUrl = 18;
    public static final int REVIEWSURL_FIELD_NUMBER = 18;
    private java.lang.Object reviewsUrl_;
    /**
     * <code>optional string reviewsUrl = 18;</code>
     */
    public boolean hasReviewsUrl() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     * <code>optional string reviewsUrl = 18;</code>
     */
    public java.lang.String getReviewsUrl() {
      java.lang.Object ref = reviewsUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          reviewsUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string reviewsUrl = 18;</code>
     */
    public com.google.protobuf.ByteString
        getReviewsUrlBytes() {
      java.lang.Object ref = reviewsUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        reviewsUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string backendUrl = 19;
    public static final int BACKENDURL_FIELD_NUMBER = 19;
    private java.lang.Object backendUrl_;
    /**
     * <code>optional string backendUrl = 19;</code>
     */
    public boolean hasBackendUrl() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     * <code>optional string backendUrl = 19;</code>
     */
    public java.lang.String getBackendUrl() {
      java.lang.Object ref = backendUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          backendUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string backendUrl = 19;</code>
     */
    public com.google.protobuf.ByteString
        getBackendUrlBytes() {
      java.lang.Object ref = backendUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        backendUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string purchaseDetailsUrl = 20;
    public static final int PURCHASEDETAILSURL_FIELD_NUMBER = 20;
    private java.lang.Object purchaseDetailsUrl_;
    /**
     * <code>optional string purchaseDetailsUrl = 20;</code>
     */
    public boolean hasPurchaseDetailsUrl() {
      return ((bitField0_ & 0x00008000) == 0x00008000);
    }
    /**
     * <code>optional string purchaseDetailsUrl = 20;</code>
     */
    public java.lang.String getPurchaseDetailsUrl() {
      java.lang.Object ref = purchaseDetailsUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          purchaseDetailsUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string purchaseDetailsUrl = 20;</code>
     */
    public com.google.protobuf.ByteString
        getPurchaseDetailsUrlBytes() {
      java.lang.Object ref = purchaseDetailsUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        purchaseDetailsUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool detailsReusable = 21;
    public static final int DETAILSREUSABLE_FIELD_NUMBER = 21;
    private boolean detailsReusable_;
    /**
     * <code>optional bool detailsReusable = 21;</code>
     */
    public boolean hasDetailsReusable() {
      return ((bitField0_ & 0x00010000) == 0x00010000);
    }
    /**
     * <code>optional bool detailsReusable = 21;</code>
     */
    public boolean getDetailsReusable() {
      return detailsReusable_;
    }

    // optional string subtitle = 22;
    public static final int SUBTITLE_FIELD_NUMBER = 22;
    private java.lang.Object subtitle_;
    /**
     * <code>optional string subtitle = 22;</code>
     */
    public boolean hasSubtitle() {
      return ((bitField0_ & 0x00020000) == 0x00020000);
    }
    /**
     * <code>optional string subtitle = 22;</code>
     */
    public java.lang.String getSubtitle() {
      java.lang.Object ref = subtitle_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          subtitle_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string subtitle = 22;</code>
     */
    public com.google.protobuf.ByteString
        getSubtitleBytes() {
      java.lang.Object ref = subtitle_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        subtitle_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      docid_ = "";
      backendDocid_ = "";
      docType_ = 0;
      backendId_ = 0;
      title_ = "";
      creator_ = "";
      descriptionHtml_ = "";
      offer_ = java.util.Collections.emptyList();
      availability_ = com.akdeniz.googleplaycrawler.GooglePlay.Availability.getDefaultInstance();
      image_ = java.util.Collections.emptyList();
      child_ = java.util.Collections.emptyList();
      containerMetadata_ = com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.getDefaultInstance();
      details_ = com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.getDefaultInstance();
      aggregateRating_ = com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.getDefaultInstance();
      detailsUrl_ = "";
      shareUrl_ = "";
      reviewsUrl_ = "";
      backendUrl_ = "";
      purchaseDetailsUrl_ = "";
      detailsReusable_ = false;
      subtitle_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getDocidBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getBackendDocidBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(3, docType_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, backendId_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getTitleBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(6, getCreatorBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(7, getDescriptionHtmlBytes());
      }
      for (int i = 0; i < offer_.size(); i++) {
        output.writeMessage(8, offer_.get(i));
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(9, availability_);
      }
      for (int i = 0; i < image_.size(); i++) {
        output.writeMessage(10, image_.get(i));
      }
      for (int i = 0; i < child_.size(); i++) {
        output.writeMessage(11, child_.get(i));
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(12, containerMetadata_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeMessage(13, details_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeMessage(14, aggregateRating_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeBytes(16, getDetailsUrlBytes());
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeBytes(17, getShareUrlBytes());
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeBytes(18, getReviewsUrlBytes());
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeBytes(19, getBackendUrlBytes());
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        output.writeBytes(20, getPurchaseDetailsUrlBytes());
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        output.writeBool(21, detailsReusable_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        output.writeBytes(22, getSubtitleBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getDocidBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getBackendDocidBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, docType_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, backendId_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getTitleBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getCreatorBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getDescriptionHtmlBytes());
      }
      for (int i = 0; i < offer_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, offer_.get(i));
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, availability_);
      }
      for (int i = 0; i < image_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, image_.get(i));
      }
      for (int i = 0; i < child_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, child_.get(i));
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, containerMetadata_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(13, details_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(14, aggregateRating_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(16, getDetailsUrlBytes());
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(17, getShareUrlBytes());
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(18, getReviewsUrlBytes());
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(19, getBackendUrlBytes());
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(20, getPurchaseDetailsUrlBytes());
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(21, detailsReusable_);
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(22, getSubtitleBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV2 parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV2 parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV2 parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV2 parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV2 parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV2 parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV2 parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV2 parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV2 parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.DocV2 parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.DocV2 prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code DocV2}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocV2_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocV2_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.DocV2.class, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.DocV2.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getOfferFieldBuilder();
          getAvailabilityFieldBuilder();
          getImageFieldBuilder();
          getChildFieldBuilder();
          getContainerMetadataFieldBuilder();
          getDetailsFieldBuilder();
          getAggregateRatingFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        docid_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        backendDocid_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        docType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        backendId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        title_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        creator_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        descriptionHtml_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        if (offerBuilder_ == null) {
          offer_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
        } else {
          offerBuilder_.clear();
        }
        if (availabilityBuilder_ == null) {
          availability_ = com.akdeniz.googleplaycrawler.GooglePlay.Availability.getDefaultInstance();
        } else {
          availabilityBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        if (imageBuilder_ == null) {
          image_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
        } else {
          imageBuilder_.clear();
        }
        if (childBuilder_ == null) {
          child_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
        } else {
          childBuilder_.clear();
        }
        if (containerMetadataBuilder_ == null) {
          containerMetadata_ = com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.getDefaultInstance();
        } else {
          containerMetadataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        if (detailsBuilder_ == null) {
          details_ = com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.getDefaultInstance();
        } else {
          detailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00001000);
        if (aggregateRatingBuilder_ == null) {
          aggregateRating_ = com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.getDefaultInstance();
        } else {
          aggregateRatingBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00002000);
        detailsUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00004000);
        shareUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00008000);
        reviewsUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00010000);
        backendUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00020000);
        purchaseDetailsUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00040000);
        detailsReusable_ = false;
        bitField0_ = (bitField0_ & ~0x00080000);
        subtitle_ = "";
        bitField0_ = (bitField0_ & ~0x00100000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_DocV2_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2 build() {
        com.akdeniz.googleplaycrawler.GooglePlay.DocV2 result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2 buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.DocV2 result = new com.akdeniz.googleplaycrawler.GooglePlay.DocV2(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.docid_ = docid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.backendDocid_ = backendDocid_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.docType_ = docType_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.backendId_ = backendId_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.title_ = title_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.creator_ = creator_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.descriptionHtml_ = descriptionHtml_;
        if (offerBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080)) {
            offer_ = java.util.Collections.unmodifiableList(offer_);
            bitField0_ = (bitField0_ & ~0x00000080);
          }
          result.offer_ = offer_;
        } else {
          result.offer_ = offerBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000080;
        }
        if (availabilityBuilder_ == null) {
          result.availability_ = availability_;
        } else {
          result.availability_ = availabilityBuilder_.build();
        }
        if (imageBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200)) {
            image_ = java.util.Collections.unmodifiableList(image_);
            bitField0_ = (bitField0_ & ~0x00000200);
          }
          result.image_ = image_;
        } else {
          result.image_ = imageBuilder_.build();
        }
        if (childBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400)) {
            child_ = java.util.Collections.unmodifiableList(child_);
            bitField0_ = (bitField0_ & ~0x00000400);
          }
          result.child_ = child_;
        } else {
          result.child_ = childBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000100;
        }
        if (containerMetadataBuilder_ == null) {
          result.containerMetadata_ = containerMetadata_;
        } else {
          result.containerMetadata_ = containerMetadataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00000200;
        }
        if (detailsBuilder_ == null) {
          result.details_ = details_;
        } else {
          result.details_ = detailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00000400;
        }
        if (aggregateRatingBuilder_ == null) {
          result.aggregateRating_ = aggregateRating_;
        } else {
          result.aggregateRating_ = aggregateRatingBuilder_.build();
        }
        if (((from_bitField0_ & 0x00004000) == 0x00004000)) {
          to_bitField0_ |= 0x00000800;
        }
        result.detailsUrl_ = detailsUrl_;
        if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.shareUrl_ = shareUrl_;
        if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x00002000;
        }
        result.reviewsUrl_ = reviewsUrl_;
        if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
          to_bitField0_ |= 0x00004000;
        }
        result.backendUrl_ = backendUrl_;
        if (((from_bitField0_ & 0x00040000) == 0x00040000)) {
          to_bitField0_ |= 0x00008000;
        }
        result.purchaseDetailsUrl_ = purchaseDetailsUrl_;
        if (((from_bitField0_ & 0x00080000) == 0x00080000)) {
          to_bitField0_ |= 0x00010000;
        }
        result.detailsReusable_ = detailsReusable_;
        if (((from_bitField0_ & 0x00100000) == 0x00100000)) {
          to_bitField0_ |= 0x00020000;
        }
        result.subtitle_ = subtitle_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.DocV2) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.DocV2)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.DocV2 other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance()) return this;
        if (other.hasDocid()) {
          bitField0_ |= 0x00000001;
          docid_ = other.docid_;
          onChanged();
        }
        if (other.hasBackendDocid()) {
          bitField0_ |= 0x00000002;
          backendDocid_ = other.backendDocid_;
          onChanged();
        }
        if (other.hasDocType()) {
          setDocType(other.getDocType());
        }
        if (other.hasBackendId()) {
          setBackendId(other.getBackendId());
        }
        if (other.hasTitle()) {
          bitField0_ |= 0x00000010;
          title_ = other.title_;
          onChanged();
        }
        if (other.hasCreator()) {
          bitField0_ |= 0x00000020;
          creator_ = other.creator_;
          onChanged();
        }
        if (other.hasDescriptionHtml()) {
          bitField0_ |= 0x00000040;
          descriptionHtml_ = other.descriptionHtml_;
          onChanged();
        }
        if (offerBuilder_ == null) {
          if (!other.offer_.isEmpty()) {
            if (offer_.isEmpty()) {
              offer_ = other.offer_;
              bitField0_ = (bitField0_ & ~0x00000080);
            } else {
              ensureOfferIsMutable();
              offer_.addAll(other.offer_);
            }
            onChanged();
          }
        } else {
          if (!other.offer_.isEmpty()) {
            if (offerBuilder_.isEmpty()) {
              offerBuilder_.dispose();
              offerBuilder_ = null;
              offer_ = other.offer_;
              bitField0_ = (bitField0_ & ~0x00000080);
              offerBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getOfferFieldBuilder() : null;
            } else {
              offerBuilder_.addAllMessages(other.offer_);
            }
          }
        }
        if (other.hasAvailability()) {
          mergeAvailability(other.getAvailability());
        }
        if (imageBuilder_ == null) {
          if (!other.image_.isEmpty()) {
            if (image_.isEmpty()) {
              image_ = other.image_;
              bitField0_ = (bitField0_ & ~0x00000200);
            } else {
              ensureImageIsMutable();
              image_.addAll(other.image_);
            }
            onChanged();
          }
        } else {
          if (!other.image_.isEmpty()) {
            if (imageBuilder_.isEmpty()) {
              imageBuilder_.dispose();
              imageBuilder_ = null;
              image_ = other.image_;
              bitField0_ = (bitField0_ & ~0x00000200);
              imageBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getImageFieldBuilder() : null;
            } else {
              imageBuilder_.addAllMessages(other.image_);
            }
          }
        }
        if (childBuilder_ == null) {
          if (!other.child_.isEmpty()) {
            if (child_.isEmpty()) {
              child_ = other.child_;
              bitField0_ = (bitField0_ & ~0x00000400);
            } else {
              ensureChildIsMutable();
              child_.addAll(other.child_);
            }
            onChanged();
          }
        } else {
          if (!other.child_.isEmpty()) {
            if (childBuilder_.isEmpty()) {
              childBuilder_.dispose();
              childBuilder_ = null;
              child_ = other.child_;
              bitField0_ = (bitField0_ & ~0x00000400);
              childBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getChildFieldBuilder() : null;
            } else {
              childBuilder_.addAllMessages(other.child_);
            }
          }
        }
        if (other.hasContainerMetadata()) {
          mergeContainerMetadata(other.getContainerMetadata());
        }
        if (other.hasDetails()) {
          mergeDetails(other.getDetails());
        }
        if (other.hasAggregateRating()) {
          mergeAggregateRating(other.getAggregateRating());
        }
        if (other.hasDetailsUrl()) {
          bitField0_ |= 0x00004000;
          detailsUrl_ = other.detailsUrl_;
          onChanged();
        }
        if (other.hasShareUrl()) {
          bitField0_ |= 0x00008000;
          shareUrl_ = other.shareUrl_;
          onChanged();
        }
        if (other.hasReviewsUrl()) {
          bitField0_ |= 0x00010000;
          reviewsUrl_ = other.reviewsUrl_;
          onChanged();
        }
        if (other.hasBackendUrl()) {
          bitField0_ |= 0x00020000;
          backendUrl_ = other.backendUrl_;
          onChanged();
        }
        if (other.hasPurchaseDetailsUrl()) {
          bitField0_ |= 0x00040000;
          purchaseDetailsUrl_ = other.purchaseDetailsUrl_;
          onChanged();
        }
        if (other.hasDetailsReusable()) {
          setDetailsReusable(other.getDetailsReusable());
        }
        if (other.hasSubtitle()) {
          bitField0_ |= 0x00100000;
          subtitle_ = other.subtitle_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.DocV2 parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.DocV2) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string docid = 1;
      private java.lang.Object docid_ = "";
      /**
       * <code>optional string docid = 1;</code>
       */
      public boolean hasDocid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string docid = 1;</code>
       */
      public java.lang.String getDocid() {
        java.lang.Object ref = docid_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          docid_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string docid = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDocidBytes() {
        java.lang.Object ref = docid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          docid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string docid = 1;</code>
       */
      public Builder setDocid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        docid_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string docid = 1;</code>
       */
      public Builder clearDocid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        docid_ = getDefaultInstance().getDocid();
        onChanged();
        return this;
      }
      /**
       * <code>optional string docid = 1;</code>
       */
      public Builder setDocidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        docid_ = value;
        onChanged();
        return this;
      }

      // optional string backendDocid = 2;
      private java.lang.Object backendDocid_ = "";
      /**
       * <code>optional string backendDocid = 2;</code>
       */
      public boolean hasBackendDocid() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string backendDocid = 2;</code>
       */
      public java.lang.String getBackendDocid() {
        java.lang.Object ref = backendDocid_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          backendDocid_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string backendDocid = 2;</code>
       */
      public com.google.protobuf.ByteString
          getBackendDocidBytes() {
        java.lang.Object ref = backendDocid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          backendDocid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string backendDocid = 2;</code>
       */
      public Builder setBackendDocid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        backendDocid_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string backendDocid = 2;</code>
       */
      public Builder clearBackendDocid() {
        bitField0_ = (bitField0_ & ~0x00000002);
        backendDocid_ = getDefaultInstance().getBackendDocid();
        onChanged();
        return this;
      }
      /**
       * <code>optional string backendDocid = 2;</code>
       */
      public Builder setBackendDocidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        backendDocid_ = value;
        onChanged();
        return this;
      }

      // optional int32 docType = 3;
      private int docType_ ;
      /**
       * <code>optional int32 docType = 3;</code>
       */
      public boolean hasDocType() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int32 docType = 3;</code>
       */
      public int getDocType() {
        return docType_;
      }
      /**
       * <code>optional int32 docType = 3;</code>
       */
      public Builder setDocType(int value) {
        bitField0_ |= 0x00000004;
        docType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 docType = 3;</code>
       */
      public Builder clearDocType() {
        bitField0_ = (bitField0_ & ~0x00000004);
        docType_ = 0;
        onChanged();
        return this;
      }

      // optional int32 backendId = 4;
      private int backendId_ ;
      /**
       * <code>optional int32 backendId = 4;</code>
       */
      public boolean hasBackendId() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int32 backendId = 4;</code>
       */
      public int getBackendId() {
        return backendId_;
      }
      /**
       * <code>optional int32 backendId = 4;</code>
       */
      public Builder setBackendId(int value) {
        bitField0_ |= 0x00000008;
        backendId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 backendId = 4;</code>
       */
      public Builder clearBackendId() {
        bitField0_ = (bitField0_ & ~0x00000008);
        backendId_ = 0;
        onChanged();
        return this;
      }

      // optional string title = 5;
      private java.lang.Object title_ = "";
      /**
       * <code>optional string title = 5;</code>
       */
      public boolean hasTitle() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string title = 5;</code>
       */
      public java.lang.String getTitle() {
        java.lang.Object ref = title_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          title_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string title = 5;</code>
       */
      public com.google.protobuf.ByteString
          getTitleBytes() {
        java.lang.Object ref = title_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          title_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string title = 5;</code>
       */
      public Builder setTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        title_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 5;</code>
       */
      public Builder clearTitle() {
        bitField0_ = (bitField0_ & ~0x00000010);
        title_ = getDefaultInstance().getTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 5;</code>
       */
      public Builder setTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        title_ = value;
        onChanged();
        return this;
      }

      // optional string creator = 6;
      private java.lang.Object creator_ = "";
      /**
       * <code>optional string creator = 6;</code>
       */
      public boolean hasCreator() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional string creator = 6;</code>
       */
      public java.lang.String getCreator() {
        java.lang.Object ref = creator_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          creator_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string creator = 6;</code>
       */
      public com.google.protobuf.ByteString
          getCreatorBytes() {
        java.lang.Object ref = creator_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          creator_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string creator = 6;</code>
       */
      public Builder setCreator(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        creator_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string creator = 6;</code>
       */
      public Builder clearCreator() {
        bitField0_ = (bitField0_ & ~0x00000020);
        creator_ = getDefaultInstance().getCreator();
        onChanged();
        return this;
      }
      /**
       * <code>optional string creator = 6;</code>
       */
      public Builder setCreatorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        creator_ = value;
        onChanged();
        return this;
      }

      // optional string descriptionHtml = 7;
      private java.lang.Object descriptionHtml_ = "";
      /**
       * <code>optional string descriptionHtml = 7;</code>
       */
      public boolean hasDescriptionHtml() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string descriptionHtml = 7;</code>
       */
      public java.lang.String getDescriptionHtml() {
        java.lang.Object ref = descriptionHtml_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          descriptionHtml_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string descriptionHtml = 7;</code>
       */
      public com.google.protobuf.ByteString
          getDescriptionHtmlBytes() {
        java.lang.Object ref = descriptionHtml_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          descriptionHtml_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string descriptionHtml = 7;</code>
       */
      public Builder setDescriptionHtml(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        descriptionHtml_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string descriptionHtml = 7;</code>
       */
      public Builder clearDescriptionHtml() {
        bitField0_ = (bitField0_ & ~0x00000040);
        descriptionHtml_ = getDefaultInstance().getDescriptionHtml();
        onChanged();
        return this;
      }
      /**
       * <code>optional string descriptionHtml = 7;</code>
       */
      public Builder setDescriptionHtmlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        descriptionHtml_ = value;
        onChanged();
        return this;
      }

      // repeated .Offer offer = 8;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> offer_ =
        java.util.Collections.emptyList();
      private void ensureOfferIsMutable() {
        if (!((bitField0_ & 0x00000080) == 0x00000080)) {
          offer_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Offer>(offer_);
          bitField0_ |= 0x00000080;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> offerBuilder_;

      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer> getOfferList() {
        if (offerBuilder_ == null) {
          return java.util.Collections.unmodifiableList(offer_);
        } else {
          return offerBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public int getOfferCount() {
        if (offerBuilder_ == null) {
          return offer_.size();
        } else {
          return offerBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer getOffer(int index) {
        if (offerBuilder_ == null) {
          return offer_.get(index);
        } else {
          return offerBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public Builder setOffer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (offerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOfferIsMutable();
          offer_.set(index, value);
          onChanged();
        } else {
          offerBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public Builder setOffer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder builderForValue) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          offer_.set(index, builderForValue.build());
          onChanged();
        } else {
          offerBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public Builder addOffer(com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (offerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOfferIsMutable();
          offer_.add(value);
          onChanged();
        } else {
          offerBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public Builder addOffer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer value) {
        if (offerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureOfferIsMutable();
          offer_.add(index, value);
          onChanged();
        } else {
          offerBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public Builder addOffer(
          com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder builderForValue) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          offer_.add(builderForValue.build());
          onChanged();
        } else {
          offerBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public Builder addOffer(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder builderForValue) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          offer_.add(index, builderForValue.build());
          onChanged();
        } else {
          offerBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public Builder addAllOffer(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Offer> values) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          super.addAll(values, offer_);
          onChanged();
        } else {
          offerBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public Builder clearOffer() {
        if (offerBuilder_ == null) {
          offer_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000080);
          onChanged();
        } else {
          offerBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public Builder removeOffer(int index) {
        if (offerBuilder_ == null) {
          ensureOfferIsMutable();
          offer_.remove(index);
          onChanged();
        } else {
          offerBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder getOfferBuilder(
          int index) {
        return getOfferFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder getOfferOrBuilder(
          int index) {
        if (offerBuilder_ == null) {
          return offer_.get(index);  } else {
          return offerBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
           getOfferOrBuilderList() {
        if (offerBuilder_ != null) {
          return offerBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(offer_);
        }
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder addOfferBuilder() {
        return getOfferFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance());
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder addOfferBuilder(
          int index) {
        return getOfferFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Offer.getDefaultInstance());
      }
      /**
       * <code>repeated .Offer offer = 8;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder> 
           getOfferBuilderList() {
        return getOfferFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder> 
          getOfferFieldBuilder() {
        if (offerBuilder_ == null) {
          offerBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Offer, com.akdeniz.googleplaycrawler.GooglePlay.Offer.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OfferOrBuilder>(
                  offer_,
                  ((bitField0_ & 0x00000080) == 0x00000080),
                  getParentForChildren(),
                  isClean());
          offer_ = null;
        }
        return offerBuilder_;
      }

      // optional .Availability availability = 9;
      private com.akdeniz.googleplaycrawler.GooglePlay.Availability availability_ = com.akdeniz.googleplaycrawler.GooglePlay.Availability.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Availability, com.akdeniz.googleplaycrawler.GooglePlay.Availability.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AvailabilityOrBuilder> availabilityBuilder_;
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public boolean hasAvailability() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Availability getAvailability() {
        if (availabilityBuilder_ == null) {
          return availability_;
        } else {
          return availabilityBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public Builder setAvailability(com.akdeniz.googleplaycrawler.GooglePlay.Availability value) {
        if (availabilityBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          availability_ = value;
          onChanged();
        } else {
          availabilityBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public Builder setAvailability(
          com.akdeniz.googleplaycrawler.GooglePlay.Availability.Builder builderForValue) {
        if (availabilityBuilder_ == null) {
          availability_ = builderForValue.build();
          onChanged();
        } else {
          availabilityBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public Builder mergeAvailability(com.akdeniz.googleplaycrawler.GooglePlay.Availability value) {
        if (availabilityBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              availability_ != com.akdeniz.googleplaycrawler.GooglePlay.Availability.getDefaultInstance()) {
            availability_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Availability.newBuilder(availability_).mergeFrom(value).buildPartial();
          } else {
            availability_ = value;
          }
          onChanged();
        } else {
          availabilityBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public Builder clearAvailability() {
        if (availabilityBuilder_ == null) {
          availability_ = com.akdeniz.googleplaycrawler.GooglePlay.Availability.getDefaultInstance();
          onChanged();
        } else {
          availabilityBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Availability.Builder getAvailabilityBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getAvailabilityFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AvailabilityOrBuilder getAvailabilityOrBuilder() {
        if (availabilityBuilder_ != null) {
          return availabilityBuilder_.getMessageOrBuilder();
        } else {
          return availability_;
        }
      }
      /**
       * <code>optional .Availability availability = 9;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Availability, com.akdeniz.googleplaycrawler.GooglePlay.Availability.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AvailabilityOrBuilder> 
          getAvailabilityFieldBuilder() {
        if (availabilityBuilder_ == null) {
          availabilityBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Availability, com.akdeniz.googleplaycrawler.GooglePlay.Availability.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AvailabilityOrBuilder>(
                  availability_,
                  getParentForChildren(),
                  isClean());
          availability_ = null;
        }
        return availabilityBuilder_;
      }

      // repeated .Image image = 10;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Image> image_ =
        java.util.Collections.emptyList();
      private void ensureImageIsMutable() {
        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
          image_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Image>(image_);
          bitField0_ |= 0x00000200;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Image, com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder> imageBuilder_;

      /**
       * <code>repeated .Image image = 10;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Image> getImageList() {
        if (imageBuilder_ == null) {
          return java.util.Collections.unmodifiableList(image_);
        } else {
          return imageBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public int getImageCount() {
        if (imageBuilder_ == null) {
          return image_.size();
        } else {
          return imageBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Image getImage(int index) {
        if (imageBuilder_ == null) {
          return image_.get(index);
        } else {
          return imageBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder setImage(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Image value) {
        if (imageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureImageIsMutable();
          image_.set(index, value);
          onChanged();
        } else {
          imageBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder setImage(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder builderForValue) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          image_.set(index, builderForValue.build());
          onChanged();
        } else {
          imageBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder addImage(com.akdeniz.googleplaycrawler.GooglePlay.Image value) {
        if (imageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureImageIsMutable();
          image_.add(value);
          onChanged();
        } else {
          imageBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder addImage(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Image value) {
        if (imageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureImageIsMutable();
          image_.add(index, value);
          onChanged();
        } else {
          imageBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder addImage(
          com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder builderForValue) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          image_.add(builderForValue.build());
          onChanged();
        } else {
          imageBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder addImage(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder builderForValue) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          image_.add(index, builderForValue.build());
          onChanged();
        } else {
          imageBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder addAllImage(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Image> values) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          super.addAll(values, image_);
          onChanged();
        } else {
          imageBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder clearImage() {
        if (imageBuilder_ == null) {
          image_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000200);
          onChanged();
        } else {
          imageBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public Builder removeImage(int index) {
        if (imageBuilder_ == null) {
          ensureImageIsMutable();
          image_.remove(index);
          onChanged();
        } else {
          imageBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder getImageBuilder(
          int index) {
        return getImageFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder getImageOrBuilder(
          int index) {
        if (imageBuilder_ == null) {
          return image_.get(index);  } else {
          return imageBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder> 
           getImageOrBuilderList() {
        if (imageBuilder_ != null) {
          return imageBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(image_);
        }
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder addImageBuilder() {
        return getImageFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Image.getDefaultInstance());
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder addImageBuilder(
          int index) {
        return getImageFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Image.getDefaultInstance());
      }
      /**
       * <code>repeated .Image image = 10;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder> 
           getImageBuilderList() {
        return getImageFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Image, com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder> 
          getImageFieldBuilder() {
        if (imageBuilder_ == null) {
          imageBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Image, com.akdeniz.googleplaycrawler.GooglePlay.Image.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ImageOrBuilder>(
                  image_,
                  ((bitField0_ & 0x00000200) == 0x00000200),
                  getParentForChildren(),
                  isClean());
          image_ = null;
        }
        return imageBuilder_;
      }

      // repeated .DocV2 child = 11;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> child_ =
        java.util.Collections.emptyList();
      private void ensureChildIsMutable() {
        if (!((bitField0_ & 0x00000400) == 0x00000400)) {
          child_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.DocV2>(child_);
          bitField0_ |= 0x00000400;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> childBuilder_;

      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> getChildList() {
        if (childBuilder_ == null) {
          return java.util.Collections.unmodifiableList(child_);
        } else {
          return childBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public int getChildCount() {
        if (childBuilder_ == null) {
          return child_.size();
        } else {
          return childBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getChild(int index) {
        if (childBuilder_ == null) {
          return child_.get(index);
        } else {
          return childBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public Builder setChild(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2 value) {
        if (childBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildIsMutable();
          child_.set(index, value);
          onChanged();
        } else {
          childBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public Builder setChild(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder builderForValue) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.set(index, builderForValue.build());
          onChanged();
        } else {
          childBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public Builder addChild(com.akdeniz.googleplaycrawler.GooglePlay.DocV2 value) {
        if (childBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildIsMutable();
          child_.add(value);
          onChanged();
        } else {
          childBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public Builder addChild(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2 value) {
        if (childBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureChildIsMutable();
          child_.add(index, value);
          onChanged();
        } else {
          childBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public Builder addChild(
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder builderForValue) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.add(builderForValue.build());
          onChanged();
        } else {
          childBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public Builder addChild(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder builderForValue) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.add(index, builderForValue.build());
          onChanged();
        } else {
          childBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public Builder addAllChild(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV2> values) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          super.addAll(values, child_);
          onChanged();
        } else {
          childBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public Builder clearChild() {
        if (childBuilder_ == null) {
          child_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000400);
          onChanged();
        } else {
          childBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public Builder removeChild(int index) {
        if (childBuilder_ == null) {
          ensureChildIsMutable();
          child_.remove(index);
          onChanged();
        } else {
          childBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder getChildBuilder(
          int index) {
        return getChildFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getChildOrBuilder(
          int index) {
        if (childBuilder_ == null) {
          return child_.get(index);  } else {
          return childBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> 
           getChildOrBuilderList() {
        if (childBuilder_ != null) {
          return childBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(child_);
        }
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder addChildBuilder() {
        return getChildFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance());
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder addChildBuilder(
          int index) {
        return getChildFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance());
      }
      /**
       * <code>repeated .DocV2 child = 11;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder> 
           getChildBuilderList() {
        return getChildFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> 
          getChildFieldBuilder() {
        if (childBuilder_ == null) {
          childBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder>(
                  child_,
                  ((bitField0_ & 0x00000400) == 0x00000400),
                  getParentForChildren(),
                  isClean());
          child_ = null;
        }
        return childBuilder_;
      }

      // optional .ContainerMetadata containerMetadata = 12;
      private com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata containerMetadata_ = com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata, com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadataOrBuilder> containerMetadataBuilder_;
      /**
       * <code>optional .ContainerMetadata containerMetadata = 12;</code>
       */
      public boolean hasContainerMetadata() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional .ContainerMetadata containerMetadata = 12;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata getContainerMetadata() {
        if (containerMetadataBuilder_ == null) {
          return containerMetadata_;
        } else {
          return containerMetadataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .ContainerMetadata containerMetadata = 12;</code>
       */
      public Builder setContainerMetadata(com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata value) {
        if (containerMetadataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          containerMetadata_ = value;
          onChanged();
        } else {
          containerMetadataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .ContainerMetadata containerMetadata = 12;</code>
       */
      public Builder setContainerMetadata(
          com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.Builder builderForValue) {
        if (containerMetadataBuilder_ == null) {
          containerMetadata_ = builderForValue.build();
          onChanged();
        } else {
          containerMetadataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .ContainerMetadata containerMetadata = 12;</code>
       */
      public Builder mergeContainerMetadata(com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata value) {
        if (containerMetadataBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800) &&
              containerMetadata_ != com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.getDefaultInstance()) {
            containerMetadata_ =
              com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.newBuilder(containerMetadata_).mergeFrom(value).buildPartial();
          } else {
            containerMetadata_ = value;
          }
          onChanged();
        } else {
          containerMetadataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000800;
        return this;
      }
      /**
       * <code>optional .ContainerMetadata containerMetadata = 12;</code>
       */
      public Builder clearContainerMetadata() {
        if (containerMetadataBuilder_ == null) {
          containerMetadata_ = com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.getDefaultInstance();
          onChanged();
        } else {
          containerMetadataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }
      /**
       * <code>optional .ContainerMetadata containerMetadata = 12;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.Builder getContainerMetadataBuilder() {
        bitField0_ |= 0x00000800;
        onChanged();
        return getContainerMetadataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .ContainerMetadata containerMetadata = 12;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadataOrBuilder getContainerMetadataOrBuilder() {
        if (containerMetadataBuilder_ != null) {
          return containerMetadataBuilder_.getMessageOrBuilder();
        } else {
          return containerMetadata_;
        }
      }
      /**
       * <code>optional .ContainerMetadata containerMetadata = 12;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata, com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadataOrBuilder> 
          getContainerMetadataFieldBuilder() {
        if (containerMetadataBuilder_ == null) {
          containerMetadataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata, com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadata.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ContainerMetadataOrBuilder>(
                  containerMetadata_,
                  getParentForChildren(),
                  isClean());
          containerMetadata_ = null;
        }
        return containerMetadataBuilder_;
      }

      // optional .DocumentDetails details = 13;
      private com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails details_ = com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails, com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetailsOrBuilder> detailsBuilder_;
      /**
       * <code>optional .DocumentDetails details = 13;</code>
       */
      public boolean hasDetails() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional .DocumentDetails details = 13;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails getDetails() {
        if (detailsBuilder_ == null) {
          return details_;
        } else {
          return detailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .DocumentDetails details = 13;</code>
       */
      public Builder setDetails(com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails value) {
        if (detailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          details_ = value;
          onChanged();
        } else {
          detailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       * <code>optional .DocumentDetails details = 13;</code>
       */
      public Builder setDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.Builder builderForValue) {
        if (detailsBuilder_ == null) {
          details_ = builderForValue.build();
          onChanged();
        } else {
          detailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       * <code>optional .DocumentDetails details = 13;</code>
       */
      public Builder mergeDetails(com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails value) {
        if (detailsBuilder_ == null) {
          if (((bitField0_ & 0x00001000) == 0x00001000) &&
              details_ != com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.getDefaultInstance()) {
            details_ =
              com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.newBuilder(details_).mergeFrom(value).buildPartial();
          } else {
            details_ = value;
          }
          onChanged();
        } else {
          detailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       * <code>optional .DocumentDetails details = 13;</code>
       */
      public Builder clearDetails() {
        if (detailsBuilder_ == null) {
          details_ = com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.getDefaultInstance();
          onChanged();
        } else {
          detailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00001000);
        return this;
      }
      /**
       * <code>optional .DocumentDetails details = 13;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.Builder getDetailsBuilder() {
        bitField0_ |= 0x00001000;
        onChanged();
        return getDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .DocumentDetails details = 13;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetailsOrBuilder getDetailsOrBuilder() {
        if (detailsBuilder_ != null) {
          return detailsBuilder_.getMessageOrBuilder();
        } else {
          return details_;
        }
      }
      /**
       * <code>optional .DocumentDetails details = 13;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails, com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetailsOrBuilder> 
          getDetailsFieldBuilder() {
        if (detailsBuilder_ == null) {
          detailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails, com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocumentDetailsOrBuilder>(
                  details_,
                  getParentForChildren(),
                  isClean());
          details_ = null;
        }
        return detailsBuilder_;
      }

      // optional .AggregateRating aggregateRating = 14;
      private com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating aggregateRating_ = com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating, com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AggregateRatingOrBuilder> aggregateRatingBuilder_;
      /**
       * <code>optional .AggregateRating aggregateRating = 14;</code>
       */
      public boolean hasAggregateRating() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating getAggregateRating() {
        if (aggregateRatingBuilder_ == null) {
          return aggregateRating_;
        } else {
          return aggregateRatingBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 14;</code>
       */
      public Builder setAggregateRating(com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating value) {
        if (aggregateRatingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          aggregateRating_ = value;
          onChanged();
        } else {
          aggregateRatingBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 14;</code>
       */
      public Builder setAggregateRating(
          com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.Builder builderForValue) {
        if (aggregateRatingBuilder_ == null) {
          aggregateRating_ = builderForValue.build();
          onChanged();
        } else {
          aggregateRatingBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 14;</code>
       */
      public Builder mergeAggregateRating(com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating value) {
        if (aggregateRatingBuilder_ == null) {
          if (((bitField0_ & 0x00002000) == 0x00002000) &&
              aggregateRating_ != com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.getDefaultInstance()) {
            aggregateRating_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.newBuilder(aggregateRating_).mergeFrom(value).buildPartial();
          } else {
            aggregateRating_ = value;
          }
          onChanged();
        } else {
          aggregateRatingBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 14;</code>
       */
      public Builder clearAggregateRating() {
        if (aggregateRatingBuilder_ == null) {
          aggregateRating_ = com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.getDefaultInstance();
          onChanged();
        } else {
          aggregateRatingBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.Builder getAggregateRatingBuilder() {
        bitField0_ |= 0x00002000;
        onChanged();
        return getAggregateRatingFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AggregateRatingOrBuilder getAggregateRatingOrBuilder() {
        if (aggregateRatingBuilder_ != null) {
          return aggregateRatingBuilder_.getMessageOrBuilder();
        } else {
          return aggregateRating_;
        }
      }
      /**
       * <code>optional .AggregateRating aggregateRating = 14;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating, com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AggregateRatingOrBuilder> 
          getAggregateRatingFieldBuilder() {
        if (aggregateRatingBuilder_ == null) {
          aggregateRatingBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating, com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AggregateRatingOrBuilder>(
                  aggregateRating_,
                  getParentForChildren(),
                  isClean());
          aggregateRating_ = null;
        }
        return aggregateRatingBuilder_;
      }

      // optional string detailsUrl = 16;
      private java.lang.Object detailsUrl_ = "";
      /**
       * <code>optional string detailsUrl = 16;</code>
       */
      public boolean hasDetailsUrl() {
        return ((bitField0_ & 0x00004000) == 0x00004000);
      }
      /**
       * <code>optional string detailsUrl = 16;</code>
       */
      public java.lang.String getDetailsUrl() {
        java.lang.Object ref = detailsUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          detailsUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string detailsUrl = 16;</code>
       */
      public com.google.protobuf.ByteString
          getDetailsUrlBytes() {
        java.lang.Object ref = detailsUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          detailsUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string detailsUrl = 16;</code>
       */
      public Builder setDetailsUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00004000;
        detailsUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string detailsUrl = 16;</code>
       */
      public Builder clearDetailsUrl() {
        bitField0_ = (bitField0_ & ~0x00004000);
        detailsUrl_ = getDefaultInstance().getDetailsUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string detailsUrl = 16;</code>
       */
      public Builder setDetailsUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00004000;
        detailsUrl_ = value;
        onChanged();
        return this;
      }

      // optional string shareUrl = 17;
      private java.lang.Object shareUrl_ = "";
      /**
       * <code>optional string shareUrl = 17;</code>
       */
      public boolean hasShareUrl() {
        return ((bitField0_ & 0x00008000) == 0x00008000);
      }
      /**
       * <code>optional string shareUrl = 17;</code>
       */
      public java.lang.String getShareUrl() {
        java.lang.Object ref = shareUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          shareUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string shareUrl = 17;</code>
       */
      public com.google.protobuf.ByteString
          getShareUrlBytes() {
        java.lang.Object ref = shareUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          shareUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string shareUrl = 17;</code>
       */
      public Builder setShareUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00008000;
        shareUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string shareUrl = 17;</code>
       */
      public Builder clearShareUrl() {
        bitField0_ = (bitField0_ & ~0x00008000);
        shareUrl_ = getDefaultInstance().getShareUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string shareUrl = 17;</code>
       */
      public Builder setShareUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00008000;
        shareUrl_ = value;
        onChanged();
        return this;
      }

      // optional string reviewsUrl = 18;
      private java.lang.Object reviewsUrl_ = "";
      /**
       * <code>optional string reviewsUrl = 18;</code>
       */
      public boolean hasReviewsUrl() {
        return ((bitField0_ & 0x00010000) == 0x00010000);
      }
      /**
       * <code>optional string reviewsUrl = 18;</code>
       */
      public java.lang.String getReviewsUrl() {
        java.lang.Object ref = reviewsUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          reviewsUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string reviewsUrl = 18;</code>
       */
      public com.google.protobuf.ByteString
          getReviewsUrlBytes() {
        java.lang.Object ref = reviewsUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          reviewsUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string reviewsUrl = 18;</code>
       */
      public Builder setReviewsUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00010000;
        reviewsUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string reviewsUrl = 18;</code>
       */
      public Builder clearReviewsUrl() {
        bitField0_ = (bitField0_ & ~0x00010000);
        reviewsUrl_ = getDefaultInstance().getReviewsUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string reviewsUrl = 18;</code>
       */
      public Builder setReviewsUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00010000;
        reviewsUrl_ = value;
        onChanged();
        return this;
      }

      // optional string backendUrl = 19;
      private java.lang.Object backendUrl_ = "";
      /**
       * <code>optional string backendUrl = 19;</code>
       */
      public boolean hasBackendUrl() {
        return ((bitField0_ & 0x00020000) == 0x00020000);
      }
      /**
       * <code>optional string backendUrl = 19;</code>
       */
      public java.lang.String getBackendUrl() {
        java.lang.Object ref = backendUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          backendUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string backendUrl = 19;</code>
       */
      public com.google.protobuf.ByteString
          getBackendUrlBytes() {
        java.lang.Object ref = backendUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          backendUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string backendUrl = 19;</code>
       */
      public Builder setBackendUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00020000;
        backendUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string backendUrl = 19;</code>
       */
      public Builder clearBackendUrl() {
        bitField0_ = (bitField0_ & ~0x00020000);
        backendUrl_ = getDefaultInstance().getBackendUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string backendUrl = 19;</code>
       */
      public Builder setBackendUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00020000;
        backendUrl_ = value;
        onChanged();
        return this;
      }

      // optional string purchaseDetailsUrl = 20;
      private java.lang.Object purchaseDetailsUrl_ = "";
      /**
       * <code>optional string purchaseDetailsUrl = 20;</code>
       */
      public boolean hasPurchaseDetailsUrl() {
        return ((bitField0_ & 0x00040000) == 0x00040000);
      }
      /**
       * <code>optional string purchaseDetailsUrl = 20;</code>
       */
      public java.lang.String getPurchaseDetailsUrl() {
        java.lang.Object ref = purchaseDetailsUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          purchaseDetailsUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string purchaseDetailsUrl = 20;</code>
       */
      public com.google.protobuf.ByteString
          getPurchaseDetailsUrlBytes() {
        java.lang.Object ref = purchaseDetailsUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          purchaseDetailsUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string purchaseDetailsUrl = 20;</code>
       */
      public Builder setPurchaseDetailsUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00040000;
        purchaseDetailsUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string purchaseDetailsUrl = 20;</code>
       */
      public Builder clearPurchaseDetailsUrl() {
        bitField0_ = (bitField0_ & ~0x00040000);
        purchaseDetailsUrl_ = getDefaultInstance().getPurchaseDetailsUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string purchaseDetailsUrl = 20;</code>
       */
      public Builder setPurchaseDetailsUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00040000;
        purchaseDetailsUrl_ = value;
        onChanged();
        return this;
      }

      // optional bool detailsReusable = 21;
      private boolean detailsReusable_ ;
      /**
       * <code>optional bool detailsReusable = 21;</code>
       */
      public boolean hasDetailsReusable() {
        return ((bitField0_ & 0x00080000) == 0x00080000);
      }
      /**
       * <code>optional bool detailsReusable = 21;</code>
       */
      public boolean getDetailsReusable() {
        return detailsReusable_;
      }
      /**
       * <code>optional bool detailsReusable = 21;</code>
       */
      public Builder setDetailsReusable(boolean value) {
        bitField0_ |= 0x00080000;
        detailsReusable_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool detailsReusable = 21;</code>
       */
      public Builder clearDetailsReusable() {
        bitField0_ = (bitField0_ & ~0x00080000);
        detailsReusable_ = false;
        onChanged();
        return this;
      }

      // optional string subtitle = 22;
      private java.lang.Object subtitle_ = "";
      /**
       * <code>optional string subtitle = 22;</code>
       */
      public boolean hasSubtitle() {
        return ((bitField0_ & 0x00100000) == 0x00100000);
      }
      /**
       * <code>optional string subtitle = 22;</code>
       */
      public java.lang.String getSubtitle() {
        java.lang.Object ref = subtitle_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          subtitle_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string subtitle = 22;</code>
       */
      public com.google.protobuf.ByteString
          getSubtitleBytes() {
        java.lang.Object ref = subtitle_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          subtitle_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string subtitle = 22;</code>
       */
      public Builder setSubtitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00100000;
        subtitle_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string subtitle = 22;</code>
       */
      public Builder clearSubtitle() {
        bitField0_ = (bitField0_ & ~0x00100000);
        subtitle_ = getDefaultInstance().getSubtitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string subtitle = 22;</code>
       */
      public Builder setSubtitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00100000;
        subtitle_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:DocV2)
    }

    static {
      defaultInstance = new DocV2(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:DocV2)
  }

  public interface EncryptedSubscriberInfoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string data = 1;
    /**
     * <code>optional string data = 1;</code>
     */
    boolean hasData();
    /**
     * <code>optional string data = 1;</code>
     */
    java.lang.String getData();
    /**
     * <code>optional string data = 1;</code>
     */
    com.google.protobuf.ByteString
        getDataBytes();

    // optional string encryptedKey = 2;
    /**
     * <code>optional string encryptedKey = 2;</code>
     */
    boolean hasEncryptedKey();
    /**
     * <code>optional string encryptedKey = 2;</code>
     */
    java.lang.String getEncryptedKey();
    /**
     * <code>optional string encryptedKey = 2;</code>
     */
    com.google.protobuf.ByteString
        getEncryptedKeyBytes();

    // optional string signature = 3;
    /**
     * <code>optional string signature = 3;</code>
     */
    boolean hasSignature();
    /**
     * <code>optional string signature = 3;</code>
     */
    java.lang.String getSignature();
    /**
     * <code>optional string signature = 3;</code>
     */
    com.google.protobuf.ByteString
        getSignatureBytes();

    // optional string initVector = 4;
    /**
     * <code>optional string initVector = 4;</code>
     */
    boolean hasInitVector();
    /**
     * <code>optional string initVector = 4;</code>
     */
    java.lang.String getInitVector();
    /**
     * <code>optional string initVector = 4;</code>
     */
    com.google.protobuf.ByteString
        getInitVectorBytes();

    // optional int32 googleKeyVersion = 5;
    /**
     * <code>optional int32 googleKeyVersion = 5;</code>
     */
    boolean hasGoogleKeyVersion();
    /**
     * <code>optional int32 googleKeyVersion = 5;</code>
     */
    int getGoogleKeyVersion();

    // optional int32 carrierKeyVersion = 6;
    /**
     * <code>optional int32 carrierKeyVersion = 6;</code>
     */
    boolean hasCarrierKeyVersion();
    /**
     * <code>optional int32 carrierKeyVersion = 6;</code>
     */
    int getCarrierKeyVersion();
  }
  /**
   * Protobuf type {@code EncryptedSubscriberInfo}
   */
  public static final class EncryptedSubscriberInfo extends
      com.google.protobuf.GeneratedMessage
      implements EncryptedSubscriberInfoOrBuilder {
    // Use EncryptedSubscriberInfo.newBuilder() to construct.
    private EncryptedSubscriberInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private EncryptedSubscriberInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final EncryptedSubscriberInfo defaultInstance;
    public static EncryptedSubscriberInfo getDefaultInstance() {
      return defaultInstance;
    }

    public EncryptedSubscriberInfo getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private EncryptedSubscriberInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              data_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              encryptedKey_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              signature_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              initVector_ = input.readBytes();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              googleKeyVersion_ = input.readInt32();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              carrierKeyVersion_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EncryptedSubscriberInfo_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EncryptedSubscriberInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.class, com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.Builder.class);
    }

    public static com.google.protobuf.Parser<EncryptedSubscriberInfo> PARSER =
        new com.google.protobuf.AbstractParser<EncryptedSubscriberInfo>() {
      public EncryptedSubscriberInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new EncryptedSubscriberInfo(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<EncryptedSubscriberInfo> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string data = 1;
    public static final int DATA_FIELD_NUMBER = 1;
    private java.lang.Object data_;
    /**
     * <code>optional string data = 1;</code>
     */
    public boolean hasData() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string data = 1;</code>
     */
    public java.lang.String getData() {
      java.lang.Object ref = data_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          data_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string data = 1;</code>
     */
    public com.google.protobuf.ByteString
        getDataBytes() {
      java.lang.Object ref = data_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        data_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string encryptedKey = 2;
    public static final int ENCRYPTEDKEY_FIELD_NUMBER = 2;
    private java.lang.Object encryptedKey_;
    /**
     * <code>optional string encryptedKey = 2;</code>
     */
    public boolean hasEncryptedKey() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string encryptedKey = 2;</code>
     */
    public java.lang.String getEncryptedKey() {
      java.lang.Object ref = encryptedKey_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          encryptedKey_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string encryptedKey = 2;</code>
     */
    public com.google.protobuf.ByteString
        getEncryptedKeyBytes() {
      java.lang.Object ref = encryptedKey_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        encryptedKey_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string signature = 3;
    public static final int SIGNATURE_FIELD_NUMBER = 3;
    private java.lang.Object signature_;
    /**
     * <code>optional string signature = 3;</code>
     */
    public boolean hasSignature() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string signature = 3;</code>
     */
    public java.lang.String getSignature() {
      java.lang.Object ref = signature_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          signature_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string signature = 3;</code>
     */
    public com.google.protobuf.ByteString
        getSignatureBytes() {
      java.lang.Object ref = signature_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        signature_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string initVector = 4;
    public static final int INITVECTOR_FIELD_NUMBER = 4;
    private java.lang.Object initVector_;
    /**
     * <code>optional string initVector = 4;</code>
     */
    public boolean hasInitVector() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string initVector = 4;</code>
     */
    public java.lang.String getInitVector() {
      java.lang.Object ref = initVector_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          initVector_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string initVector = 4;</code>
     */
    public com.google.protobuf.ByteString
        getInitVectorBytes() {
      java.lang.Object ref = initVector_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        initVector_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 googleKeyVersion = 5;
    public static final int GOOGLEKEYVERSION_FIELD_NUMBER = 5;
    private int googleKeyVersion_;
    /**
     * <code>optional int32 googleKeyVersion = 5;</code>
     */
    public boolean hasGoogleKeyVersion() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int32 googleKeyVersion = 5;</code>
     */
    public int getGoogleKeyVersion() {
      return googleKeyVersion_;
    }

    // optional int32 carrierKeyVersion = 6;
    public static final int CARRIERKEYVERSION_FIELD_NUMBER = 6;
    private int carrierKeyVersion_;
    /**
     * <code>optional int32 carrierKeyVersion = 6;</code>
     */
    public boolean hasCarrierKeyVersion() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional int32 carrierKeyVersion = 6;</code>
     */
    public int getCarrierKeyVersion() {
      return carrierKeyVersion_;
    }

    private void initFields() {
      data_ = "";
      encryptedKey_ = "";
      signature_ = "";
      initVector_ = "";
      googleKeyVersion_ = 0;
      carrierKeyVersion_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getDataBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getEncryptedKeyBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getSignatureBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getInitVectorBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt32(5, googleKeyVersion_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt32(6, carrierKeyVersion_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getDataBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getEncryptedKeyBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getSignatureBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getInitVectorBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, googleKeyVersion_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, carrierKeyVersion_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code EncryptedSubscriberInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EncryptedSubscriberInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EncryptedSubscriberInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.class, com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        data_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        encryptedKey_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        signature_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        initVector_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        googleKeyVersion_ = 0;
        bitField0_ = (bitField0_ & ~0x00000010);
        carrierKeyVersion_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_EncryptedSubscriberInfo_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo build() {
        com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo result = new com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.data_ = data_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.encryptedKey_ = encryptedKey_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.signature_ = signature_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.initVector_ = initVector_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.googleKeyVersion_ = googleKeyVersion_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.carrierKeyVersion_ = carrierKeyVersion_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo.getDefaultInstance()) return this;
        if (other.hasData()) {
          bitField0_ |= 0x00000001;
          data_ = other.data_;
          onChanged();
        }
        if (other.hasEncryptedKey()) {
          bitField0_ |= 0x00000002;
          encryptedKey_ = other.encryptedKey_;
          onChanged();
        }
        if (other.hasSignature()) {
          bitField0_ |= 0x00000004;
          signature_ = other.signature_;
          onChanged();
        }
        if (other.hasInitVector()) {
          bitField0_ |= 0x00000008;
          initVector_ = other.initVector_;
          onChanged();
        }
        if (other.hasGoogleKeyVersion()) {
          setGoogleKeyVersion(other.getGoogleKeyVersion());
        }
        if (other.hasCarrierKeyVersion()) {
          setCarrierKeyVersion(other.getCarrierKeyVersion());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.EncryptedSubscriberInfo) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string data = 1;
      private java.lang.Object data_ = "";
      /**
       * <code>optional string data = 1;</code>
       */
      public boolean hasData() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string data = 1;</code>
       */
      public java.lang.String getData() {
        java.lang.Object ref = data_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          data_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string data = 1;</code>
       */
      public com.google.protobuf.ByteString
          getDataBytes() {
        java.lang.Object ref = data_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          data_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string data = 1;</code>
       */
      public Builder setData(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        data_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string data = 1;</code>
       */
      public Builder clearData() {
        bitField0_ = (bitField0_ & ~0x00000001);
        data_ = getDefaultInstance().getData();
        onChanged();
        return this;
      }
      /**
       * <code>optional string data = 1;</code>
       */
      public Builder setDataBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        data_ = value;
        onChanged();
        return this;
      }

      // optional string encryptedKey = 2;
      private java.lang.Object encryptedKey_ = "";
      /**
       * <code>optional string encryptedKey = 2;</code>
       */
      public boolean hasEncryptedKey() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string encryptedKey = 2;</code>
       */
      public java.lang.String getEncryptedKey() {
        java.lang.Object ref = encryptedKey_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          encryptedKey_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string encryptedKey = 2;</code>
       */
      public com.google.protobuf.ByteString
          getEncryptedKeyBytes() {
        java.lang.Object ref = encryptedKey_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          encryptedKey_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string encryptedKey = 2;</code>
       */
      public Builder setEncryptedKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        encryptedKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string encryptedKey = 2;</code>
       */
      public Builder clearEncryptedKey() {
        bitField0_ = (bitField0_ & ~0x00000002);
        encryptedKey_ = getDefaultInstance().getEncryptedKey();
        onChanged();
        return this;
      }
      /**
       * <code>optional string encryptedKey = 2;</code>
       */
      public Builder setEncryptedKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        encryptedKey_ = value;
        onChanged();
        return this;
      }

      // optional string signature = 3;
      private java.lang.Object signature_ = "";
      /**
       * <code>optional string signature = 3;</code>
       */
      public boolean hasSignature() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string signature = 3;</code>
       */
      public java.lang.String getSignature() {
        java.lang.Object ref = signature_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          signature_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string signature = 3;</code>
       */
      public com.google.protobuf.ByteString
          getSignatureBytes() {
        java.lang.Object ref = signature_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          signature_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string signature = 3;</code>
       */
      public Builder setSignature(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        signature_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string signature = 3;</code>
       */
      public Builder clearSignature() {
        bitField0_ = (bitField0_ & ~0x00000004);
        signature_ = getDefaultInstance().getSignature();
        onChanged();
        return this;
      }
      /**
       * <code>optional string signature = 3;</code>
       */
      public Builder setSignatureBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        signature_ = value;
        onChanged();
        return this;
      }

      // optional string initVector = 4;
      private java.lang.Object initVector_ = "";
      /**
       * <code>optional string initVector = 4;</code>
       */
      public boolean hasInitVector() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string initVector = 4;</code>
       */
      public java.lang.String getInitVector() {
        java.lang.Object ref = initVector_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          initVector_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string initVector = 4;</code>
       */
      public com.google.protobuf.ByteString
          getInitVectorBytes() {
        java.lang.Object ref = initVector_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          initVector_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string initVector = 4;</code>
       */
      public Builder setInitVector(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        initVector_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string initVector = 4;</code>
       */
      public Builder clearInitVector() {
        bitField0_ = (bitField0_ & ~0x00000008);
        initVector_ = getDefaultInstance().getInitVector();
        onChanged();
        return this;
      }
      /**
       * <code>optional string initVector = 4;</code>
       */
      public Builder setInitVectorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        initVector_ = value;
        onChanged();
        return this;
      }

      // optional int32 googleKeyVersion = 5;
      private int googleKeyVersion_ ;
      /**
       * <code>optional int32 googleKeyVersion = 5;</code>
       */
      public boolean hasGoogleKeyVersion() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int32 googleKeyVersion = 5;</code>
       */
      public int getGoogleKeyVersion() {
        return googleKeyVersion_;
      }
      /**
       * <code>optional int32 googleKeyVersion = 5;</code>
       */
      public Builder setGoogleKeyVersion(int value) {
        bitField0_ |= 0x00000010;
        googleKeyVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 googleKeyVersion = 5;</code>
       */
      public Builder clearGoogleKeyVersion() {
        bitField0_ = (bitField0_ & ~0x00000010);
        googleKeyVersion_ = 0;
        onChanged();
        return this;
      }

      // optional int32 carrierKeyVersion = 6;
      private int carrierKeyVersion_ ;
      /**
       * <code>optional int32 carrierKeyVersion = 6;</code>
       */
      public boolean hasCarrierKeyVersion() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int32 carrierKeyVersion = 6;</code>
       */
      public int getCarrierKeyVersion() {
        return carrierKeyVersion_;
      }
      /**
       * <code>optional int32 carrierKeyVersion = 6;</code>
       */
      public Builder setCarrierKeyVersion(int value) {
        bitField0_ |= 0x00000020;
        carrierKeyVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 carrierKeyVersion = 6;</code>
       */
      public Builder clearCarrierKeyVersion() {
        bitField0_ = (bitField0_ & ~0x00000020);
        carrierKeyVersion_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:EncryptedSubscriberInfo)
    }

    static {
      defaultInstance = new EncryptedSubscriberInfo(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:EncryptedSubscriberInfo)
  }

  public interface AvailabilityOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 restriction = 5;
    /**
     * <code>optional int32 restriction = 5;</code>
     */
    boolean hasRestriction();
    /**
     * <code>optional int32 restriction = 5;</code>
     */
    int getRestriction();

    // optional int32 offerType = 6;
    /**
     * <code>optional int32 offerType = 6;</code>
     */
    boolean hasOfferType();
    /**
     * <code>optional int32 offerType = 6;</code>
     */
    int getOfferType();

    // optional .Rule rule = 7;
    /**
     * <code>optional .Rule rule = 7;</code>
     */
    boolean hasRule();
    /**
     * <code>optional .Rule rule = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Rule getRule();
    /**
     * <code>optional .Rule rule = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder getRuleOrBuilder();

    // repeated group PerDeviceAvailabilityRestriction = 9 {
    /**
     * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction> 
        getPerDeviceAvailabilityRestrictionList();
    /**
     * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction getPerDeviceAvailabilityRestriction(int index);
    /**
     * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
     */
    int getPerDeviceAvailabilityRestrictionCount();
    /**
     * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestrictionOrBuilder> 
        getPerDeviceAvailabilityRestrictionOrBuilderList();
    /**
     * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestrictionOrBuilder getPerDeviceAvailabilityRestrictionOrBuilder(
        int index);

    // optional bool availableIfOwned = 13;
    /**
     * <code>optional bool availableIfOwned = 13;</code>
     */
    boolean hasAvailableIfOwned();
    /**
     * <code>optional bool availableIfOwned = 13;</code>
     */
    boolean getAvailableIfOwned();

    // repeated .Install install = 14;
    /**
     * <code>repeated .Install install = 14;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Install> 
        getInstallList();
    /**
     * <code>repeated .Install install = 14;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Install getInstall(int index);
    /**
     * <code>repeated .Install install = 14;</code>
     */
    int getInstallCount();
    /**
     * <code>repeated .Install install = 14;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.InstallOrBuilder> 
        getInstallOrBuilderList();
    /**
     * <code>repeated .Install install = 14;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.InstallOrBuilder getInstallOrBuilder(
        int index);

    // optional .FilterEvaluationInfo filterInfo = 16;
    /**
     * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
     */
    boolean hasFilterInfo();
    /**
     * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo getFilterInfo();
    /**
     * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfoOrBuilder getFilterInfoOrBuilder();

    // optional .OwnershipInfo ownershipInfo = 17;
    /**
     * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
     */
    boolean hasOwnershipInfo();
    /**
     * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo getOwnershipInfo();
    /**
     * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfoOrBuilder getOwnershipInfoOrBuilder();
  }
  /**
   * Protobuf type {@code Availability}
   */
  public static final class Availability extends
      com.google.protobuf.GeneratedMessage
      implements AvailabilityOrBuilder {
    // Use Availability.newBuilder() to construct.
    private Availability(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Availability(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Availability defaultInstance;
    public static Availability getDefaultInstance() {
      return defaultInstance;
    }

    public Availability getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Availability(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 40: {
              bitField0_ |= 0x00000001;
              restriction_ = input.readInt32();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000002;
              offerType_ = input.readInt32();
              break;
            }
            case 58: {
              com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = rule_.toBuilder();
              }
              rule_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Rule.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(rule_);
                rule_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 75: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                perDeviceAvailabilityRestriction_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction>();
                mutable_bitField0_ |= 0x00000008;
              }
              perDeviceAvailabilityRestriction_.add(input.readGroup(9, com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.PARSER,
                  extensionRegistry));
              break;
            }
            case 104: {
              bitField0_ |= 0x00000008;
              availableIfOwned_ = input.readBool();
              break;
            }
            case 114: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                install_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Install>();
                mutable_bitField0_ |= 0x00000020;
              }
              install_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Install.PARSER, extensionRegistry));
              break;
            }
            case 130: {
              com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = filterInfo_.toBuilder();
              }
              filterInfo_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(filterInfo_);
                filterInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 138: {
              com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = ownershipInfo_.toBuilder();
              }
              ownershipInfo_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(ownershipInfo_);
                ownershipInfo_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          perDeviceAvailabilityRestriction_ = java.util.Collections.unmodifiableList(perDeviceAvailabilityRestriction_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          install_ = java.util.Collections.unmodifiableList(install_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Availability_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Availability_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Availability.class, com.akdeniz.googleplaycrawler.GooglePlay.Availability.Builder.class);
    }

    public static com.google.protobuf.Parser<Availability> PARSER =
        new com.google.protobuf.AbstractParser<Availability>() {
      public Availability parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Availability(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Availability> getParserForType() {
      return PARSER;
    }

    public interface PerDeviceAvailabilityRestrictionOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

      // optional fixed64 androidId = 10;
      /**
       * <code>optional fixed64 androidId = 10;</code>
       */
      boolean hasAndroidId();
      /**
       * <code>optional fixed64 androidId = 10;</code>
       */
      long getAndroidId();

      // optional int32 deviceRestriction = 11;
      /**
       * <code>optional int32 deviceRestriction = 11;</code>
       */
      boolean hasDeviceRestriction();
      /**
       * <code>optional int32 deviceRestriction = 11;</code>
       */
      int getDeviceRestriction();

      // optional int64 channelId = 12;
      /**
       * <code>optional int64 channelId = 12;</code>
       */
      boolean hasChannelId();
      /**
       * <code>optional int64 channelId = 12;</code>
       */
      long getChannelId();

      // optional .FilterEvaluationInfo filterInfo = 15;
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
       */
      boolean hasFilterInfo();
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
       */
      com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo getFilterInfo();
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
       */
      com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfoOrBuilder getFilterInfoOrBuilder();
    }
    /**
     * Protobuf type {@code Availability.PerDeviceAvailabilityRestriction}
     */
    public static final class PerDeviceAvailabilityRestriction extends
        com.google.protobuf.GeneratedMessage
        implements PerDeviceAvailabilityRestrictionOrBuilder {
      // Use PerDeviceAvailabilityRestriction.newBuilder() to construct.
      private PerDeviceAvailabilityRestriction(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private PerDeviceAvailabilityRestriction(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final PerDeviceAvailabilityRestriction defaultInstance;
      public static PerDeviceAvailabilityRestriction getDefaultInstance() {
        return defaultInstance;
      }

      public PerDeviceAvailabilityRestriction getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private PerDeviceAvailabilityRestriction(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 81: {
                bitField0_ |= 0x00000001;
                androidId_ = input.readFixed64();
                break;
              }
              case 88: {
                bitField0_ |= 0x00000002;
                deviceRestriction_ = input.readInt32();
                break;
              }
              case 96: {
                bitField0_ |= 0x00000004;
                channelId_ = input.readInt64();
                break;
              }
              case 122: {
                com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.Builder subBuilder = null;
                if (((bitField0_ & 0x00000008) == 0x00000008)) {
                  subBuilder = filterInfo_.toBuilder();
                }
                filterInfo_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(filterInfo_);
                  filterInfo_ = subBuilder.buildPartial();
                }
                bitField0_ |= 0x00000008;
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Availability_PerDeviceAvailabilityRestriction_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Availability_PerDeviceAvailabilityRestriction_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.class, com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.Builder.class);
      }

      public static com.google.protobuf.Parser<PerDeviceAvailabilityRestriction> PARSER =
          new com.google.protobuf.AbstractParser<PerDeviceAvailabilityRestriction>() {
        public PerDeviceAvailabilityRestriction parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new PerDeviceAvailabilityRestriction(input, extensionRegistry);
        }
      };

      @java.lang.Override
      public com.google.protobuf.Parser<PerDeviceAvailabilityRestriction> getParserForType() {
        return PARSER;
      }

      private int bitField0_;
      // optional fixed64 androidId = 10;
      public static final int ANDROIDID_FIELD_NUMBER = 10;
      private long androidId_;
      /**
       * <code>optional fixed64 androidId = 10;</code>
       */
      public boolean hasAndroidId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional fixed64 androidId = 10;</code>
       */
      public long getAndroidId() {
        return androidId_;
      }

      // optional int32 deviceRestriction = 11;
      public static final int DEVICERESTRICTION_FIELD_NUMBER = 11;
      private int deviceRestriction_;
      /**
       * <code>optional int32 deviceRestriction = 11;</code>
       */
      public boolean hasDeviceRestriction() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 deviceRestriction = 11;</code>
       */
      public int getDeviceRestriction() {
        return deviceRestriction_;
      }

      // optional int64 channelId = 12;
      public static final int CHANNELID_FIELD_NUMBER = 12;
      private long channelId_;
      /**
       * <code>optional int64 channelId = 12;</code>
       */
      public boolean hasChannelId() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 channelId = 12;</code>
       */
      public long getChannelId() {
        return channelId_;
      }

      // optional .FilterEvaluationInfo filterInfo = 15;
      public static final int FILTERINFO_FIELD_NUMBER = 15;
      private com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo filterInfo_;
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
       */
      public boolean hasFilterInfo() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo getFilterInfo() {
        return filterInfo_;
      }
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfoOrBuilder getFilterInfoOrBuilder() {
        return filterInfo_;
      }

      private void initFields() {
        androidId_ = 0L;
        deviceRestriction_ = 0;
        channelId_ = 0L;
        filterInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.getDefaultInstance();
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeFixed64(10, androidId_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeInt32(11, deviceRestriction_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          output.writeInt64(12, channelId_);
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          output.writeMessage(15, filterInfo_);
        }
        getUnknownFields().writeTo(output);
      }

      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeFixed64Size(10, androidId_);
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt32Size(11, deviceRestriction_);
        }
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt64Size(12, channelId_);
        }
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(15, filterInfo_);
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code Availability.PerDeviceAvailabilityRestriction}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestrictionOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Availability_PerDeviceAvailabilityRestriction_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Availability_PerDeviceAvailabilityRestriction_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.class, com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.Builder.class);
        }

        // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
            getFilterInfoFieldBuilder();
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          androidId_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000001);
          deviceRestriction_ = 0;
          bitField0_ = (bitField0_ & ~0x00000002);
          channelId_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000004);
          if (filterInfoBuilder_ == null) {
            filterInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.getDefaultInstance();
          } else {
            filterInfoBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000008);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Availability_PerDeviceAvailabilityRestriction_descriptor;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction getDefaultInstanceForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.getDefaultInstance();
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction build() {
          com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction buildPartial() {
          com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction result = new com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.androidId_ = androidId_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.deviceRestriction_ = deviceRestriction_;
          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
            to_bitField0_ |= 0x00000004;
          }
          result.channelId_ = channelId_;
          if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
            to_bitField0_ |= 0x00000008;
          }
          if (filterInfoBuilder_ == null) {
            result.filterInfo_ = filterInfo_;
          } else {
            result.filterInfo_ = filterInfoBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction) {
            return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction other) {
          if (other == com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.getDefaultInstance()) return this;
          if (other.hasAndroidId()) {
            setAndroidId(other.getAndroidId());
          }
          if (other.hasDeviceRestriction()) {
            setDeviceRestriction(other.getDeviceRestriction());
          }
          if (other.hasChannelId()) {
            setChannelId(other.getChannelId());
          }
          if (other.hasFilterInfo()) {
            mergeFilterInfo(other.getFilterInfo());
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        // optional fixed64 androidId = 10;
        private long androidId_ ;
        /**
         * <code>optional fixed64 androidId = 10;</code>
         */
        public boolean hasAndroidId() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional fixed64 androidId = 10;</code>
         */
        public long getAndroidId() {
          return androidId_;
        }
        /**
         * <code>optional fixed64 androidId = 10;</code>
         */
        public Builder setAndroidId(long value) {
          bitField0_ |= 0x00000001;
          androidId_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional fixed64 androidId = 10;</code>
         */
        public Builder clearAndroidId() {
          bitField0_ = (bitField0_ & ~0x00000001);
          androidId_ = 0L;
          onChanged();
          return this;
        }

        // optional int32 deviceRestriction = 11;
        private int deviceRestriction_ ;
        /**
         * <code>optional int32 deviceRestriction = 11;</code>
         */
        public boolean hasDeviceRestriction() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional int32 deviceRestriction = 11;</code>
         */
        public int getDeviceRestriction() {
          return deviceRestriction_;
        }
        /**
         * <code>optional int32 deviceRestriction = 11;</code>
         */
        public Builder setDeviceRestriction(int value) {
          bitField0_ |= 0x00000002;
          deviceRestriction_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional int32 deviceRestriction = 11;</code>
         */
        public Builder clearDeviceRestriction() {
          bitField0_ = (bitField0_ & ~0x00000002);
          deviceRestriction_ = 0;
          onChanged();
          return this;
        }

        // optional int64 channelId = 12;
        private long channelId_ ;
        /**
         * <code>optional int64 channelId = 12;</code>
         */
        public boolean hasChannelId() {
          return ((bitField0_ & 0x00000004) == 0x00000004);
        }
        /**
         * <code>optional int64 channelId = 12;</code>
         */
        public long getChannelId() {
          return channelId_;
        }
        /**
         * <code>optional int64 channelId = 12;</code>
         */
        public Builder setChannelId(long value) {
          bitField0_ |= 0x00000004;
          channelId_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional int64 channelId = 12;</code>
         */
        public Builder clearChannelId() {
          bitField0_ = (bitField0_ & ~0x00000004);
          channelId_ = 0L;
          onChanged();
          return this;
        }

        // optional .FilterEvaluationInfo filterInfo = 15;
        private com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo filterInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.getDefaultInstance();
        private com.google.protobuf.SingleFieldBuilder<
            com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo, com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfoOrBuilder> filterInfoBuilder_;
        /**
         * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
         */
        public boolean hasFilterInfo() {
          return ((bitField0_ & 0x00000008) == 0x00000008);
        }
        /**
         * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo getFilterInfo() {
          if (filterInfoBuilder_ == null) {
            return filterInfo_;
          } else {
            return filterInfoBuilder_.getMessage();
          }
        }
        /**
         * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
         */
        public Builder setFilterInfo(com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo value) {
          if (filterInfoBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            filterInfo_ = value;
            onChanged();
          } else {
            filterInfoBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000008;
          return this;
        }
        /**
         * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
         */
        public Builder setFilterInfo(
            com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.Builder builderForValue) {
          if (filterInfoBuilder_ == null) {
            filterInfo_ = builderForValue.build();
            onChanged();
          } else {
            filterInfoBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000008;
          return this;
        }
        /**
         * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
         */
        public Builder mergeFilterInfo(com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo value) {
          if (filterInfoBuilder_ == null) {
            if (((bitField0_ & 0x00000008) == 0x00000008) &&
                filterInfo_ != com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.getDefaultInstance()) {
              filterInfo_ =
                com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.newBuilder(filterInfo_).mergeFrom(value).buildPartial();
            } else {
              filterInfo_ = value;
            }
            onChanged();
          } else {
            filterInfoBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000008;
          return this;
        }
        /**
         * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
         */
        public Builder clearFilterInfo() {
          if (filterInfoBuilder_ == null) {
            filterInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.getDefaultInstance();
            onChanged();
          } else {
            filterInfoBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000008);
          return this;
        }
        /**
         * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.Builder getFilterInfoBuilder() {
          bitField0_ |= 0x00000008;
          onChanged();
          return getFilterInfoFieldBuilder().getBuilder();
        }
        /**
         * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
         */
        public com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfoOrBuilder getFilterInfoOrBuilder() {
          if (filterInfoBuilder_ != null) {
            return filterInfoBuilder_.getMessageOrBuilder();
          } else {
            return filterInfo_;
          }
        }
        /**
         * <code>optional .FilterEvaluationInfo filterInfo = 15;</code>
         */
        private com.google.protobuf.SingleFieldBuilder<
            com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo, com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfoOrBuilder> 
            getFilterInfoFieldBuilder() {
          if (filterInfoBuilder_ == null) {
            filterInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo, com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfoOrBuilder>(
                    filterInfo_,
                    getParentForChildren(),
                    isClean());
            filterInfo_ = null;
          }
          return filterInfoBuilder_;
        }

        // @@protoc_insertion_point(builder_scope:Availability.PerDeviceAvailabilityRestriction)
      }

      static {
        defaultInstance = new PerDeviceAvailabilityRestriction(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:Availability.PerDeviceAvailabilityRestriction)
    }

    private int bitField0_;
    // optional int32 restriction = 5;
    public static final int RESTRICTION_FIELD_NUMBER = 5;
    private int restriction_;
    /**
     * <code>optional int32 restriction = 5;</code>
     */
    public boolean hasRestriction() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 restriction = 5;</code>
     */
    public int getRestriction() {
      return restriction_;
    }

    // optional int32 offerType = 6;
    public static final int OFFERTYPE_FIELD_NUMBER = 6;
    private int offerType_;
    /**
     * <code>optional int32 offerType = 6;</code>
     */
    public boolean hasOfferType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 offerType = 6;</code>
     */
    public int getOfferType() {
      return offerType_;
    }

    // optional .Rule rule = 7;
    public static final int RULE_FIELD_NUMBER = 7;
    private com.akdeniz.googleplaycrawler.GooglePlay.Rule rule_;
    /**
     * <code>optional .Rule rule = 7;</code>
     */
    public boolean hasRule() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .Rule rule = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Rule getRule() {
      return rule_;
    }
    /**
     * <code>optional .Rule rule = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder getRuleOrBuilder() {
      return rule_;
    }

    // repeated group PerDeviceAvailabilityRestriction = 9 {
    public static final int PERDEVICEAVAILABILITYRESTRICTION_FIELD_NUMBER = 9;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction> perDeviceAvailabilityRestriction_;
    /**
     * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction> getPerDeviceAvailabilityRestrictionList() {
      return perDeviceAvailabilityRestriction_;
    }
    /**
     * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestrictionOrBuilder> 
        getPerDeviceAvailabilityRestrictionOrBuilderList() {
      return perDeviceAvailabilityRestriction_;
    }
    /**
     * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
     */
    public int getPerDeviceAvailabilityRestrictionCount() {
      return perDeviceAvailabilityRestriction_.size();
    }
    /**
     * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction getPerDeviceAvailabilityRestriction(int index) {
      return perDeviceAvailabilityRestriction_.get(index);
    }
    /**
     * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestrictionOrBuilder getPerDeviceAvailabilityRestrictionOrBuilder(
        int index) {
      return perDeviceAvailabilityRestriction_.get(index);
    }

    // optional bool availableIfOwned = 13;
    public static final int AVAILABLEIFOWNED_FIELD_NUMBER = 13;
    private boolean availableIfOwned_;
    /**
     * <code>optional bool availableIfOwned = 13;</code>
     */
    public boolean hasAvailableIfOwned() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool availableIfOwned = 13;</code>
     */
    public boolean getAvailableIfOwned() {
      return availableIfOwned_;
    }

    // repeated .Install install = 14;
    public static final int INSTALL_FIELD_NUMBER = 14;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Install> install_;
    /**
     * <code>repeated .Install install = 14;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Install> getInstallList() {
      return install_;
    }
    /**
     * <code>repeated .Install install = 14;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.InstallOrBuilder> 
        getInstallOrBuilderList() {
      return install_;
    }
    /**
     * <code>repeated .Install install = 14;</code>
     */
    public int getInstallCount() {
      return install_.size();
    }
    /**
     * <code>repeated .Install install = 14;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Install getInstall(int index) {
      return install_.get(index);
    }
    /**
     * <code>repeated .Install install = 14;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.InstallOrBuilder getInstallOrBuilder(
        int index) {
      return install_.get(index);
    }

    // optional .FilterEvaluationInfo filterInfo = 16;
    public static final int FILTERINFO_FIELD_NUMBER = 16;
    private com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo filterInfo_;
    /**
     * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
     */
    public boolean hasFilterInfo() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo getFilterInfo() {
      return filterInfo_;
    }
    /**
     * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfoOrBuilder getFilterInfoOrBuilder() {
      return filterInfo_;
    }

    // optional .OwnershipInfo ownershipInfo = 17;
    public static final int OWNERSHIPINFO_FIELD_NUMBER = 17;
    private com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo ownershipInfo_;
    /**
     * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
     */
    public boolean hasOwnershipInfo() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo getOwnershipInfo() {
      return ownershipInfo_;
    }
    /**
     * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfoOrBuilder getOwnershipInfoOrBuilder() {
      return ownershipInfo_;
    }

    private void initFields() {
      restriction_ = 0;
      offerType_ = 0;
      rule_ = com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance();
      perDeviceAvailabilityRestriction_ = java.util.Collections.emptyList();
      availableIfOwned_ = false;
      install_ = java.util.Collections.emptyList();
      filterInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.getDefaultInstance();
      ownershipInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(5, restriction_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(6, offerType_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(7, rule_);
      }
      for (int i = 0; i < perDeviceAvailabilityRestriction_.size(); i++) {
        output.writeGroup(9, perDeviceAvailabilityRestriction_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(13, availableIfOwned_);
      }
      for (int i = 0; i < install_.size(); i++) {
        output.writeMessage(14, install_.get(i));
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(16, filterInfo_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(17, ownershipInfo_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, restriction_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, offerType_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, rule_);
      }
      for (int i = 0; i < perDeviceAvailabilityRestriction_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeGroupSize(9, perDeviceAvailabilityRestriction_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(13, availableIfOwned_);
      }
      for (int i = 0; i < install_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(14, install_.get(i));
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(16, filterInfo_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(17, ownershipInfo_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.Availability parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Availability parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Availability parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Availability parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Availability parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Availability parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Availability parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Availability parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Availability parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Availability parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Availability prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Availability}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AvailabilityOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Availability_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Availability_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Availability.class, com.akdeniz.googleplaycrawler.GooglePlay.Availability.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Availability.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getRuleFieldBuilder();
          getPerDeviceAvailabilityRestrictionFieldBuilder();
          getInstallFieldBuilder();
          getFilterInfoFieldBuilder();
          getOwnershipInfoFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        restriction_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        offerType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (ruleBuilder_ == null) {
          rule_ = com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance();
        } else {
          ruleBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          perDeviceAvailabilityRestriction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          perDeviceAvailabilityRestrictionBuilder_.clear();
        }
        availableIfOwned_ = false;
        bitField0_ = (bitField0_ & ~0x00000010);
        if (installBuilder_ == null) {
          install_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          installBuilder_.clear();
        }
        if (filterInfoBuilder_ == null) {
          filterInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.getDefaultInstance();
        } else {
          filterInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (ownershipInfoBuilder_ == null) {
          ownershipInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.getDefaultInstance();
        } else {
          ownershipInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Availability_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Availability getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Availability.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Availability build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Availability result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Availability buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Availability result = new com.akdeniz.googleplaycrawler.GooglePlay.Availability(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.restriction_ = restriction_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.offerType_ = offerType_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (ruleBuilder_ == null) {
          result.rule_ = rule_;
        } else {
          result.rule_ = ruleBuilder_.build();
        }
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            perDeviceAvailabilityRestriction_ = java.util.Collections.unmodifiableList(perDeviceAvailabilityRestriction_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.perDeviceAvailabilityRestriction_ = perDeviceAvailabilityRestriction_;
        } else {
          result.perDeviceAvailabilityRestriction_ = perDeviceAvailabilityRestrictionBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        result.availableIfOwned_ = availableIfOwned_;
        if (installBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            install_ = java.util.Collections.unmodifiableList(install_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.install_ = install_;
        } else {
          result.install_ = installBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000010;
        }
        if (filterInfoBuilder_ == null) {
          result.filterInfo_ = filterInfo_;
        } else {
          result.filterInfo_ = filterInfoBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000020;
        }
        if (ownershipInfoBuilder_ == null) {
          result.ownershipInfo_ = ownershipInfo_;
        } else {
          result.ownershipInfo_ = ownershipInfoBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Availability) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Availability)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Availability other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Availability.getDefaultInstance()) return this;
        if (other.hasRestriction()) {
          setRestriction(other.getRestriction());
        }
        if (other.hasOfferType()) {
          setOfferType(other.getOfferType());
        }
        if (other.hasRule()) {
          mergeRule(other.getRule());
        }
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          if (!other.perDeviceAvailabilityRestriction_.isEmpty()) {
            if (perDeviceAvailabilityRestriction_.isEmpty()) {
              perDeviceAvailabilityRestriction_ = other.perDeviceAvailabilityRestriction_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensurePerDeviceAvailabilityRestrictionIsMutable();
              perDeviceAvailabilityRestriction_.addAll(other.perDeviceAvailabilityRestriction_);
            }
            onChanged();
          }
        } else {
          if (!other.perDeviceAvailabilityRestriction_.isEmpty()) {
            if (perDeviceAvailabilityRestrictionBuilder_.isEmpty()) {
              perDeviceAvailabilityRestrictionBuilder_.dispose();
              perDeviceAvailabilityRestrictionBuilder_ = null;
              perDeviceAvailabilityRestriction_ = other.perDeviceAvailabilityRestriction_;
              bitField0_ = (bitField0_ & ~0x00000008);
              perDeviceAvailabilityRestrictionBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getPerDeviceAvailabilityRestrictionFieldBuilder() : null;
            } else {
              perDeviceAvailabilityRestrictionBuilder_.addAllMessages(other.perDeviceAvailabilityRestriction_);
            }
          }
        }
        if (other.hasAvailableIfOwned()) {
          setAvailableIfOwned(other.getAvailableIfOwned());
        }
        if (installBuilder_ == null) {
          if (!other.install_.isEmpty()) {
            if (install_.isEmpty()) {
              install_ = other.install_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureInstallIsMutable();
              install_.addAll(other.install_);
            }
            onChanged();
          }
        } else {
          if (!other.install_.isEmpty()) {
            if (installBuilder_.isEmpty()) {
              installBuilder_.dispose();
              installBuilder_ = null;
              install_ = other.install_;
              bitField0_ = (bitField0_ & ~0x00000020);
              installBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getInstallFieldBuilder() : null;
            } else {
              installBuilder_.addAllMessages(other.install_);
            }
          }
        }
        if (other.hasFilterInfo()) {
          mergeFilterInfo(other.getFilterInfo());
        }
        if (other.hasOwnershipInfo()) {
          mergeOwnershipInfo(other.getOwnershipInfo());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.Availability parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.Availability) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 restriction = 5;
      private int restriction_ ;
      /**
       * <code>optional int32 restriction = 5;</code>
       */
      public boolean hasRestriction() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 restriction = 5;</code>
       */
      public int getRestriction() {
        return restriction_;
      }
      /**
       * <code>optional int32 restriction = 5;</code>
       */
      public Builder setRestriction(int value) {
        bitField0_ |= 0x00000001;
        restriction_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 restriction = 5;</code>
       */
      public Builder clearRestriction() {
        bitField0_ = (bitField0_ & ~0x00000001);
        restriction_ = 0;
        onChanged();
        return this;
      }

      // optional int32 offerType = 6;
      private int offerType_ ;
      /**
       * <code>optional int32 offerType = 6;</code>
       */
      public boolean hasOfferType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 offerType = 6;</code>
       */
      public int getOfferType() {
        return offerType_;
      }
      /**
       * <code>optional int32 offerType = 6;</code>
       */
      public Builder setOfferType(int value) {
        bitField0_ |= 0x00000002;
        offerType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 offerType = 6;</code>
       */
      public Builder clearOfferType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        offerType_ = 0;
        onChanged();
        return this;
      }

      // optional .Rule rule = 7;
      private com.akdeniz.googleplaycrawler.GooglePlay.Rule rule_ = com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Rule, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder> ruleBuilder_;
      /**
       * <code>optional .Rule rule = 7;</code>
       */
      public boolean hasRule() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .Rule rule = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Rule getRule() {
        if (ruleBuilder_ == null) {
          return rule_;
        } else {
          return ruleBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Rule rule = 7;</code>
       */
      public Builder setRule(com.akdeniz.googleplaycrawler.GooglePlay.Rule value) {
        if (ruleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          rule_ = value;
          onChanged();
        } else {
          ruleBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Rule rule = 7;</code>
       */
      public Builder setRule(
          com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder builderForValue) {
        if (ruleBuilder_ == null) {
          rule_ = builderForValue.build();
          onChanged();
        } else {
          ruleBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Rule rule = 7;</code>
       */
      public Builder mergeRule(com.akdeniz.googleplaycrawler.GooglePlay.Rule value) {
        if (ruleBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              rule_ != com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance()) {
            rule_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Rule.newBuilder(rule_).mergeFrom(value).buildPartial();
          } else {
            rule_ = value;
          }
          onChanged();
        } else {
          ruleBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Rule rule = 7;</code>
       */
      public Builder clearRule() {
        if (ruleBuilder_ == null) {
          rule_ = com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance();
          onChanged();
        } else {
          ruleBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .Rule rule = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder getRuleBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getRuleFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Rule rule = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder getRuleOrBuilder() {
        if (ruleBuilder_ != null) {
          return ruleBuilder_.getMessageOrBuilder();
        } else {
          return rule_;
        }
      }
      /**
       * <code>optional .Rule rule = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Rule, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder> 
          getRuleFieldBuilder() {
        if (ruleBuilder_ == null) {
          ruleBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Rule, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder>(
                  rule_,
                  getParentForChildren(),
                  isClean());
          rule_ = null;
        }
        return ruleBuilder_;
      }

      // repeated group PerDeviceAvailabilityRestriction = 9 {
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction> perDeviceAvailabilityRestriction_ =
        java.util.Collections.emptyList();
      private void ensurePerDeviceAvailabilityRestrictionIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          perDeviceAvailabilityRestriction_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction>(perDeviceAvailabilityRestriction_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction, com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.Builder, com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestrictionOrBuilder> perDeviceAvailabilityRestrictionBuilder_;

      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction> getPerDeviceAvailabilityRestrictionList() {
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          return java.util.Collections.unmodifiableList(perDeviceAvailabilityRestriction_);
        } else {
          return perDeviceAvailabilityRestrictionBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public int getPerDeviceAvailabilityRestrictionCount() {
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          return perDeviceAvailabilityRestriction_.size();
        } else {
          return perDeviceAvailabilityRestrictionBuilder_.getCount();
        }
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction getPerDeviceAvailabilityRestriction(int index) {
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          return perDeviceAvailabilityRestriction_.get(index);
        } else {
          return perDeviceAvailabilityRestrictionBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public Builder setPerDeviceAvailabilityRestriction(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction value) {
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePerDeviceAvailabilityRestrictionIsMutable();
          perDeviceAvailabilityRestriction_.set(index, value);
          onChanged();
        } else {
          perDeviceAvailabilityRestrictionBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public Builder setPerDeviceAvailabilityRestriction(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.Builder builderForValue) {
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          ensurePerDeviceAvailabilityRestrictionIsMutable();
          perDeviceAvailabilityRestriction_.set(index, builderForValue.build());
          onChanged();
        } else {
          perDeviceAvailabilityRestrictionBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public Builder addPerDeviceAvailabilityRestriction(com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction value) {
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePerDeviceAvailabilityRestrictionIsMutable();
          perDeviceAvailabilityRestriction_.add(value);
          onChanged();
        } else {
          perDeviceAvailabilityRestrictionBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public Builder addPerDeviceAvailabilityRestriction(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction value) {
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePerDeviceAvailabilityRestrictionIsMutable();
          perDeviceAvailabilityRestriction_.add(index, value);
          onChanged();
        } else {
          perDeviceAvailabilityRestrictionBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public Builder addPerDeviceAvailabilityRestriction(
          com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.Builder builderForValue) {
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          ensurePerDeviceAvailabilityRestrictionIsMutable();
          perDeviceAvailabilityRestriction_.add(builderForValue.build());
          onChanged();
        } else {
          perDeviceAvailabilityRestrictionBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public Builder addPerDeviceAvailabilityRestriction(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.Builder builderForValue) {
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          ensurePerDeviceAvailabilityRestrictionIsMutable();
          perDeviceAvailabilityRestriction_.add(index, builderForValue.build());
          onChanged();
        } else {
          perDeviceAvailabilityRestrictionBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public Builder addAllPerDeviceAvailabilityRestriction(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction> values) {
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          ensurePerDeviceAvailabilityRestrictionIsMutable();
          super.addAll(values, perDeviceAvailabilityRestriction_);
          onChanged();
        } else {
          perDeviceAvailabilityRestrictionBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public Builder clearPerDeviceAvailabilityRestriction() {
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          perDeviceAvailabilityRestriction_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          perDeviceAvailabilityRestrictionBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public Builder removePerDeviceAvailabilityRestriction(int index) {
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          ensurePerDeviceAvailabilityRestrictionIsMutable();
          perDeviceAvailabilityRestriction_.remove(index);
          onChanged();
        } else {
          perDeviceAvailabilityRestrictionBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.Builder getPerDeviceAvailabilityRestrictionBuilder(
          int index) {
        return getPerDeviceAvailabilityRestrictionFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestrictionOrBuilder getPerDeviceAvailabilityRestrictionOrBuilder(
          int index) {
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          return perDeviceAvailabilityRestriction_.get(index);  } else {
          return perDeviceAvailabilityRestrictionBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestrictionOrBuilder> 
           getPerDeviceAvailabilityRestrictionOrBuilderList() {
        if (perDeviceAvailabilityRestrictionBuilder_ != null) {
          return perDeviceAvailabilityRestrictionBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(perDeviceAvailabilityRestriction_);
        }
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.Builder addPerDeviceAvailabilityRestrictionBuilder() {
        return getPerDeviceAvailabilityRestrictionFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.getDefaultInstance());
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.Builder addPerDeviceAvailabilityRestrictionBuilder(
          int index) {
        return getPerDeviceAvailabilityRestrictionFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.getDefaultInstance());
      }
      /**
       * <code>repeated group PerDeviceAvailabilityRestriction = 9 { ... }</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.Builder> 
           getPerDeviceAvailabilityRestrictionBuilderList() {
        return getPerDeviceAvailabilityRestrictionFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction, com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.Builder, com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestrictionOrBuilder> 
          getPerDeviceAvailabilityRestrictionFieldBuilder() {
        if (perDeviceAvailabilityRestrictionBuilder_ == null) {
          perDeviceAvailabilityRestrictionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction, com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestriction.Builder, com.akdeniz.googleplaycrawler.GooglePlay.Availability.PerDeviceAvailabilityRestrictionOrBuilder>(
                  perDeviceAvailabilityRestriction_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          perDeviceAvailabilityRestriction_ = null;
        }
        return perDeviceAvailabilityRestrictionBuilder_;
      }

      // optional bool availableIfOwned = 13;
      private boolean availableIfOwned_ ;
      /**
       * <code>optional bool availableIfOwned = 13;</code>
       */
      public boolean hasAvailableIfOwned() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bool availableIfOwned = 13;</code>
       */
      public boolean getAvailableIfOwned() {
        return availableIfOwned_;
      }
      /**
       * <code>optional bool availableIfOwned = 13;</code>
       */
      public Builder setAvailableIfOwned(boolean value) {
        bitField0_ |= 0x00000010;
        availableIfOwned_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool availableIfOwned = 13;</code>
       */
      public Builder clearAvailableIfOwned() {
        bitField0_ = (bitField0_ & ~0x00000010);
        availableIfOwned_ = false;
        onChanged();
        return this;
      }

      // repeated .Install install = 14;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Install> install_ =
        java.util.Collections.emptyList();
      private void ensureInstallIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          install_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Install>(install_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Install, com.akdeniz.googleplaycrawler.GooglePlay.Install.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InstallOrBuilder> installBuilder_;

      /**
       * <code>repeated .Install install = 14;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Install> getInstallList() {
        if (installBuilder_ == null) {
          return java.util.Collections.unmodifiableList(install_);
        } else {
          return installBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public int getInstallCount() {
        if (installBuilder_ == null) {
          return install_.size();
        } else {
          return installBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Install getInstall(int index) {
        if (installBuilder_ == null) {
          return install_.get(index);
        } else {
          return installBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public Builder setInstall(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Install value) {
        if (installBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureInstallIsMutable();
          install_.set(index, value);
          onChanged();
        } else {
          installBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public Builder setInstall(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Install.Builder builderForValue) {
        if (installBuilder_ == null) {
          ensureInstallIsMutable();
          install_.set(index, builderForValue.build());
          onChanged();
        } else {
          installBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public Builder addInstall(com.akdeniz.googleplaycrawler.GooglePlay.Install value) {
        if (installBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureInstallIsMutable();
          install_.add(value);
          onChanged();
        } else {
          installBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public Builder addInstall(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Install value) {
        if (installBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureInstallIsMutable();
          install_.add(index, value);
          onChanged();
        } else {
          installBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public Builder addInstall(
          com.akdeniz.googleplaycrawler.GooglePlay.Install.Builder builderForValue) {
        if (installBuilder_ == null) {
          ensureInstallIsMutable();
          install_.add(builderForValue.build());
          onChanged();
        } else {
          installBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public Builder addInstall(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Install.Builder builderForValue) {
        if (installBuilder_ == null) {
          ensureInstallIsMutable();
          install_.add(index, builderForValue.build());
          onChanged();
        } else {
          installBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public Builder addAllInstall(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Install> values) {
        if (installBuilder_ == null) {
          ensureInstallIsMutable();
          super.addAll(values, install_);
          onChanged();
        } else {
          installBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public Builder clearInstall() {
        if (installBuilder_ == null) {
          install_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          installBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public Builder removeInstall(int index) {
        if (installBuilder_ == null) {
          ensureInstallIsMutable();
          install_.remove(index);
          onChanged();
        } else {
          installBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Install.Builder getInstallBuilder(
          int index) {
        return getInstallFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.InstallOrBuilder getInstallOrBuilder(
          int index) {
        if (installBuilder_ == null) {
          return install_.get(index);  } else {
          return installBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.InstallOrBuilder> 
           getInstallOrBuilderList() {
        if (installBuilder_ != null) {
          return installBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(install_);
        }
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Install.Builder addInstallBuilder() {
        return getInstallFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Install.getDefaultInstance());
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Install.Builder addInstallBuilder(
          int index) {
        return getInstallFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Install.getDefaultInstance());
      }
      /**
       * <code>repeated .Install install = 14;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Install.Builder> 
           getInstallBuilderList() {
        return getInstallFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Install, com.akdeniz.googleplaycrawler.GooglePlay.Install.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InstallOrBuilder> 
          getInstallFieldBuilder() {
        if (installBuilder_ == null) {
          installBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Install, com.akdeniz.googleplaycrawler.GooglePlay.Install.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InstallOrBuilder>(
                  install_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          install_ = null;
        }
        return installBuilder_;
      }

      // optional .FilterEvaluationInfo filterInfo = 16;
      private com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo filterInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo, com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfoOrBuilder> filterInfoBuilder_;
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
       */
      public boolean hasFilterInfo() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo getFilterInfo() {
        if (filterInfoBuilder_ == null) {
          return filterInfo_;
        } else {
          return filterInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
       */
      public Builder setFilterInfo(com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo value) {
        if (filterInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          filterInfo_ = value;
          onChanged();
        } else {
          filterInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
       */
      public Builder setFilterInfo(
          com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.Builder builderForValue) {
        if (filterInfoBuilder_ == null) {
          filterInfo_ = builderForValue.build();
          onChanged();
        } else {
          filterInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
       */
      public Builder mergeFilterInfo(com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo value) {
        if (filterInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              filterInfo_ != com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.getDefaultInstance()) {
            filterInfo_ =
              com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.newBuilder(filterInfo_).mergeFrom(value).buildPartial();
          } else {
            filterInfo_ = value;
          }
          onChanged();
        } else {
          filterInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
       */
      public Builder clearFilterInfo() {
        if (filterInfoBuilder_ == null) {
          filterInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.getDefaultInstance();
          onChanged();
        } else {
          filterInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.Builder getFilterInfoBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getFilterInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfoOrBuilder getFilterInfoOrBuilder() {
        if (filterInfoBuilder_ != null) {
          return filterInfoBuilder_.getMessageOrBuilder();
        } else {
          return filterInfo_;
        }
      }
      /**
       * <code>optional .FilterEvaluationInfo filterInfo = 16;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo, com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfoOrBuilder> 
          getFilterInfoFieldBuilder() {
        if (filterInfoBuilder_ == null) {
          filterInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo, com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfoOrBuilder>(
                  filterInfo_,
                  getParentForChildren(),
                  isClean());
          filterInfo_ = null;
        }
        return filterInfoBuilder_;
      }

      // optional .OwnershipInfo ownershipInfo = 17;
      private com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo ownershipInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo, com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfoOrBuilder> ownershipInfoBuilder_;
      /**
       * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
       */
      public boolean hasOwnershipInfo() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo getOwnershipInfo() {
        if (ownershipInfoBuilder_ == null) {
          return ownershipInfo_;
        } else {
          return ownershipInfoBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
       */
      public Builder setOwnershipInfo(com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo value) {
        if (ownershipInfoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ownershipInfo_ = value;
          onChanged();
        } else {
          ownershipInfoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
       */
      public Builder setOwnershipInfo(
          com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.Builder builderForValue) {
        if (ownershipInfoBuilder_ == null) {
          ownershipInfo_ = builderForValue.build();
          onChanged();
        } else {
          ownershipInfoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
       */
      public Builder mergeOwnershipInfo(com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo value) {
        if (ownershipInfoBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              ownershipInfo_ != com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.getDefaultInstance()) {
            ownershipInfo_ =
              com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.newBuilder(ownershipInfo_).mergeFrom(value).buildPartial();
          } else {
            ownershipInfo_ = value;
          }
          onChanged();
        } else {
          ownershipInfoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
       */
      public Builder clearOwnershipInfo() {
        if (ownershipInfoBuilder_ == null) {
          ownershipInfo_ = com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.getDefaultInstance();
          onChanged();
        } else {
          ownershipInfoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.Builder getOwnershipInfoBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getOwnershipInfoFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfoOrBuilder getOwnershipInfoOrBuilder() {
        if (ownershipInfoBuilder_ != null) {
          return ownershipInfoBuilder_.getMessageOrBuilder();
        } else {
          return ownershipInfo_;
        }
      }
      /**
       * <code>optional .OwnershipInfo ownershipInfo = 17;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo, com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfoOrBuilder> 
          getOwnershipInfoFieldBuilder() {
        if (ownershipInfoBuilder_ == null) {
          ownershipInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo, com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.OwnershipInfoOrBuilder>(
                  ownershipInfo_,
                  getParentForChildren(),
                  isClean());
          ownershipInfo_ = null;
        }
        return ownershipInfoBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Availability)
    }

    static {
      defaultInstance = new Availability(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Availability)
  }

  public interface FilterEvaluationInfoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .RuleEvaluation ruleEvaluation = 1;
    /**
     * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation> 
        getRuleEvaluationList();
    /**
     * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation getRuleEvaluation(int index);
    /**
     * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
     */
    int getRuleEvaluationCount();
    /**
     * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluationOrBuilder> 
        getRuleEvaluationOrBuilderList();
    /**
     * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluationOrBuilder getRuleEvaluationOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code FilterEvaluationInfo}
   */
  public static final class FilterEvaluationInfo extends
      com.google.protobuf.GeneratedMessage
      implements FilterEvaluationInfoOrBuilder {
    // Use FilterEvaluationInfo.newBuilder() to construct.
    private FilterEvaluationInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private FilterEvaluationInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final FilterEvaluationInfo defaultInstance;
    public static FilterEvaluationInfo getDefaultInstance() {
      return defaultInstance;
    }

    public FilterEvaluationInfo getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private FilterEvaluationInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                ruleEvaluation_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation>();
                mutable_bitField0_ |= 0x00000001;
              }
              ruleEvaluation_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          ruleEvaluation_ = java.util.Collections.unmodifiableList(ruleEvaluation_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FilterEvaluationInfo_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FilterEvaluationInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.class, com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.Builder.class);
    }

    public static com.google.protobuf.Parser<FilterEvaluationInfo> PARSER =
        new com.google.protobuf.AbstractParser<FilterEvaluationInfo>() {
      public FilterEvaluationInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new FilterEvaluationInfo(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<FilterEvaluationInfo> getParserForType() {
      return PARSER;
    }

    // repeated .RuleEvaluation ruleEvaluation = 1;
    public static final int RULEEVALUATION_FIELD_NUMBER = 1;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation> ruleEvaluation_;
    /**
     * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation> getRuleEvaluationList() {
      return ruleEvaluation_;
    }
    /**
     * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluationOrBuilder> 
        getRuleEvaluationOrBuilderList() {
      return ruleEvaluation_;
    }
    /**
     * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
     */
    public int getRuleEvaluationCount() {
      return ruleEvaluation_.size();
    }
    /**
     * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation getRuleEvaluation(int index) {
      return ruleEvaluation_.get(index);
    }
    /**
     * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluationOrBuilder getRuleEvaluationOrBuilder(
        int index) {
      return ruleEvaluation_.get(index);
    }

    private void initFields() {
      ruleEvaluation_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < ruleEvaluation_.size(); i++) {
        output.writeMessage(1, ruleEvaluation_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < ruleEvaluation_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, ruleEvaluation_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code FilterEvaluationInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FilterEvaluationInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FilterEvaluationInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.class, com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getRuleEvaluationFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (ruleEvaluationBuilder_ == null) {
          ruleEvaluation_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          ruleEvaluationBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_FilterEvaluationInfo_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo build() {
        com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo result = new com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo(this);
        int from_bitField0_ = bitField0_;
        if (ruleEvaluationBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            ruleEvaluation_ = java.util.Collections.unmodifiableList(ruleEvaluation_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.ruleEvaluation_ = ruleEvaluation_;
        } else {
          result.ruleEvaluation_ = ruleEvaluationBuilder_.build();
        }
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo.getDefaultInstance()) return this;
        if (ruleEvaluationBuilder_ == null) {
          if (!other.ruleEvaluation_.isEmpty()) {
            if (ruleEvaluation_.isEmpty()) {
              ruleEvaluation_ = other.ruleEvaluation_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureRuleEvaluationIsMutable();
              ruleEvaluation_.addAll(other.ruleEvaluation_);
            }
            onChanged();
          }
        } else {
          if (!other.ruleEvaluation_.isEmpty()) {
            if (ruleEvaluationBuilder_.isEmpty()) {
              ruleEvaluationBuilder_.dispose();
              ruleEvaluationBuilder_ = null;
              ruleEvaluation_ = other.ruleEvaluation_;
              bitField0_ = (bitField0_ & ~0x00000001);
              ruleEvaluationBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getRuleEvaluationFieldBuilder() : null;
            } else {
              ruleEvaluationBuilder_.addAllMessages(other.ruleEvaluation_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.FilterEvaluationInfo) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .RuleEvaluation ruleEvaluation = 1;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation> ruleEvaluation_ =
        java.util.Collections.emptyList();
      private void ensureRuleEvaluationIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          ruleEvaluation_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation>(ruleEvaluation_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation, com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluationOrBuilder> ruleEvaluationBuilder_;

      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation> getRuleEvaluationList() {
        if (ruleEvaluationBuilder_ == null) {
          return java.util.Collections.unmodifiableList(ruleEvaluation_);
        } else {
          return ruleEvaluationBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public int getRuleEvaluationCount() {
        if (ruleEvaluationBuilder_ == null) {
          return ruleEvaluation_.size();
        } else {
          return ruleEvaluationBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation getRuleEvaluation(int index) {
        if (ruleEvaluationBuilder_ == null) {
          return ruleEvaluation_.get(index);
        } else {
          return ruleEvaluationBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public Builder setRuleEvaluation(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation value) {
        if (ruleEvaluationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRuleEvaluationIsMutable();
          ruleEvaluation_.set(index, value);
          onChanged();
        } else {
          ruleEvaluationBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public Builder setRuleEvaluation(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.Builder builderForValue) {
        if (ruleEvaluationBuilder_ == null) {
          ensureRuleEvaluationIsMutable();
          ruleEvaluation_.set(index, builderForValue.build());
          onChanged();
        } else {
          ruleEvaluationBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public Builder addRuleEvaluation(com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation value) {
        if (ruleEvaluationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRuleEvaluationIsMutable();
          ruleEvaluation_.add(value);
          onChanged();
        } else {
          ruleEvaluationBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public Builder addRuleEvaluation(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation value) {
        if (ruleEvaluationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRuleEvaluationIsMutable();
          ruleEvaluation_.add(index, value);
          onChanged();
        } else {
          ruleEvaluationBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public Builder addRuleEvaluation(
          com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.Builder builderForValue) {
        if (ruleEvaluationBuilder_ == null) {
          ensureRuleEvaluationIsMutable();
          ruleEvaluation_.add(builderForValue.build());
          onChanged();
        } else {
          ruleEvaluationBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public Builder addRuleEvaluation(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.Builder builderForValue) {
        if (ruleEvaluationBuilder_ == null) {
          ensureRuleEvaluationIsMutable();
          ruleEvaluation_.add(index, builderForValue.build());
          onChanged();
        } else {
          ruleEvaluationBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public Builder addAllRuleEvaluation(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation> values) {
        if (ruleEvaluationBuilder_ == null) {
          ensureRuleEvaluationIsMutable();
          super.addAll(values, ruleEvaluation_);
          onChanged();
        } else {
          ruleEvaluationBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public Builder clearRuleEvaluation() {
        if (ruleEvaluationBuilder_ == null) {
          ruleEvaluation_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          ruleEvaluationBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public Builder removeRuleEvaluation(int index) {
        if (ruleEvaluationBuilder_ == null) {
          ensureRuleEvaluationIsMutable();
          ruleEvaluation_.remove(index);
          onChanged();
        } else {
          ruleEvaluationBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.Builder getRuleEvaluationBuilder(
          int index) {
        return getRuleEvaluationFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluationOrBuilder getRuleEvaluationOrBuilder(
          int index) {
        if (ruleEvaluationBuilder_ == null) {
          return ruleEvaluation_.get(index);  } else {
          return ruleEvaluationBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluationOrBuilder> 
           getRuleEvaluationOrBuilderList() {
        if (ruleEvaluationBuilder_ != null) {
          return ruleEvaluationBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(ruleEvaluation_);
        }
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.Builder addRuleEvaluationBuilder() {
        return getRuleEvaluationFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.getDefaultInstance());
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.Builder addRuleEvaluationBuilder(
          int index) {
        return getRuleEvaluationFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.getDefaultInstance());
      }
      /**
       * <code>repeated .RuleEvaluation ruleEvaluation = 1;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.Builder> 
           getRuleEvaluationBuilderList() {
        return getRuleEvaluationFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation, com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluationOrBuilder> 
          getRuleEvaluationFieldBuilder() {
        if (ruleEvaluationBuilder_ == null) {
          ruleEvaluationBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation, com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluationOrBuilder>(
                  ruleEvaluation_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          ruleEvaluation_ = null;
        }
        return ruleEvaluationBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:FilterEvaluationInfo)
    }

    static {
      defaultInstance = new FilterEvaluationInfo(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:FilterEvaluationInfo)
  }

  public interface RuleOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool negate = 1;
    /**
     * <code>optional bool negate = 1;</code>
     */
    boolean hasNegate();
    /**
     * <code>optional bool negate = 1;</code>
     */
    boolean getNegate();

    // optional int32 operator = 2;
    /**
     * <code>optional int32 operator = 2;</code>
     */
    boolean hasOperator();
    /**
     * <code>optional int32 operator = 2;</code>
     */
    int getOperator();

    // optional int32 key = 3;
    /**
     * <code>optional int32 key = 3;</code>
     */
    boolean hasKey();
    /**
     * <code>optional int32 key = 3;</code>
     */
    int getKey();

    // repeated string stringArg = 4;
    /**
     * <code>repeated string stringArg = 4;</code>
     */
    java.util.List<java.lang.String>
    getStringArgList();
    /**
     * <code>repeated string stringArg = 4;</code>
     */
    int getStringArgCount();
    /**
     * <code>repeated string stringArg = 4;</code>
     */
    java.lang.String getStringArg(int index);
    /**
     * <code>repeated string stringArg = 4;</code>
     */
    com.google.protobuf.ByteString
        getStringArgBytes(int index);

    // repeated int64 longArg = 5;
    /**
     * <code>repeated int64 longArg = 5;</code>
     */
    java.util.List<java.lang.Long> getLongArgList();
    /**
     * <code>repeated int64 longArg = 5;</code>
     */
    int getLongArgCount();
    /**
     * <code>repeated int64 longArg = 5;</code>
     */
    long getLongArg(int index);

    // repeated double doubleArg = 6;
    /**
     * <code>repeated double doubleArg = 6;</code>
     */
    java.util.List<java.lang.Double> getDoubleArgList();
    /**
     * <code>repeated double doubleArg = 6;</code>
     */
    int getDoubleArgCount();
    /**
     * <code>repeated double doubleArg = 6;</code>
     */
    double getDoubleArg(int index);

    // repeated .Rule subrule = 7;
    /**
     * <code>repeated .Rule subrule = 7;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Rule> 
        getSubruleList();
    /**
     * <code>repeated .Rule subrule = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Rule getSubrule(int index);
    /**
     * <code>repeated .Rule subrule = 7;</code>
     */
    int getSubruleCount();
    /**
     * <code>repeated .Rule subrule = 7;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder> 
        getSubruleOrBuilderList();
    /**
     * <code>repeated .Rule subrule = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder getSubruleOrBuilder(
        int index);

    // optional int32 responseCode = 8;
    /**
     * <code>optional int32 responseCode = 8;</code>
     */
    boolean hasResponseCode();
    /**
     * <code>optional int32 responseCode = 8;</code>
     */
    int getResponseCode();

    // optional string comment = 9;
    /**
     * <code>optional string comment = 9;</code>
     */
    boolean hasComment();
    /**
     * <code>optional string comment = 9;</code>
     */
    java.lang.String getComment();
    /**
     * <code>optional string comment = 9;</code>
     */
    com.google.protobuf.ByteString
        getCommentBytes();

    // repeated fixed64 stringArgHash = 10;
    /**
     * <code>repeated fixed64 stringArgHash = 10;</code>
     */
    java.util.List<java.lang.Long> getStringArgHashList();
    /**
     * <code>repeated fixed64 stringArgHash = 10;</code>
     */
    int getStringArgHashCount();
    /**
     * <code>repeated fixed64 stringArgHash = 10;</code>
     */
    long getStringArgHash(int index);

    // repeated int32 constArg = 11;
    /**
     * <code>repeated int32 constArg = 11;</code>
     */
    java.util.List<java.lang.Integer> getConstArgList();
    /**
     * <code>repeated int32 constArg = 11;</code>
     */
    int getConstArgCount();
    /**
     * <code>repeated int32 constArg = 11;</code>
     */
    int getConstArg(int index);
  }
  /**
   * Protobuf type {@code Rule}
   */
  public static final class Rule extends
      com.google.protobuf.GeneratedMessage
      implements RuleOrBuilder {
    // Use Rule.newBuilder() to construct.
    private Rule(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Rule(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Rule defaultInstance;
    public static Rule getDefaultInstance() {
      return defaultInstance;
    }

    public Rule getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Rule(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              negate_ = input.readBool();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              operator_ = input.readInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              key_ = input.readInt32();
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                stringArg_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000008;
              }
              stringArg_.add(input.readBytes());
              break;
            }
            case 40: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                longArg_ = new java.util.ArrayList<java.lang.Long>();
                mutable_bitField0_ |= 0x00000010;
              }
              longArg_.add(input.readInt64());
              break;
            }
            case 42: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
                longArg_ = new java.util.ArrayList<java.lang.Long>();
                mutable_bitField0_ |= 0x00000010;
              }
              while (input.getBytesUntilLimit() > 0) {
                longArg_.add(input.readInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 49: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                doubleArg_ = new java.util.ArrayList<java.lang.Double>();
                mutable_bitField0_ |= 0x00000020;
              }
              doubleArg_.add(input.readDouble());
              break;
            }
            case 50: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020) && input.getBytesUntilLimit() > 0) {
                doubleArg_ = new java.util.ArrayList<java.lang.Double>();
                mutable_bitField0_ |= 0x00000020;
              }
              while (input.getBytesUntilLimit() > 0) {
                doubleArg_.add(input.readDouble());
              }
              input.popLimit(limit);
              break;
            }
            case 58: {
              if (!((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
                subrule_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Rule>();
                mutable_bitField0_ |= 0x00000040;
              }
              subrule_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Rule.PARSER, extensionRegistry));
              break;
            }
            case 64: {
              bitField0_ |= 0x00000008;
              responseCode_ = input.readInt32();
              break;
            }
            case 74: {
              bitField0_ |= 0x00000010;
              comment_ = input.readBytes();
              break;
            }
            case 81: {
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                stringArgHash_ = new java.util.ArrayList<java.lang.Long>();
                mutable_bitField0_ |= 0x00000200;
              }
              stringArgHash_.add(input.readFixed64());
              break;
            }
            case 82: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200) && input.getBytesUntilLimit() > 0) {
                stringArgHash_ = new java.util.ArrayList<java.lang.Long>();
                mutable_bitField0_ |= 0x00000200;
              }
              while (input.getBytesUntilLimit() > 0) {
                stringArgHash_.add(input.readFixed64());
              }
              input.popLimit(limit);
              break;
            }
            case 88: {
              if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
                constArg_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000400;
              }
              constArg_.add(input.readInt32());
              break;
            }
            case 90: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000400) == 0x00000400) && input.getBytesUntilLimit() > 0) {
                constArg_ = new java.util.ArrayList<java.lang.Integer>();
                mutable_bitField0_ |= 0x00000400;
              }
              while (input.getBytesUntilLimit() > 0) {
                constArg_.add(input.readInt32());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          stringArg_ = new com.google.protobuf.UnmodifiableLazyStringList(stringArg_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          longArg_ = java.util.Collections.unmodifiableList(longArg_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          doubleArg_ = java.util.Collections.unmodifiableList(doubleArg_);
        }
        if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
          subrule_ = java.util.Collections.unmodifiableList(subrule_);
        }
        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
          stringArgHash_ = java.util.Collections.unmodifiableList(stringArgHash_);
        }
        if (((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
          constArg_ = java.util.Collections.unmodifiableList(constArg_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Rule_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Rule_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Rule.class, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder.class);
    }

    public static com.google.protobuf.Parser<Rule> PARSER =
        new com.google.protobuf.AbstractParser<Rule>() {
      public Rule parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Rule(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Rule> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool negate = 1;
    public static final int NEGATE_FIELD_NUMBER = 1;
    private boolean negate_;
    /**
     * <code>optional bool negate = 1;</code>
     */
    public boolean hasNegate() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool negate = 1;</code>
     */
    public boolean getNegate() {
      return negate_;
    }

    // optional int32 operator = 2;
    public static final int OPERATOR_FIELD_NUMBER = 2;
    private int operator_;
    /**
     * <code>optional int32 operator = 2;</code>
     */
    public boolean hasOperator() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 operator = 2;</code>
     */
    public int getOperator() {
      return operator_;
    }

    // optional int32 key = 3;
    public static final int KEY_FIELD_NUMBER = 3;
    private int key_;
    /**
     * <code>optional int32 key = 3;</code>
     */
    public boolean hasKey() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int32 key = 3;</code>
     */
    public int getKey() {
      return key_;
    }

    // repeated string stringArg = 4;
    public static final int STRINGARG_FIELD_NUMBER = 4;
    private com.google.protobuf.LazyStringList stringArg_;
    /**
     * <code>repeated string stringArg = 4;</code>
     */
    public java.util.List<java.lang.String>
        getStringArgList() {
      return stringArg_;
    }
    /**
     * <code>repeated string stringArg = 4;</code>
     */
    public int getStringArgCount() {
      return stringArg_.size();
    }
    /**
     * <code>repeated string stringArg = 4;</code>
     */
    public java.lang.String getStringArg(int index) {
      return stringArg_.get(index);
    }
    /**
     * <code>repeated string stringArg = 4;</code>
     */
    public com.google.protobuf.ByteString
        getStringArgBytes(int index) {
      return stringArg_.getByteString(index);
    }

    // repeated int64 longArg = 5;
    public static final int LONGARG_FIELD_NUMBER = 5;
    private java.util.List<java.lang.Long> longArg_;
    /**
     * <code>repeated int64 longArg = 5;</code>
     */
    public java.util.List<java.lang.Long>
        getLongArgList() {
      return longArg_;
    }
    /**
     * <code>repeated int64 longArg = 5;</code>
     */
    public int getLongArgCount() {
      return longArg_.size();
    }
    /**
     * <code>repeated int64 longArg = 5;</code>
     */
    public long getLongArg(int index) {
      return longArg_.get(index);
    }

    // repeated double doubleArg = 6;
    public static final int DOUBLEARG_FIELD_NUMBER = 6;
    private java.util.List<java.lang.Double> doubleArg_;
    /**
     * <code>repeated double doubleArg = 6;</code>
     */
    public java.util.List<java.lang.Double>
        getDoubleArgList() {
      return doubleArg_;
    }
    /**
     * <code>repeated double doubleArg = 6;</code>
     */
    public int getDoubleArgCount() {
      return doubleArg_.size();
    }
    /**
     * <code>repeated double doubleArg = 6;</code>
     */
    public double getDoubleArg(int index) {
      return doubleArg_.get(index);
    }

    // repeated .Rule subrule = 7;
    public static final int SUBRULE_FIELD_NUMBER = 7;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Rule> subrule_;
    /**
     * <code>repeated .Rule subrule = 7;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Rule> getSubruleList() {
      return subrule_;
    }
    /**
     * <code>repeated .Rule subrule = 7;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder> 
        getSubruleOrBuilderList() {
      return subrule_;
    }
    /**
     * <code>repeated .Rule subrule = 7;</code>
     */
    public int getSubruleCount() {
      return subrule_.size();
    }
    /**
     * <code>repeated .Rule subrule = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Rule getSubrule(int index) {
      return subrule_.get(index);
    }
    /**
     * <code>repeated .Rule subrule = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder getSubruleOrBuilder(
        int index) {
      return subrule_.get(index);
    }

    // optional int32 responseCode = 8;
    public static final int RESPONSECODE_FIELD_NUMBER = 8;
    private int responseCode_;
    /**
     * <code>optional int32 responseCode = 8;</code>
     */
    public boolean hasResponseCode() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int32 responseCode = 8;</code>
     */
    public int getResponseCode() {
      return responseCode_;
    }

    // optional string comment = 9;
    public static final int COMMENT_FIELD_NUMBER = 9;
    private java.lang.Object comment_;
    /**
     * <code>optional string comment = 9;</code>
     */
    public boolean hasComment() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string comment = 9;</code>
     */
    public java.lang.String getComment() {
      java.lang.Object ref = comment_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          comment_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string comment = 9;</code>
     */
    public com.google.protobuf.ByteString
        getCommentBytes() {
      java.lang.Object ref = comment_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        comment_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated fixed64 stringArgHash = 10;
    public static final int STRINGARGHASH_FIELD_NUMBER = 10;
    private java.util.List<java.lang.Long> stringArgHash_;
    /**
     * <code>repeated fixed64 stringArgHash = 10;</code>
     */
    public java.util.List<java.lang.Long>
        getStringArgHashList() {
      return stringArgHash_;
    }
    /**
     * <code>repeated fixed64 stringArgHash = 10;</code>
     */
    public int getStringArgHashCount() {
      return stringArgHash_.size();
    }
    /**
     * <code>repeated fixed64 stringArgHash = 10;</code>
     */
    public long getStringArgHash(int index) {
      return stringArgHash_.get(index);
    }

    // repeated int32 constArg = 11;
    public static final int CONSTARG_FIELD_NUMBER = 11;
    private java.util.List<java.lang.Integer> constArg_;
    /**
     * <code>repeated int32 constArg = 11;</code>
     */
    public java.util.List<java.lang.Integer>
        getConstArgList() {
      return constArg_;
    }
    /**
     * <code>repeated int32 constArg = 11;</code>
     */
    public int getConstArgCount() {
      return constArg_.size();
    }
    /**
     * <code>repeated int32 constArg = 11;</code>
     */
    public int getConstArg(int index) {
      return constArg_.get(index);
    }

    private void initFields() {
      negate_ = false;
      operator_ = 0;
      key_ = 0;
      stringArg_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      longArg_ = java.util.Collections.emptyList();
      doubleArg_ = java.util.Collections.emptyList();
      subrule_ = java.util.Collections.emptyList();
      responseCode_ = 0;
      comment_ = "";
      stringArgHash_ = java.util.Collections.emptyList();
      constArg_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, negate_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, operator_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(3, key_);
      }
      for (int i = 0; i < stringArg_.size(); i++) {
        output.writeBytes(4, stringArg_.getByteString(i));
      }
      for (int i = 0; i < longArg_.size(); i++) {
        output.writeInt64(5, longArg_.get(i));
      }
      for (int i = 0; i < doubleArg_.size(); i++) {
        output.writeDouble(6, doubleArg_.get(i));
      }
      for (int i = 0; i < subrule_.size(); i++) {
        output.writeMessage(7, subrule_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(8, responseCode_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(9, getCommentBytes());
      }
      for (int i = 0; i < stringArgHash_.size(); i++) {
        output.writeFixed64(10, stringArgHash_.get(i));
      }
      for (int i = 0; i < constArg_.size(); i++) {
        output.writeInt32(11, constArg_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, negate_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, operator_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, key_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < stringArg_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(stringArg_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getStringArgList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < longArg_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt64SizeNoTag(longArg_.get(i));
        }
        size += dataSize;
        size += 1 * getLongArgList().size();
      }
      {
        int dataSize = 0;
        dataSize = 8 * getDoubleArgList().size();
        size += dataSize;
        size += 1 * getDoubleArgList().size();
      }
      for (int i = 0; i < subrule_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, subrule_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(8, responseCode_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(9, getCommentBytes());
      }
      {
        int dataSize = 0;
        dataSize = 8 * getStringArgHashList().size();
        size += dataSize;
        size += 1 * getStringArgHashList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < constArg_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt32SizeNoTag(constArg_.get(i));
        }
        size += dataSize;
        size += 1 * getConstArgList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.Rule parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Rule parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Rule parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Rule parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Rule parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Rule parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Rule parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Rule parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Rule parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Rule parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Rule prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Rule}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Rule_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Rule_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Rule.class, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Rule.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getSubruleFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        negate_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        operator_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        key_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        stringArg_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        longArg_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        doubleArg_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000020);
        if (subruleBuilder_ == null) {
          subrule_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
        } else {
          subruleBuilder_.clear();
        }
        responseCode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        comment_ = "";
        bitField0_ = (bitField0_ & ~0x00000100);
        stringArgHash_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000200);
        constArg_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Rule_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Rule getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Rule build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Rule result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Rule buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Rule result = new com.akdeniz.googleplaycrawler.GooglePlay.Rule(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.negate_ = negate_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.operator_ = operator_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.key_ = key_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          stringArg_ = new com.google.protobuf.UnmodifiableLazyStringList(
              stringArg_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.stringArg_ = stringArg_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          longArg_ = java.util.Collections.unmodifiableList(longArg_);
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.longArg_ = longArg_;
        if (((bitField0_ & 0x00000020) == 0x00000020)) {
          doubleArg_ = java.util.Collections.unmodifiableList(doubleArg_);
          bitField0_ = (bitField0_ & ~0x00000020);
        }
        result.doubleArg_ = doubleArg_;
        if (subruleBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040)) {
            subrule_ = java.util.Collections.unmodifiableList(subrule_);
            bitField0_ = (bitField0_ & ~0x00000040);
          }
          result.subrule_ = subrule_;
        } else {
          result.subrule_ = subruleBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000008;
        }
        result.responseCode_ = responseCode_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000010;
        }
        result.comment_ = comment_;
        if (((bitField0_ & 0x00000200) == 0x00000200)) {
          stringArgHash_ = java.util.Collections.unmodifiableList(stringArgHash_);
          bitField0_ = (bitField0_ & ~0x00000200);
        }
        result.stringArgHash_ = stringArgHash_;
        if (((bitField0_ & 0x00000400) == 0x00000400)) {
          constArg_ = java.util.Collections.unmodifiableList(constArg_);
          bitField0_ = (bitField0_ & ~0x00000400);
        }
        result.constArg_ = constArg_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Rule) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Rule)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Rule other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance()) return this;
        if (other.hasNegate()) {
          setNegate(other.getNegate());
        }
        if (other.hasOperator()) {
          setOperator(other.getOperator());
        }
        if (other.hasKey()) {
          setKey(other.getKey());
        }
        if (!other.stringArg_.isEmpty()) {
          if (stringArg_.isEmpty()) {
            stringArg_ = other.stringArg_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureStringArgIsMutable();
            stringArg_.addAll(other.stringArg_);
          }
          onChanged();
        }
        if (!other.longArg_.isEmpty()) {
          if (longArg_.isEmpty()) {
            longArg_ = other.longArg_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureLongArgIsMutable();
            longArg_.addAll(other.longArg_);
          }
          onChanged();
        }
        if (!other.doubleArg_.isEmpty()) {
          if (doubleArg_.isEmpty()) {
            doubleArg_ = other.doubleArg_;
            bitField0_ = (bitField0_ & ~0x00000020);
          } else {
            ensureDoubleArgIsMutable();
            doubleArg_.addAll(other.doubleArg_);
          }
          onChanged();
        }
        if (subruleBuilder_ == null) {
          if (!other.subrule_.isEmpty()) {
            if (subrule_.isEmpty()) {
              subrule_ = other.subrule_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureSubruleIsMutable();
              subrule_.addAll(other.subrule_);
            }
            onChanged();
          }
        } else {
          if (!other.subrule_.isEmpty()) {
            if (subruleBuilder_.isEmpty()) {
              subruleBuilder_.dispose();
              subruleBuilder_ = null;
              subrule_ = other.subrule_;
              bitField0_ = (bitField0_ & ~0x00000040);
              subruleBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getSubruleFieldBuilder() : null;
            } else {
              subruleBuilder_.addAllMessages(other.subrule_);
            }
          }
        }
        if (other.hasResponseCode()) {
          setResponseCode(other.getResponseCode());
        }
        if (other.hasComment()) {
          bitField0_ |= 0x00000100;
          comment_ = other.comment_;
          onChanged();
        }
        if (!other.stringArgHash_.isEmpty()) {
          if (stringArgHash_.isEmpty()) {
            stringArgHash_ = other.stringArgHash_;
            bitField0_ = (bitField0_ & ~0x00000200);
          } else {
            ensureStringArgHashIsMutable();
            stringArgHash_.addAll(other.stringArgHash_);
          }
          onChanged();
        }
        if (!other.constArg_.isEmpty()) {
          if (constArg_.isEmpty()) {
            constArg_ = other.constArg_;
            bitField0_ = (bitField0_ & ~0x00000400);
          } else {
            ensureConstArgIsMutable();
            constArg_.addAll(other.constArg_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.Rule parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.Rule) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool negate = 1;
      private boolean negate_ ;
      /**
       * <code>optional bool negate = 1;</code>
       */
      public boolean hasNegate() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bool negate = 1;</code>
       */
      public boolean getNegate() {
        return negate_;
      }
      /**
       * <code>optional bool negate = 1;</code>
       */
      public Builder setNegate(boolean value) {
        bitField0_ |= 0x00000001;
        negate_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool negate = 1;</code>
       */
      public Builder clearNegate() {
        bitField0_ = (bitField0_ & ~0x00000001);
        negate_ = false;
        onChanged();
        return this;
      }

      // optional int32 operator = 2;
      private int operator_ ;
      /**
       * <code>optional int32 operator = 2;</code>
       */
      public boolean hasOperator() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 operator = 2;</code>
       */
      public int getOperator() {
        return operator_;
      }
      /**
       * <code>optional int32 operator = 2;</code>
       */
      public Builder setOperator(int value) {
        bitField0_ |= 0x00000002;
        operator_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 operator = 2;</code>
       */
      public Builder clearOperator() {
        bitField0_ = (bitField0_ & ~0x00000002);
        operator_ = 0;
        onChanged();
        return this;
      }

      // optional int32 key = 3;
      private int key_ ;
      /**
       * <code>optional int32 key = 3;</code>
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int32 key = 3;</code>
       */
      public int getKey() {
        return key_;
      }
      /**
       * <code>optional int32 key = 3;</code>
       */
      public Builder setKey(int value) {
        bitField0_ |= 0x00000004;
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 key = 3;</code>
       */
      public Builder clearKey() {
        bitField0_ = (bitField0_ & ~0x00000004);
        key_ = 0;
        onChanged();
        return this;
      }

      // repeated string stringArg = 4;
      private com.google.protobuf.LazyStringList stringArg_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureStringArgIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          stringArg_ = new com.google.protobuf.LazyStringArrayList(stringArg_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <code>repeated string stringArg = 4;</code>
       */
      public java.util.List<java.lang.String>
          getStringArgList() {
        return java.util.Collections.unmodifiableList(stringArg_);
      }
      /**
       * <code>repeated string stringArg = 4;</code>
       */
      public int getStringArgCount() {
        return stringArg_.size();
      }
      /**
       * <code>repeated string stringArg = 4;</code>
       */
      public java.lang.String getStringArg(int index) {
        return stringArg_.get(index);
      }
      /**
       * <code>repeated string stringArg = 4;</code>
       */
      public com.google.protobuf.ByteString
          getStringArgBytes(int index) {
        return stringArg_.getByteString(index);
      }
      /**
       * <code>repeated string stringArg = 4;</code>
       */
      public Builder setStringArg(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureStringArgIsMutable();
        stringArg_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string stringArg = 4;</code>
       */
      public Builder addStringArg(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureStringArgIsMutable();
        stringArg_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string stringArg = 4;</code>
       */
      public Builder addAllStringArg(
          java.lang.Iterable<java.lang.String> values) {
        ensureStringArgIsMutable();
        super.addAll(values, stringArg_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string stringArg = 4;</code>
       */
      public Builder clearStringArg() {
        stringArg_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string stringArg = 4;</code>
       */
      public Builder addStringArgBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureStringArgIsMutable();
        stringArg_.add(value);
        onChanged();
        return this;
      }

      // repeated int64 longArg = 5;
      private java.util.List<java.lang.Long> longArg_ = java.util.Collections.emptyList();
      private void ensureLongArgIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          longArg_ = new java.util.ArrayList<java.lang.Long>(longArg_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <code>repeated int64 longArg = 5;</code>
       */
      public java.util.List<java.lang.Long>
          getLongArgList() {
        return java.util.Collections.unmodifiableList(longArg_);
      }
      /**
       * <code>repeated int64 longArg = 5;</code>
       */
      public int getLongArgCount() {
        return longArg_.size();
      }
      /**
       * <code>repeated int64 longArg = 5;</code>
       */
      public long getLongArg(int index) {
        return longArg_.get(index);
      }
      /**
       * <code>repeated int64 longArg = 5;</code>
       */
      public Builder setLongArg(
          int index, long value) {
        ensureLongArgIsMutable();
        longArg_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 longArg = 5;</code>
       */
      public Builder addLongArg(long value) {
        ensureLongArgIsMutable();
        longArg_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 longArg = 5;</code>
       */
      public Builder addAllLongArg(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureLongArgIsMutable();
        super.addAll(values, longArg_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 longArg = 5;</code>
       */
      public Builder clearLongArg() {
        longArg_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }

      // repeated double doubleArg = 6;
      private java.util.List<java.lang.Double> doubleArg_ = java.util.Collections.emptyList();
      private void ensureDoubleArgIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          doubleArg_ = new java.util.ArrayList<java.lang.Double>(doubleArg_);
          bitField0_ |= 0x00000020;
         }
      }
      /**
       * <code>repeated double doubleArg = 6;</code>
       */
      public java.util.List<java.lang.Double>
          getDoubleArgList() {
        return java.util.Collections.unmodifiableList(doubleArg_);
      }
      /**
       * <code>repeated double doubleArg = 6;</code>
       */
      public int getDoubleArgCount() {
        return doubleArg_.size();
      }
      /**
       * <code>repeated double doubleArg = 6;</code>
       */
      public double getDoubleArg(int index) {
        return doubleArg_.get(index);
      }
      /**
       * <code>repeated double doubleArg = 6;</code>
       */
      public Builder setDoubleArg(
          int index, double value) {
        ensureDoubleArgIsMutable();
        doubleArg_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double doubleArg = 6;</code>
       */
      public Builder addDoubleArg(double value) {
        ensureDoubleArgIsMutable();
        doubleArg_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double doubleArg = 6;</code>
       */
      public Builder addAllDoubleArg(
          java.lang.Iterable<? extends java.lang.Double> values) {
        ensureDoubleArgIsMutable();
        super.addAll(values, doubleArg_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double doubleArg = 6;</code>
       */
      public Builder clearDoubleArg() {
        doubleArg_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000020);
        onChanged();
        return this;
      }

      // repeated .Rule subrule = 7;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Rule> subrule_ =
        java.util.Collections.emptyList();
      private void ensureSubruleIsMutable() {
        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
          subrule_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Rule>(subrule_);
          bitField0_ |= 0x00000040;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Rule, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder> subruleBuilder_;

      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Rule> getSubruleList() {
        if (subruleBuilder_ == null) {
          return java.util.Collections.unmodifiableList(subrule_);
        } else {
          return subruleBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public int getSubruleCount() {
        if (subruleBuilder_ == null) {
          return subrule_.size();
        } else {
          return subruleBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Rule getSubrule(int index) {
        if (subruleBuilder_ == null) {
          return subrule_.get(index);
        } else {
          return subruleBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public Builder setSubrule(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Rule value) {
        if (subruleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSubruleIsMutable();
          subrule_.set(index, value);
          onChanged();
        } else {
          subruleBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public Builder setSubrule(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder builderForValue) {
        if (subruleBuilder_ == null) {
          ensureSubruleIsMutable();
          subrule_.set(index, builderForValue.build());
          onChanged();
        } else {
          subruleBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public Builder addSubrule(com.akdeniz.googleplaycrawler.GooglePlay.Rule value) {
        if (subruleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSubruleIsMutable();
          subrule_.add(value);
          onChanged();
        } else {
          subruleBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public Builder addSubrule(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Rule value) {
        if (subruleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSubruleIsMutable();
          subrule_.add(index, value);
          onChanged();
        } else {
          subruleBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public Builder addSubrule(
          com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder builderForValue) {
        if (subruleBuilder_ == null) {
          ensureSubruleIsMutable();
          subrule_.add(builderForValue.build());
          onChanged();
        } else {
          subruleBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public Builder addSubrule(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder builderForValue) {
        if (subruleBuilder_ == null) {
          ensureSubruleIsMutable();
          subrule_.add(index, builderForValue.build());
          onChanged();
        } else {
          subruleBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public Builder addAllSubrule(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Rule> values) {
        if (subruleBuilder_ == null) {
          ensureSubruleIsMutable();
          super.addAll(values, subrule_);
          onChanged();
        } else {
          subruleBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public Builder clearSubrule() {
        if (subruleBuilder_ == null) {
          subrule_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000040);
          onChanged();
        } else {
          subruleBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public Builder removeSubrule(int index) {
        if (subruleBuilder_ == null) {
          ensureSubruleIsMutable();
          subrule_.remove(index);
          onChanged();
        } else {
          subruleBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder getSubruleBuilder(
          int index) {
        return getSubruleFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder getSubruleOrBuilder(
          int index) {
        if (subruleBuilder_ == null) {
          return subrule_.get(index);  } else {
          return subruleBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder> 
           getSubruleOrBuilderList() {
        if (subruleBuilder_ != null) {
          return subruleBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(subrule_);
        }
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder addSubruleBuilder() {
        return getSubruleFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance());
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder addSubruleBuilder(
          int index) {
        return getSubruleFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance());
      }
      /**
       * <code>repeated .Rule subrule = 7;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder> 
           getSubruleBuilderList() {
        return getSubruleFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Rule, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder> 
          getSubruleFieldBuilder() {
        if (subruleBuilder_ == null) {
          subruleBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Rule, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder>(
                  subrule_,
                  ((bitField0_ & 0x00000040) == 0x00000040),
                  getParentForChildren(),
                  isClean());
          subrule_ = null;
        }
        return subruleBuilder_;
      }

      // optional int32 responseCode = 8;
      private int responseCode_ ;
      /**
       * <code>optional int32 responseCode = 8;</code>
       */
      public boolean hasResponseCode() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional int32 responseCode = 8;</code>
       */
      public int getResponseCode() {
        return responseCode_;
      }
      /**
       * <code>optional int32 responseCode = 8;</code>
       */
      public Builder setResponseCode(int value) {
        bitField0_ |= 0x00000080;
        responseCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 responseCode = 8;</code>
       */
      public Builder clearResponseCode() {
        bitField0_ = (bitField0_ & ~0x00000080);
        responseCode_ = 0;
        onChanged();
        return this;
      }

      // optional string comment = 9;
      private java.lang.Object comment_ = "";
      /**
       * <code>optional string comment = 9;</code>
       */
      public boolean hasComment() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional string comment = 9;</code>
       */
      public java.lang.String getComment() {
        java.lang.Object ref = comment_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          comment_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string comment = 9;</code>
       */
      public com.google.protobuf.ByteString
          getCommentBytes() {
        java.lang.Object ref = comment_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          comment_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string comment = 9;</code>
       */
      public Builder setComment(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        comment_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string comment = 9;</code>
       */
      public Builder clearComment() {
        bitField0_ = (bitField0_ & ~0x00000100);
        comment_ = getDefaultInstance().getComment();
        onChanged();
        return this;
      }
      /**
       * <code>optional string comment = 9;</code>
       */
      public Builder setCommentBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        comment_ = value;
        onChanged();
        return this;
      }

      // repeated fixed64 stringArgHash = 10;
      private java.util.List<java.lang.Long> stringArgHash_ = java.util.Collections.emptyList();
      private void ensureStringArgHashIsMutable() {
        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
          stringArgHash_ = new java.util.ArrayList<java.lang.Long>(stringArgHash_);
          bitField0_ |= 0x00000200;
         }
      }
      /**
       * <code>repeated fixed64 stringArgHash = 10;</code>
       */
      public java.util.List<java.lang.Long>
          getStringArgHashList() {
        return java.util.Collections.unmodifiableList(stringArgHash_);
      }
      /**
       * <code>repeated fixed64 stringArgHash = 10;</code>
       */
      public int getStringArgHashCount() {
        return stringArgHash_.size();
      }
      /**
       * <code>repeated fixed64 stringArgHash = 10;</code>
       */
      public long getStringArgHash(int index) {
        return stringArgHash_.get(index);
      }
      /**
       * <code>repeated fixed64 stringArgHash = 10;</code>
       */
      public Builder setStringArgHash(
          int index, long value) {
        ensureStringArgHashIsMutable();
        stringArgHash_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated fixed64 stringArgHash = 10;</code>
       */
      public Builder addStringArgHash(long value) {
        ensureStringArgHashIsMutable();
        stringArgHash_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated fixed64 stringArgHash = 10;</code>
       */
      public Builder addAllStringArgHash(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureStringArgHashIsMutable();
        super.addAll(values, stringArgHash_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated fixed64 stringArgHash = 10;</code>
       */
      public Builder clearStringArgHash() {
        stringArgHash_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000200);
        onChanged();
        return this;
      }

      // repeated int32 constArg = 11;
      private java.util.List<java.lang.Integer> constArg_ = java.util.Collections.emptyList();
      private void ensureConstArgIsMutable() {
        if (!((bitField0_ & 0x00000400) == 0x00000400)) {
          constArg_ = new java.util.ArrayList<java.lang.Integer>(constArg_);
          bitField0_ |= 0x00000400;
         }
      }
      /**
       * <code>repeated int32 constArg = 11;</code>
       */
      public java.util.List<java.lang.Integer>
          getConstArgList() {
        return java.util.Collections.unmodifiableList(constArg_);
      }
      /**
       * <code>repeated int32 constArg = 11;</code>
       */
      public int getConstArgCount() {
        return constArg_.size();
      }
      /**
       * <code>repeated int32 constArg = 11;</code>
       */
      public int getConstArg(int index) {
        return constArg_.get(index);
      }
      /**
       * <code>repeated int32 constArg = 11;</code>
       */
      public Builder setConstArg(
          int index, int value) {
        ensureConstArgIsMutable();
        constArg_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 constArg = 11;</code>
       */
      public Builder addConstArg(int value) {
        ensureConstArgIsMutable();
        constArg_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 constArg = 11;</code>
       */
      public Builder addAllConstArg(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        ensureConstArgIsMutable();
        super.addAll(values, constArg_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int32 constArg = 11;</code>
       */
      public Builder clearConstArg() {
        constArg_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000400);
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Rule)
    }

    static {
      defaultInstance = new Rule(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Rule)
  }

  public interface RuleEvaluationOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Rule rule = 1;
    /**
     * <code>optional .Rule rule = 1;</code>
     */
    boolean hasRule();
    /**
     * <code>optional .Rule rule = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Rule getRule();
    /**
     * <code>optional .Rule rule = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder getRuleOrBuilder();

    // repeated string actualStringValue = 2;
    /**
     * <code>repeated string actualStringValue = 2;</code>
     */
    java.util.List<java.lang.String>
    getActualStringValueList();
    /**
     * <code>repeated string actualStringValue = 2;</code>
     */
    int getActualStringValueCount();
    /**
     * <code>repeated string actualStringValue = 2;</code>
     */
    java.lang.String getActualStringValue(int index);
    /**
     * <code>repeated string actualStringValue = 2;</code>
     */
    com.google.protobuf.ByteString
        getActualStringValueBytes(int index);

    // repeated int64 actualLongValue = 3;
    /**
     * <code>repeated int64 actualLongValue = 3;</code>
     */
    java.util.List<java.lang.Long> getActualLongValueList();
    /**
     * <code>repeated int64 actualLongValue = 3;</code>
     */
    int getActualLongValueCount();
    /**
     * <code>repeated int64 actualLongValue = 3;</code>
     */
    long getActualLongValue(int index);

    // repeated bool actualBoolValue = 4;
    /**
     * <code>repeated bool actualBoolValue = 4;</code>
     */
    java.util.List<java.lang.Boolean> getActualBoolValueList();
    /**
     * <code>repeated bool actualBoolValue = 4;</code>
     */
    int getActualBoolValueCount();
    /**
     * <code>repeated bool actualBoolValue = 4;</code>
     */
    boolean getActualBoolValue(int index);

    // repeated double actualDoubleValue = 5;
    /**
     * <code>repeated double actualDoubleValue = 5;</code>
     */
    java.util.List<java.lang.Double> getActualDoubleValueList();
    /**
     * <code>repeated double actualDoubleValue = 5;</code>
     */
    int getActualDoubleValueCount();
    /**
     * <code>repeated double actualDoubleValue = 5;</code>
     */
    double getActualDoubleValue(int index);
  }
  /**
   * Protobuf type {@code RuleEvaluation}
   */
  public static final class RuleEvaluation extends
      com.google.protobuf.GeneratedMessage
      implements RuleEvaluationOrBuilder {
    // Use RuleEvaluation.newBuilder() to construct.
    private RuleEvaluation(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private RuleEvaluation(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final RuleEvaluation defaultInstance;
    public static RuleEvaluation getDefaultInstance() {
      return defaultInstance;
    }

    public RuleEvaluation getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private RuleEvaluation(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = rule_.toBuilder();
              }
              rule_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Rule.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(rule_);
                rule_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                actualStringValue_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000002;
              }
              actualStringValue_.add(input.readBytes());
              break;
            }
            case 24: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                actualLongValue_ = new java.util.ArrayList<java.lang.Long>();
                mutable_bitField0_ |= 0x00000004;
              }
              actualLongValue_.add(input.readInt64());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004) && input.getBytesUntilLimit() > 0) {
                actualLongValue_ = new java.util.ArrayList<java.lang.Long>();
                mutable_bitField0_ |= 0x00000004;
              }
              while (input.getBytesUntilLimit() > 0) {
                actualLongValue_.add(input.readInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 32: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                actualBoolValue_ = new java.util.ArrayList<java.lang.Boolean>();
                mutable_bitField0_ |= 0x00000008;
              }
              actualBoolValue_.add(input.readBool());
              break;
            }
            case 34: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008) && input.getBytesUntilLimit() > 0) {
                actualBoolValue_ = new java.util.ArrayList<java.lang.Boolean>();
                mutable_bitField0_ |= 0x00000008;
              }
              while (input.getBytesUntilLimit() > 0) {
                actualBoolValue_.add(input.readBool());
              }
              input.popLimit(limit);
              break;
            }
            case 41: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                actualDoubleValue_ = new java.util.ArrayList<java.lang.Double>();
                mutable_bitField0_ |= 0x00000010;
              }
              actualDoubleValue_.add(input.readDouble());
              break;
            }
            case 42: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010) && input.getBytesUntilLimit() > 0) {
                actualDoubleValue_ = new java.util.ArrayList<java.lang.Double>();
                mutable_bitField0_ |= 0x00000010;
              }
              while (input.getBytesUntilLimit() > 0) {
                actualDoubleValue_.add(input.readDouble());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          actualStringValue_ = new com.google.protobuf.UnmodifiableLazyStringList(actualStringValue_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          actualLongValue_ = java.util.Collections.unmodifiableList(actualLongValue_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          actualBoolValue_ = java.util.Collections.unmodifiableList(actualBoolValue_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          actualDoubleValue_ = java.util.Collections.unmodifiableList(actualDoubleValue_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_RuleEvaluation_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_RuleEvaluation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.class, com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.Builder.class);
    }

    public static com.google.protobuf.Parser<RuleEvaluation> PARSER =
        new com.google.protobuf.AbstractParser<RuleEvaluation>() {
      public RuleEvaluation parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RuleEvaluation(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<RuleEvaluation> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Rule rule = 1;
    public static final int RULE_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.Rule rule_;
    /**
     * <code>optional .Rule rule = 1;</code>
     */
    public boolean hasRule() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .Rule rule = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Rule getRule() {
      return rule_;
    }
    /**
     * <code>optional .Rule rule = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder getRuleOrBuilder() {
      return rule_;
    }

    // repeated string actualStringValue = 2;
    public static final int ACTUALSTRINGVALUE_FIELD_NUMBER = 2;
    private com.google.protobuf.LazyStringList actualStringValue_;
    /**
     * <code>repeated string actualStringValue = 2;</code>
     */
    public java.util.List<java.lang.String>
        getActualStringValueList() {
      return actualStringValue_;
    }
    /**
     * <code>repeated string actualStringValue = 2;</code>
     */
    public int getActualStringValueCount() {
      return actualStringValue_.size();
    }
    /**
     * <code>repeated string actualStringValue = 2;</code>
     */
    public java.lang.String getActualStringValue(int index) {
      return actualStringValue_.get(index);
    }
    /**
     * <code>repeated string actualStringValue = 2;</code>
     */
    public com.google.protobuf.ByteString
        getActualStringValueBytes(int index) {
      return actualStringValue_.getByteString(index);
    }

    // repeated int64 actualLongValue = 3;
    public static final int ACTUALLONGVALUE_FIELD_NUMBER = 3;
    private java.util.List<java.lang.Long> actualLongValue_;
    /**
     * <code>repeated int64 actualLongValue = 3;</code>
     */
    public java.util.List<java.lang.Long>
        getActualLongValueList() {
      return actualLongValue_;
    }
    /**
     * <code>repeated int64 actualLongValue = 3;</code>
     */
    public int getActualLongValueCount() {
      return actualLongValue_.size();
    }
    /**
     * <code>repeated int64 actualLongValue = 3;</code>
     */
    public long getActualLongValue(int index) {
      return actualLongValue_.get(index);
    }

    // repeated bool actualBoolValue = 4;
    public static final int ACTUALBOOLVALUE_FIELD_NUMBER = 4;
    private java.util.List<java.lang.Boolean> actualBoolValue_;
    /**
     * <code>repeated bool actualBoolValue = 4;</code>
     */
    public java.util.List<java.lang.Boolean>
        getActualBoolValueList() {
      return actualBoolValue_;
    }
    /**
     * <code>repeated bool actualBoolValue = 4;</code>
     */
    public int getActualBoolValueCount() {
      return actualBoolValue_.size();
    }
    /**
     * <code>repeated bool actualBoolValue = 4;</code>
     */
    public boolean getActualBoolValue(int index) {
      return actualBoolValue_.get(index);
    }

    // repeated double actualDoubleValue = 5;
    public static final int ACTUALDOUBLEVALUE_FIELD_NUMBER = 5;
    private java.util.List<java.lang.Double> actualDoubleValue_;
    /**
     * <code>repeated double actualDoubleValue = 5;</code>
     */
    public java.util.List<java.lang.Double>
        getActualDoubleValueList() {
      return actualDoubleValue_;
    }
    /**
     * <code>repeated double actualDoubleValue = 5;</code>
     */
    public int getActualDoubleValueCount() {
      return actualDoubleValue_.size();
    }
    /**
     * <code>repeated double actualDoubleValue = 5;</code>
     */
    public double getActualDoubleValue(int index) {
      return actualDoubleValue_.get(index);
    }

    private void initFields() {
      rule_ = com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance();
      actualStringValue_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      actualLongValue_ = java.util.Collections.emptyList();
      actualBoolValue_ = java.util.Collections.emptyList();
      actualDoubleValue_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, rule_);
      }
      for (int i = 0; i < actualStringValue_.size(); i++) {
        output.writeBytes(2, actualStringValue_.getByteString(i));
      }
      for (int i = 0; i < actualLongValue_.size(); i++) {
        output.writeInt64(3, actualLongValue_.get(i));
      }
      for (int i = 0; i < actualBoolValue_.size(); i++) {
        output.writeBool(4, actualBoolValue_.get(i));
      }
      for (int i = 0; i < actualDoubleValue_.size(); i++) {
        output.writeDouble(5, actualDoubleValue_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, rule_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < actualStringValue_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(actualStringValue_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getActualStringValueList().size();
      }
      {
        int dataSize = 0;
        for (int i = 0; i < actualLongValue_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt64SizeNoTag(actualLongValue_.get(i));
        }
        size += dataSize;
        size += 1 * getActualLongValueList().size();
      }
      {
        int dataSize = 0;
        dataSize = 1 * getActualBoolValueList().size();
        size += dataSize;
        size += 1 * getActualBoolValueList().size();
      }
      {
        int dataSize = 0;
        dataSize = 8 * getActualDoubleValueList().size();
        size += dataSize;
        size += 1 * getActualDoubleValueList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RuleEvaluation}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_RuleEvaluation_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_RuleEvaluation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.class, com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getRuleFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (ruleBuilder_ == null) {
          rule_ = com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance();
        } else {
          ruleBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        actualStringValue_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        actualLongValue_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        actualBoolValue_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        actualDoubleValue_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_RuleEvaluation_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation build() {
        com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation result = new com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (ruleBuilder_ == null) {
          result.rule_ = rule_;
        } else {
          result.rule_ = ruleBuilder_.build();
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          actualStringValue_ = new com.google.protobuf.UnmodifiableLazyStringList(
              actualStringValue_);
          bitField0_ = (bitField0_ & ~0x00000002);
        }
        result.actualStringValue_ = actualStringValue_;
        if (((bitField0_ & 0x00000004) == 0x00000004)) {
          actualLongValue_ = java.util.Collections.unmodifiableList(actualLongValue_);
          bitField0_ = (bitField0_ & ~0x00000004);
        }
        result.actualLongValue_ = actualLongValue_;
        if (((bitField0_ & 0x00000008) == 0x00000008)) {
          actualBoolValue_ = java.util.Collections.unmodifiableList(actualBoolValue_);
          bitField0_ = (bitField0_ & ~0x00000008);
        }
        result.actualBoolValue_ = actualBoolValue_;
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          actualDoubleValue_ = java.util.Collections.unmodifiableList(actualDoubleValue_);
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.actualDoubleValue_ = actualDoubleValue_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation.getDefaultInstance()) return this;
        if (other.hasRule()) {
          mergeRule(other.getRule());
        }
        if (!other.actualStringValue_.isEmpty()) {
          if (actualStringValue_.isEmpty()) {
            actualStringValue_ = other.actualStringValue_;
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            ensureActualStringValueIsMutable();
            actualStringValue_.addAll(other.actualStringValue_);
          }
          onChanged();
        }
        if (!other.actualLongValue_.isEmpty()) {
          if (actualLongValue_.isEmpty()) {
            actualLongValue_ = other.actualLongValue_;
            bitField0_ = (bitField0_ & ~0x00000004);
          } else {
            ensureActualLongValueIsMutable();
            actualLongValue_.addAll(other.actualLongValue_);
          }
          onChanged();
        }
        if (!other.actualBoolValue_.isEmpty()) {
          if (actualBoolValue_.isEmpty()) {
            actualBoolValue_ = other.actualBoolValue_;
            bitField0_ = (bitField0_ & ~0x00000008);
          } else {
            ensureActualBoolValueIsMutable();
            actualBoolValue_.addAll(other.actualBoolValue_);
          }
          onChanged();
        }
        if (!other.actualDoubleValue_.isEmpty()) {
          if (actualDoubleValue_.isEmpty()) {
            actualDoubleValue_ = other.actualDoubleValue_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureActualDoubleValueIsMutable();
            actualDoubleValue_.addAll(other.actualDoubleValue_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.RuleEvaluation) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Rule rule = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.Rule rule_ = com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Rule, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder> ruleBuilder_;
      /**
       * <code>optional .Rule rule = 1;</code>
       */
      public boolean hasRule() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .Rule rule = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Rule getRule() {
        if (ruleBuilder_ == null) {
          return rule_;
        } else {
          return ruleBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Rule rule = 1;</code>
       */
      public Builder setRule(com.akdeniz.googleplaycrawler.GooglePlay.Rule value) {
        if (ruleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          rule_ = value;
          onChanged();
        } else {
          ruleBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Rule rule = 1;</code>
       */
      public Builder setRule(
          com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder builderForValue) {
        if (ruleBuilder_ == null) {
          rule_ = builderForValue.build();
          onChanged();
        } else {
          ruleBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Rule rule = 1;</code>
       */
      public Builder mergeRule(com.akdeniz.googleplaycrawler.GooglePlay.Rule value) {
        if (ruleBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              rule_ != com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance()) {
            rule_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Rule.newBuilder(rule_).mergeFrom(value).buildPartial();
          } else {
            rule_ = value;
          }
          onChanged();
        } else {
          ruleBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Rule rule = 1;</code>
       */
      public Builder clearRule() {
        if (ruleBuilder_ == null) {
          rule_ = com.akdeniz.googleplaycrawler.GooglePlay.Rule.getDefaultInstance();
          onChanged();
        } else {
          ruleBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .Rule rule = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder getRuleBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getRuleFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Rule rule = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder getRuleOrBuilder() {
        if (ruleBuilder_ != null) {
          return ruleBuilder_.getMessageOrBuilder();
        } else {
          return rule_;
        }
      }
      /**
       * <code>optional .Rule rule = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Rule, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder> 
          getRuleFieldBuilder() {
        if (ruleBuilder_ == null) {
          ruleBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Rule, com.akdeniz.googleplaycrawler.GooglePlay.Rule.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RuleOrBuilder>(
                  rule_,
                  getParentForChildren(),
                  isClean());
          rule_ = null;
        }
        return ruleBuilder_;
      }

      // repeated string actualStringValue = 2;
      private com.google.protobuf.LazyStringList actualStringValue_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureActualStringValueIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          actualStringValue_ = new com.google.protobuf.LazyStringArrayList(actualStringValue_);
          bitField0_ |= 0x00000002;
         }
      }
      /**
       * <code>repeated string actualStringValue = 2;</code>
       */
      public java.util.List<java.lang.String>
          getActualStringValueList() {
        return java.util.Collections.unmodifiableList(actualStringValue_);
      }
      /**
       * <code>repeated string actualStringValue = 2;</code>
       */
      public int getActualStringValueCount() {
        return actualStringValue_.size();
      }
      /**
       * <code>repeated string actualStringValue = 2;</code>
       */
      public java.lang.String getActualStringValue(int index) {
        return actualStringValue_.get(index);
      }
      /**
       * <code>repeated string actualStringValue = 2;</code>
       */
      public com.google.protobuf.ByteString
          getActualStringValueBytes(int index) {
        return actualStringValue_.getByteString(index);
      }
      /**
       * <code>repeated string actualStringValue = 2;</code>
       */
      public Builder setActualStringValue(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureActualStringValueIsMutable();
        actualStringValue_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string actualStringValue = 2;</code>
       */
      public Builder addActualStringValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureActualStringValueIsMutable();
        actualStringValue_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string actualStringValue = 2;</code>
       */
      public Builder addAllActualStringValue(
          java.lang.Iterable<java.lang.String> values) {
        ensureActualStringValueIsMutable();
        super.addAll(values, actualStringValue_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string actualStringValue = 2;</code>
       */
      public Builder clearActualStringValue() {
        actualStringValue_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string actualStringValue = 2;</code>
       */
      public Builder addActualStringValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureActualStringValueIsMutable();
        actualStringValue_.add(value);
        onChanged();
        return this;
      }

      // repeated int64 actualLongValue = 3;
      private java.util.List<java.lang.Long> actualLongValue_ = java.util.Collections.emptyList();
      private void ensureActualLongValueIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          actualLongValue_ = new java.util.ArrayList<java.lang.Long>(actualLongValue_);
          bitField0_ |= 0x00000004;
         }
      }
      /**
       * <code>repeated int64 actualLongValue = 3;</code>
       */
      public java.util.List<java.lang.Long>
          getActualLongValueList() {
        return java.util.Collections.unmodifiableList(actualLongValue_);
      }
      /**
       * <code>repeated int64 actualLongValue = 3;</code>
       */
      public int getActualLongValueCount() {
        return actualLongValue_.size();
      }
      /**
       * <code>repeated int64 actualLongValue = 3;</code>
       */
      public long getActualLongValue(int index) {
        return actualLongValue_.get(index);
      }
      /**
       * <code>repeated int64 actualLongValue = 3;</code>
       */
      public Builder setActualLongValue(
          int index, long value) {
        ensureActualLongValueIsMutable();
        actualLongValue_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 actualLongValue = 3;</code>
       */
      public Builder addActualLongValue(long value) {
        ensureActualLongValueIsMutable();
        actualLongValue_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 actualLongValue = 3;</code>
       */
      public Builder addAllActualLongValue(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureActualLongValueIsMutable();
        super.addAll(values, actualLongValue_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated int64 actualLongValue = 3;</code>
       */
      public Builder clearActualLongValue() {
        actualLongValue_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }

      // repeated bool actualBoolValue = 4;
      private java.util.List<java.lang.Boolean> actualBoolValue_ = java.util.Collections.emptyList();
      private void ensureActualBoolValueIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          actualBoolValue_ = new java.util.ArrayList<java.lang.Boolean>(actualBoolValue_);
          bitField0_ |= 0x00000008;
         }
      }
      /**
       * <code>repeated bool actualBoolValue = 4;</code>
       */
      public java.util.List<java.lang.Boolean>
          getActualBoolValueList() {
        return java.util.Collections.unmodifiableList(actualBoolValue_);
      }
      /**
       * <code>repeated bool actualBoolValue = 4;</code>
       */
      public int getActualBoolValueCount() {
        return actualBoolValue_.size();
      }
      /**
       * <code>repeated bool actualBoolValue = 4;</code>
       */
      public boolean getActualBoolValue(int index) {
        return actualBoolValue_.get(index);
      }
      /**
       * <code>repeated bool actualBoolValue = 4;</code>
       */
      public Builder setActualBoolValue(
          int index, boolean value) {
        ensureActualBoolValueIsMutable();
        actualBoolValue_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bool actualBoolValue = 4;</code>
       */
      public Builder addActualBoolValue(boolean value) {
        ensureActualBoolValueIsMutable();
        actualBoolValue_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bool actualBoolValue = 4;</code>
       */
      public Builder addAllActualBoolValue(
          java.lang.Iterable<? extends java.lang.Boolean> values) {
        ensureActualBoolValueIsMutable();
        super.addAll(values, actualBoolValue_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated bool actualBoolValue = 4;</code>
       */
      public Builder clearActualBoolValue() {
        actualBoolValue_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }

      // repeated double actualDoubleValue = 5;
      private java.util.List<java.lang.Double> actualDoubleValue_ = java.util.Collections.emptyList();
      private void ensureActualDoubleValueIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          actualDoubleValue_ = new java.util.ArrayList<java.lang.Double>(actualDoubleValue_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <code>repeated double actualDoubleValue = 5;</code>
       */
      public java.util.List<java.lang.Double>
          getActualDoubleValueList() {
        return java.util.Collections.unmodifiableList(actualDoubleValue_);
      }
      /**
       * <code>repeated double actualDoubleValue = 5;</code>
       */
      public int getActualDoubleValueCount() {
        return actualDoubleValue_.size();
      }
      /**
       * <code>repeated double actualDoubleValue = 5;</code>
       */
      public double getActualDoubleValue(int index) {
        return actualDoubleValue_.get(index);
      }
      /**
       * <code>repeated double actualDoubleValue = 5;</code>
       */
      public Builder setActualDoubleValue(
          int index, double value) {
        ensureActualDoubleValueIsMutable();
        actualDoubleValue_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double actualDoubleValue = 5;</code>
       */
      public Builder addActualDoubleValue(double value) {
        ensureActualDoubleValueIsMutable();
        actualDoubleValue_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double actualDoubleValue = 5;</code>
       */
      public Builder addAllActualDoubleValue(
          java.lang.Iterable<? extends java.lang.Double> values) {
        ensureActualDoubleValueIsMutable();
        super.addAll(values, actualDoubleValue_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated double actualDoubleValue = 5;</code>
       */
      public Builder clearActualDoubleValue() {
        actualDoubleValue_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:RuleEvaluation)
    }

    static {
      defaultInstance = new RuleEvaluation(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:RuleEvaluation)
  }

  public interface LibraryAppDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string certificateHash = 2;
    /**
     * <code>optional string certificateHash = 2;</code>
     */
    boolean hasCertificateHash();
    /**
     * <code>optional string certificateHash = 2;</code>
     */
    java.lang.String getCertificateHash();
    /**
     * <code>optional string certificateHash = 2;</code>
     */
    com.google.protobuf.ByteString
        getCertificateHashBytes();

    // optional int64 refundTimeoutTimestampMsec = 3;
    /**
     * <code>optional int64 refundTimeoutTimestampMsec = 3;</code>
     */
    boolean hasRefundTimeoutTimestampMsec();
    /**
     * <code>optional int64 refundTimeoutTimestampMsec = 3;</code>
     */
    long getRefundTimeoutTimestampMsec();

    // optional int64 postDeliveryRefundWindowMsec = 4;
    /**
     * <code>optional int64 postDeliveryRefundWindowMsec = 4;</code>
     */
    boolean hasPostDeliveryRefundWindowMsec();
    /**
     * <code>optional int64 postDeliveryRefundWindowMsec = 4;</code>
     */
    long getPostDeliveryRefundWindowMsec();
  }
  /**
   * Protobuf type {@code LibraryAppDetails}
   */
  public static final class LibraryAppDetails extends
      com.google.protobuf.GeneratedMessage
      implements LibraryAppDetailsOrBuilder {
    // Use LibraryAppDetails.newBuilder() to construct.
    private LibraryAppDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private LibraryAppDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final LibraryAppDetails defaultInstance;
    public static LibraryAppDetails getDefaultInstance() {
      return defaultInstance;
    }

    public LibraryAppDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private LibraryAppDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 18: {
              bitField0_ |= 0x00000001;
              certificateHash_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000002;
              refundTimeoutTimestampMsec_ = input.readInt64();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000004;
              postDeliveryRefundWindowMsec_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryAppDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryAppDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<LibraryAppDetails> PARSER =
        new com.google.protobuf.AbstractParser<LibraryAppDetails>() {
      public LibraryAppDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new LibraryAppDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<LibraryAppDetails> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string certificateHash = 2;
    public static final int CERTIFICATEHASH_FIELD_NUMBER = 2;
    private java.lang.Object certificateHash_;
    /**
     * <code>optional string certificateHash = 2;</code>
     */
    public boolean hasCertificateHash() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string certificateHash = 2;</code>
     */
    public java.lang.String getCertificateHash() {
      java.lang.Object ref = certificateHash_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          certificateHash_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string certificateHash = 2;</code>
     */
    public com.google.protobuf.ByteString
        getCertificateHashBytes() {
      java.lang.Object ref = certificateHash_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        certificateHash_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 refundTimeoutTimestampMsec = 3;
    public static final int REFUNDTIMEOUTTIMESTAMPMSEC_FIELD_NUMBER = 3;
    private long refundTimeoutTimestampMsec_;
    /**
     * <code>optional int64 refundTimeoutTimestampMsec = 3;</code>
     */
    public boolean hasRefundTimeoutTimestampMsec() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 refundTimeoutTimestampMsec = 3;</code>
     */
    public long getRefundTimeoutTimestampMsec() {
      return refundTimeoutTimestampMsec_;
    }

    // optional int64 postDeliveryRefundWindowMsec = 4;
    public static final int POSTDELIVERYREFUNDWINDOWMSEC_FIELD_NUMBER = 4;
    private long postDeliveryRefundWindowMsec_;
    /**
     * <code>optional int64 postDeliveryRefundWindowMsec = 4;</code>
     */
    public boolean hasPostDeliveryRefundWindowMsec() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 postDeliveryRefundWindowMsec = 4;</code>
     */
    public long getPostDeliveryRefundWindowMsec() {
      return postDeliveryRefundWindowMsec_;
    }

    private void initFields() {
      certificateHash_ = "";
      refundTimeoutTimestampMsec_ = 0L;
      postDeliveryRefundWindowMsec_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(2, getCertificateHashBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(3, refundTimeoutTimestampMsec_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(4, postDeliveryRefundWindowMsec_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getCertificateHashBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, refundTimeoutTimestampMsec_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, postDeliveryRefundWindowMsec_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code LibraryAppDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryAppDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryAppDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        certificateHash_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        refundTimeoutTimestampMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        postDeliveryRefundWindowMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryAppDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.certificateHash_ = certificateHash_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.refundTimeoutTimestampMsec_ = refundTimeoutTimestampMsec_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.postDeliveryRefundWindowMsec_ = postDeliveryRefundWindowMsec_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.getDefaultInstance()) return this;
        if (other.hasCertificateHash()) {
          bitField0_ |= 0x00000001;
          certificateHash_ = other.certificateHash_;
          onChanged();
        }
        if (other.hasRefundTimeoutTimestampMsec()) {
          setRefundTimeoutTimestampMsec(other.getRefundTimeoutTimestampMsec());
        }
        if (other.hasPostDeliveryRefundWindowMsec()) {
          setPostDeliveryRefundWindowMsec(other.getPostDeliveryRefundWindowMsec());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string certificateHash = 2;
      private java.lang.Object certificateHash_ = "";
      /**
       * <code>optional string certificateHash = 2;</code>
       */
      public boolean hasCertificateHash() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string certificateHash = 2;</code>
       */
      public java.lang.String getCertificateHash() {
        java.lang.Object ref = certificateHash_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          certificateHash_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string certificateHash = 2;</code>
       */
      public com.google.protobuf.ByteString
          getCertificateHashBytes() {
        java.lang.Object ref = certificateHash_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          certificateHash_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string certificateHash = 2;</code>
       */
      public Builder setCertificateHash(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        certificateHash_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string certificateHash = 2;</code>
       */
      public Builder clearCertificateHash() {
        bitField0_ = (bitField0_ & ~0x00000001);
        certificateHash_ = getDefaultInstance().getCertificateHash();
        onChanged();
        return this;
      }
      /**
       * <code>optional string certificateHash = 2;</code>
       */
      public Builder setCertificateHashBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        certificateHash_ = value;
        onChanged();
        return this;
      }

      // optional int64 refundTimeoutTimestampMsec = 3;
      private long refundTimeoutTimestampMsec_ ;
      /**
       * <code>optional int64 refundTimeoutTimestampMsec = 3;</code>
       */
      public boolean hasRefundTimeoutTimestampMsec() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 refundTimeoutTimestampMsec = 3;</code>
       */
      public long getRefundTimeoutTimestampMsec() {
        return refundTimeoutTimestampMsec_;
      }
      /**
       * <code>optional int64 refundTimeoutTimestampMsec = 3;</code>
       */
      public Builder setRefundTimeoutTimestampMsec(long value) {
        bitField0_ |= 0x00000002;
        refundTimeoutTimestampMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 refundTimeoutTimestampMsec = 3;</code>
       */
      public Builder clearRefundTimeoutTimestampMsec() {
        bitField0_ = (bitField0_ & ~0x00000002);
        refundTimeoutTimestampMsec_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 postDeliveryRefundWindowMsec = 4;
      private long postDeliveryRefundWindowMsec_ ;
      /**
       * <code>optional int64 postDeliveryRefundWindowMsec = 4;</code>
       */
      public boolean hasPostDeliveryRefundWindowMsec() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 postDeliveryRefundWindowMsec = 4;</code>
       */
      public long getPostDeliveryRefundWindowMsec() {
        return postDeliveryRefundWindowMsec_;
      }
      /**
       * <code>optional int64 postDeliveryRefundWindowMsec = 4;</code>
       */
      public Builder setPostDeliveryRefundWindowMsec(long value) {
        bitField0_ |= 0x00000004;
        postDeliveryRefundWindowMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 postDeliveryRefundWindowMsec = 4;</code>
       */
      public Builder clearPostDeliveryRefundWindowMsec() {
        bitField0_ = (bitField0_ & ~0x00000004);
        postDeliveryRefundWindowMsec_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:LibraryAppDetails)
    }

    static {
      defaultInstance = new LibraryAppDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:LibraryAppDetails)
  }

  public interface LibraryInAppDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string signedPurchaseData = 1;
    /**
     * <code>optional string signedPurchaseData = 1;</code>
     */
    boolean hasSignedPurchaseData();
    /**
     * <code>optional string signedPurchaseData = 1;</code>
     */
    java.lang.String getSignedPurchaseData();
    /**
     * <code>optional string signedPurchaseData = 1;</code>
     */
    com.google.protobuf.ByteString
        getSignedPurchaseDataBytes();

    // optional string signature = 2;
    /**
     * <code>optional string signature = 2;</code>
     */
    boolean hasSignature();
    /**
     * <code>optional string signature = 2;</code>
     */
    java.lang.String getSignature();
    /**
     * <code>optional string signature = 2;</code>
     */
    com.google.protobuf.ByteString
        getSignatureBytes();
  }
  /**
   * Protobuf type {@code LibraryInAppDetails}
   */
  public static final class LibraryInAppDetails extends
      com.google.protobuf.GeneratedMessage
      implements LibraryInAppDetailsOrBuilder {
    // Use LibraryInAppDetails.newBuilder() to construct.
    private LibraryInAppDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private LibraryInAppDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final LibraryInAppDetails defaultInstance;
    public static LibraryInAppDetails getDefaultInstance() {
      return defaultInstance;
    }

    public LibraryInAppDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private LibraryInAppDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              signedPurchaseData_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              signature_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryInAppDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryInAppDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<LibraryInAppDetails> PARSER =
        new com.google.protobuf.AbstractParser<LibraryInAppDetails>() {
      public LibraryInAppDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new LibraryInAppDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<LibraryInAppDetails> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string signedPurchaseData = 1;
    public static final int SIGNEDPURCHASEDATA_FIELD_NUMBER = 1;
    private java.lang.Object signedPurchaseData_;
    /**
     * <code>optional string signedPurchaseData = 1;</code>
     */
    public boolean hasSignedPurchaseData() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string signedPurchaseData = 1;</code>
     */
    public java.lang.String getSignedPurchaseData() {
      java.lang.Object ref = signedPurchaseData_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          signedPurchaseData_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string signedPurchaseData = 1;</code>
     */
    public com.google.protobuf.ByteString
        getSignedPurchaseDataBytes() {
      java.lang.Object ref = signedPurchaseData_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        signedPurchaseData_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string signature = 2;
    public static final int SIGNATURE_FIELD_NUMBER = 2;
    private java.lang.Object signature_;
    /**
     * <code>optional string signature = 2;</code>
     */
    public boolean hasSignature() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string signature = 2;</code>
     */
    public java.lang.String getSignature() {
      java.lang.Object ref = signature_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          signature_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string signature = 2;</code>
     */
    public com.google.protobuf.ByteString
        getSignatureBytes() {
      java.lang.Object ref = signature_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        signature_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      signedPurchaseData_ = "";
      signature_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getSignedPurchaseDataBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getSignatureBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getSignedPurchaseDataBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getSignatureBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code LibraryInAppDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryInAppDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryInAppDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        signedPurchaseData_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        signature_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryInAppDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.signedPurchaseData_ = signedPurchaseData_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.signature_ = signature_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.getDefaultInstance()) return this;
        if (other.hasSignedPurchaseData()) {
          bitField0_ |= 0x00000001;
          signedPurchaseData_ = other.signedPurchaseData_;
          onChanged();
        }
        if (other.hasSignature()) {
          bitField0_ |= 0x00000002;
          signature_ = other.signature_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string signedPurchaseData = 1;
      private java.lang.Object signedPurchaseData_ = "";
      /**
       * <code>optional string signedPurchaseData = 1;</code>
       */
      public boolean hasSignedPurchaseData() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string signedPurchaseData = 1;</code>
       */
      public java.lang.String getSignedPurchaseData() {
        java.lang.Object ref = signedPurchaseData_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          signedPurchaseData_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string signedPurchaseData = 1;</code>
       */
      public com.google.protobuf.ByteString
          getSignedPurchaseDataBytes() {
        java.lang.Object ref = signedPurchaseData_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          signedPurchaseData_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string signedPurchaseData = 1;</code>
       */
      public Builder setSignedPurchaseData(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        signedPurchaseData_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string signedPurchaseData = 1;</code>
       */
      public Builder clearSignedPurchaseData() {
        bitField0_ = (bitField0_ & ~0x00000001);
        signedPurchaseData_ = getDefaultInstance().getSignedPurchaseData();
        onChanged();
        return this;
      }
      /**
       * <code>optional string signedPurchaseData = 1;</code>
       */
      public Builder setSignedPurchaseDataBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        signedPurchaseData_ = value;
        onChanged();
        return this;
      }

      // optional string signature = 2;
      private java.lang.Object signature_ = "";
      /**
       * <code>optional string signature = 2;</code>
       */
      public boolean hasSignature() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string signature = 2;</code>
       */
      public java.lang.String getSignature() {
        java.lang.Object ref = signature_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          signature_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string signature = 2;</code>
       */
      public com.google.protobuf.ByteString
          getSignatureBytes() {
        java.lang.Object ref = signature_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          signature_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string signature = 2;</code>
       */
      public Builder setSignature(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        signature_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string signature = 2;</code>
       */
      public Builder clearSignature() {
        bitField0_ = (bitField0_ & ~0x00000002);
        signature_ = getDefaultInstance().getSignature();
        onChanged();
        return this;
      }
      /**
       * <code>optional string signature = 2;</code>
       */
      public Builder setSignatureBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        signature_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:LibraryInAppDetails)
    }

    static {
      defaultInstance = new LibraryInAppDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:LibraryInAppDetails)
  }

  public interface LibraryMutationOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Docid docid = 1;
    /**
     * <code>optional .Docid docid = 1;</code>
     */
    boolean hasDocid();
    /**
     * <code>optional .Docid docid = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Docid getDocid();
    /**
     * <code>optional .Docid docid = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getDocidOrBuilder();

    // optional int32 offerType = 2;
    /**
     * <code>optional int32 offerType = 2;</code>
     */
    boolean hasOfferType();
    /**
     * <code>optional int32 offerType = 2;</code>
     */
    int getOfferType();

    // optional int64 documentHash = 3;
    /**
     * <code>optional int64 documentHash = 3;</code>
     */
    boolean hasDocumentHash();
    /**
     * <code>optional int64 documentHash = 3;</code>
     */
    long getDocumentHash();

    // optional bool deleted = 4;
    /**
     * <code>optional bool deleted = 4;</code>
     */
    boolean hasDeleted();
    /**
     * <code>optional bool deleted = 4;</code>
     */
    boolean getDeleted();

    // optional .LibraryAppDetails appDetails = 5;
    /**
     * <code>optional .LibraryAppDetails appDetails = 5;</code>
     */
    boolean hasAppDetails();
    /**
     * <code>optional .LibraryAppDetails appDetails = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails getAppDetails();
    /**
     * <code>optional .LibraryAppDetails appDetails = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetailsOrBuilder getAppDetailsOrBuilder();

    // optional .LibrarySubscriptionDetails subscriptionDetails = 6;
    /**
     * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
     */
    boolean hasSubscriptionDetails();
    /**
     * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails getSubscriptionDetails();
    /**
     * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetailsOrBuilder getSubscriptionDetailsOrBuilder();

    // optional .LibraryInAppDetails inAppDetails = 7;
    /**
     * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
     */
    boolean hasInAppDetails();
    /**
     * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails getInAppDetails();
    /**
     * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetailsOrBuilder getInAppDetailsOrBuilder();
  }
  /**
   * Protobuf type {@code LibraryMutation}
   */
  public static final class LibraryMutation extends
      com.google.protobuf.GeneratedMessage
      implements LibraryMutationOrBuilder {
    // Use LibraryMutation.newBuilder() to construct.
    private LibraryMutation(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private LibraryMutation(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final LibraryMutation defaultInstance;
    public static LibraryMutation getDefaultInstance() {
      return defaultInstance;
    }

    public LibraryMutation getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private LibraryMutation(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = docid_.toBuilder();
              }
              docid_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Docid.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(docid_);
                docid_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              offerType_ = input.readInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              documentHash_ = input.readInt64();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              deleted_ = input.readBool();
              break;
            }
            case 42: {
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = appDetails_.toBuilder();
              }
              appDetails_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(appDetails_);
                appDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 50: {
              com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = subscriptionDetails_.toBuilder();
              }
              subscriptionDetails_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(subscriptionDetails_);
                subscriptionDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 58: {
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = inAppDetails_.toBuilder();
              }
              inAppDetails_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(inAppDetails_);
                inAppDetails_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryMutation_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryMutation_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.class, com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.Builder.class);
    }

    public static com.google.protobuf.Parser<LibraryMutation> PARSER =
        new com.google.protobuf.AbstractParser<LibraryMutation>() {
      public LibraryMutation parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new LibraryMutation(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<LibraryMutation> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Docid docid = 1;
    public static final int DOCID_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.Docid docid_;
    /**
     * <code>optional .Docid docid = 1;</code>
     */
    public boolean hasDocid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .Docid docid = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Docid getDocid() {
      return docid_;
    }
    /**
     * <code>optional .Docid docid = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getDocidOrBuilder() {
      return docid_;
    }

    // optional int32 offerType = 2;
    public static final int OFFERTYPE_FIELD_NUMBER = 2;
    private int offerType_;
    /**
     * <code>optional int32 offerType = 2;</code>
     */
    public boolean hasOfferType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 offerType = 2;</code>
     */
    public int getOfferType() {
      return offerType_;
    }

    // optional int64 documentHash = 3;
    public static final int DOCUMENTHASH_FIELD_NUMBER = 3;
    private long documentHash_;
    /**
     * <code>optional int64 documentHash = 3;</code>
     */
    public boolean hasDocumentHash() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 documentHash = 3;</code>
     */
    public long getDocumentHash() {
      return documentHash_;
    }

    // optional bool deleted = 4;
    public static final int DELETED_FIELD_NUMBER = 4;
    private boolean deleted_;
    /**
     * <code>optional bool deleted = 4;</code>
     */
    public boolean hasDeleted() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool deleted = 4;</code>
     */
    public boolean getDeleted() {
      return deleted_;
    }

    // optional .LibraryAppDetails appDetails = 5;
    public static final int APPDETAILS_FIELD_NUMBER = 5;
    private com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails appDetails_;
    /**
     * <code>optional .LibraryAppDetails appDetails = 5;</code>
     */
    public boolean hasAppDetails() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional .LibraryAppDetails appDetails = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails getAppDetails() {
      return appDetails_;
    }
    /**
     * <code>optional .LibraryAppDetails appDetails = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetailsOrBuilder getAppDetailsOrBuilder() {
      return appDetails_;
    }

    // optional .LibrarySubscriptionDetails subscriptionDetails = 6;
    public static final int SUBSCRIPTIONDETAILS_FIELD_NUMBER = 6;
    private com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails subscriptionDetails_;
    /**
     * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
     */
    public boolean hasSubscriptionDetails() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails getSubscriptionDetails() {
      return subscriptionDetails_;
    }
    /**
     * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetailsOrBuilder getSubscriptionDetailsOrBuilder() {
      return subscriptionDetails_;
    }

    // optional .LibraryInAppDetails inAppDetails = 7;
    public static final int INAPPDETAILS_FIELD_NUMBER = 7;
    private com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails inAppDetails_;
    /**
     * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
     */
    public boolean hasInAppDetails() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails getInAppDetails() {
      return inAppDetails_;
    }
    /**
     * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetailsOrBuilder getInAppDetailsOrBuilder() {
      return inAppDetails_;
    }

    private void initFields() {
      docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
      offerType_ = 0;
      documentHash_ = 0L;
      deleted_ = false;
      appDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.getDefaultInstance();
      subscriptionDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.getDefaultInstance();
      inAppDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, docid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, offerType_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, documentHash_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(4, deleted_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(5, appDetails_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(6, subscriptionDetails_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(7, inAppDetails_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, docid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, offerType_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, documentHash_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(4, deleted_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, appDetails_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, subscriptionDetails_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, inAppDetails_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code LibraryMutation}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryMutation_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryMutation_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.class, com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getDocidFieldBuilder();
          getAppDetailsFieldBuilder();
          getSubscriptionDetailsFieldBuilder();
          getInAppDetailsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (docidBuilder_ == null) {
          docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
        } else {
          docidBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        offerType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        documentHash_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        deleted_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        if (appDetailsBuilder_ == null) {
          appDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.getDefaultInstance();
        } else {
          appDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (subscriptionDetailsBuilder_ == null) {
          subscriptionDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.getDefaultInstance();
        } else {
          subscriptionDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (inAppDetailsBuilder_ == null) {
          inAppDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.getDefaultInstance();
        } else {
          inAppDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryMutation_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation build() {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation result = new com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (docidBuilder_ == null) {
          result.docid_ = docid_;
        } else {
          result.docid_ = docidBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.offerType_ = offerType_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.documentHash_ = documentHash_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.deleted_ = deleted_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (appDetailsBuilder_ == null) {
          result.appDetails_ = appDetails_;
        } else {
          result.appDetails_ = appDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (subscriptionDetailsBuilder_ == null) {
          result.subscriptionDetails_ = subscriptionDetails_;
        } else {
          result.subscriptionDetails_ = subscriptionDetailsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (inAppDetailsBuilder_ == null) {
          result.inAppDetails_ = inAppDetails_;
        } else {
          result.inAppDetails_ = inAppDetailsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.getDefaultInstance()) return this;
        if (other.hasDocid()) {
          mergeDocid(other.getDocid());
        }
        if (other.hasOfferType()) {
          setOfferType(other.getOfferType());
        }
        if (other.hasDocumentHash()) {
          setDocumentHash(other.getDocumentHash());
        }
        if (other.hasDeleted()) {
          setDeleted(other.getDeleted());
        }
        if (other.hasAppDetails()) {
          mergeAppDetails(other.getAppDetails());
        }
        if (other.hasSubscriptionDetails()) {
          mergeSubscriptionDetails(other.getSubscriptionDetails());
        }
        if (other.hasInAppDetails()) {
          mergeInAppDetails(other.getInAppDetails());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Docid docid = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.Docid docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder> docidBuilder_;
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public boolean hasDocid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Docid getDocid() {
        if (docidBuilder_ == null) {
          return docid_;
        } else {
          return docidBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public Builder setDocid(com.akdeniz.googleplaycrawler.GooglePlay.Docid value) {
        if (docidBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          docid_ = value;
          onChanged();
        } else {
          docidBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public Builder setDocid(
          com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder builderForValue) {
        if (docidBuilder_ == null) {
          docid_ = builderForValue.build();
          onChanged();
        } else {
          docidBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public Builder mergeDocid(com.akdeniz.googleplaycrawler.GooglePlay.Docid value) {
        if (docidBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              docid_ != com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance()) {
            docid_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Docid.newBuilder(docid_).mergeFrom(value).buildPartial();
          } else {
            docid_ = value;
          }
          onChanged();
        } else {
          docidBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public Builder clearDocid() {
        if (docidBuilder_ == null) {
          docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
          onChanged();
        } else {
          docidBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder getDocidBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getDocidFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getDocidOrBuilder() {
        if (docidBuilder_ != null) {
          return docidBuilder_.getMessageOrBuilder();
        } else {
          return docid_;
        }
      }
      /**
       * <code>optional .Docid docid = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder> 
          getDocidFieldBuilder() {
        if (docidBuilder_ == null) {
          docidBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder>(
                  docid_,
                  getParentForChildren(),
                  isClean());
          docid_ = null;
        }
        return docidBuilder_;
      }

      // optional int32 offerType = 2;
      private int offerType_ ;
      /**
       * <code>optional int32 offerType = 2;</code>
       */
      public boolean hasOfferType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 offerType = 2;</code>
       */
      public int getOfferType() {
        return offerType_;
      }
      /**
       * <code>optional int32 offerType = 2;</code>
       */
      public Builder setOfferType(int value) {
        bitField0_ |= 0x00000002;
        offerType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 offerType = 2;</code>
       */
      public Builder clearOfferType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        offerType_ = 0;
        onChanged();
        return this;
      }

      // optional int64 documentHash = 3;
      private long documentHash_ ;
      /**
       * <code>optional int64 documentHash = 3;</code>
       */
      public boolean hasDocumentHash() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 documentHash = 3;</code>
       */
      public long getDocumentHash() {
        return documentHash_;
      }
      /**
       * <code>optional int64 documentHash = 3;</code>
       */
      public Builder setDocumentHash(long value) {
        bitField0_ |= 0x00000004;
        documentHash_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 documentHash = 3;</code>
       */
      public Builder clearDocumentHash() {
        bitField0_ = (bitField0_ & ~0x00000004);
        documentHash_ = 0L;
        onChanged();
        return this;
      }

      // optional bool deleted = 4;
      private boolean deleted_ ;
      /**
       * <code>optional bool deleted = 4;</code>
       */
      public boolean hasDeleted() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bool deleted = 4;</code>
       */
      public boolean getDeleted() {
        return deleted_;
      }
      /**
       * <code>optional bool deleted = 4;</code>
       */
      public Builder setDeleted(boolean value) {
        bitField0_ |= 0x00000008;
        deleted_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool deleted = 4;</code>
       */
      public Builder clearDeleted() {
        bitField0_ = (bitField0_ & ~0x00000008);
        deleted_ = false;
        onChanged();
        return this;
      }

      // optional .LibraryAppDetails appDetails = 5;
      private com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails appDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails, com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetailsOrBuilder> appDetailsBuilder_;
      /**
       * <code>optional .LibraryAppDetails appDetails = 5;</code>
       */
      public boolean hasAppDetails() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional .LibraryAppDetails appDetails = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails getAppDetails() {
        if (appDetailsBuilder_ == null) {
          return appDetails_;
        } else {
          return appDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .LibraryAppDetails appDetails = 5;</code>
       */
      public Builder setAppDetails(com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails value) {
        if (appDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          appDetails_ = value;
          onChanged();
        } else {
          appDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .LibraryAppDetails appDetails = 5;</code>
       */
      public Builder setAppDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.Builder builderForValue) {
        if (appDetailsBuilder_ == null) {
          appDetails_ = builderForValue.build();
          onChanged();
        } else {
          appDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .LibraryAppDetails appDetails = 5;</code>
       */
      public Builder mergeAppDetails(com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails value) {
        if (appDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              appDetails_ != com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.getDefaultInstance()) {
            appDetails_ =
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.newBuilder(appDetails_).mergeFrom(value).buildPartial();
          } else {
            appDetails_ = value;
          }
          onChanged();
        } else {
          appDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .LibraryAppDetails appDetails = 5;</code>
       */
      public Builder clearAppDetails() {
        if (appDetailsBuilder_ == null) {
          appDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.getDefaultInstance();
          onChanged();
        } else {
          appDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <code>optional .LibraryAppDetails appDetails = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.Builder getAppDetailsBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getAppDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .LibraryAppDetails appDetails = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetailsOrBuilder getAppDetailsOrBuilder() {
        if (appDetailsBuilder_ != null) {
          return appDetailsBuilder_.getMessageOrBuilder();
        } else {
          return appDetails_;
        }
      }
      /**
       * <code>optional .LibraryAppDetails appDetails = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails, com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetailsOrBuilder> 
          getAppDetailsFieldBuilder() {
        if (appDetailsBuilder_ == null) {
          appDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails, com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryAppDetailsOrBuilder>(
                  appDetails_,
                  getParentForChildren(),
                  isClean());
          appDetails_ = null;
        }
        return appDetailsBuilder_;
      }

      // optional .LibrarySubscriptionDetails subscriptionDetails = 6;
      private com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails subscriptionDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails, com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetailsOrBuilder> subscriptionDetailsBuilder_;
      /**
       * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
       */
      public boolean hasSubscriptionDetails() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails getSubscriptionDetails() {
        if (subscriptionDetailsBuilder_ == null) {
          return subscriptionDetails_;
        } else {
          return subscriptionDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
       */
      public Builder setSubscriptionDetails(com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails value) {
        if (subscriptionDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          subscriptionDetails_ = value;
          onChanged();
        } else {
          subscriptionDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
       */
      public Builder setSubscriptionDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.Builder builderForValue) {
        if (subscriptionDetailsBuilder_ == null) {
          subscriptionDetails_ = builderForValue.build();
          onChanged();
        } else {
          subscriptionDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
       */
      public Builder mergeSubscriptionDetails(com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails value) {
        if (subscriptionDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              subscriptionDetails_ != com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.getDefaultInstance()) {
            subscriptionDetails_ =
              com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.newBuilder(subscriptionDetails_).mergeFrom(value).buildPartial();
          } else {
            subscriptionDetails_ = value;
          }
          onChanged();
        } else {
          subscriptionDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
       */
      public Builder clearSubscriptionDetails() {
        if (subscriptionDetailsBuilder_ == null) {
          subscriptionDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.getDefaultInstance();
          onChanged();
        } else {
          subscriptionDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.Builder getSubscriptionDetailsBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getSubscriptionDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetailsOrBuilder getSubscriptionDetailsOrBuilder() {
        if (subscriptionDetailsBuilder_ != null) {
          return subscriptionDetailsBuilder_.getMessageOrBuilder();
        } else {
          return subscriptionDetails_;
        }
      }
      /**
       * <code>optional .LibrarySubscriptionDetails subscriptionDetails = 6;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails, com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetailsOrBuilder> 
          getSubscriptionDetailsFieldBuilder() {
        if (subscriptionDetailsBuilder_ == null) {
          subscriptionDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails, com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetailsOrBuilder>(
                  subscriptionDetails_,
                  getParentForChildren(),
                  isClean());
          subscriptionDetails_ = null;
        }
        return subscriptionDetailsBuilder_;
      }

      // optional .LibraryInAppDetails inAppDetails = 7;
      private com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails inAppDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails, com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetailsOrBuilder> inAppDetailsBuilder_;
      /**
       * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
       */
      public boolean hasInAppDetails() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails getInAppDetails() {
        if (inAppDetailsBuilder_ == null) {
          return inAppDetails_;
        } else {
          return inAppDetailsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
       */
      public Builder setInAppDetails(com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails value) {
        if (inAppDetailsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          inAppDetails_ = value;
          onChanged();
        } else {
          inAppDetailsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
       */
      public Builder setInAppDetails(
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.Builder builderForValue) {
        if (inAppDetailsBuilder_ == null) {
          inAppDetails_ = builderForValue.build();
          onChanged();
        } else {
          inAppDetailsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
       */
      public Builder mergeInAppDetails(com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails value) {
        if (inAppDetailsBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              inAppDetails_ != com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.getDefaultInstance()) {
            inAppDetails_ =
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.newBuilder(inAppDetails_).mergeFrom(value).buildPartial();
          } else {
            inAppDetails_ = value;
          }
          onChanged();
        } else {
          inAppDetailsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
       */
      public Builder clearInAppDetails() {
        if (inAppDetailsBuilder_ == null) {
          inAppDetails_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.getDefaultInstance();
          onChanged();
        } else {
          inAppDetailsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.Builder getInAppDetailsBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getInAppDetailsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetailsOrBuilder getInAppDetailsOrBuilder() {
        if (inAppDetailsBuilder_ != null) {
          return inAppDetailsBuilder_.getMessageOrBuilder();
        } else {
          return inAppDetails_;
        }
      }
      /**
       * <code>optional .LibraryInAppDetails inAppDetails = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails, com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetailsOrBuilder> 
          getInAppDetailsFieldBuilder() {
        if (inAppDetailsBuilder_ == null) {
          inAppDetailsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails, com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetails.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryInAppDetailsOrBuilder>(
                  inAppDetails_,
                  getParentForChildren(),
                  isClean());
          inAppDetails_ = null;
        }
        return inAppDetailsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:LibraryMutation)
    }

    static {
      defaultInstance = new LibraryMutation(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:LibraryMutation)
  }

  public interface LibrarySubscriptionDetailsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 initiationTimestampMsec = 1;
    /**
     * <code>optional int64 initiationTimestampMsec = 1;</code>
     */
    boolean hasInitiationTimestampMsec();
    /**
     * <code>optional int64 initiationTimestampMsec = 1;</code>
     */
    long getInitiationTimestampMsec();

    // optional int64 validUntilTimestampMsec = 2;
    /**
     * <code>optional int64 validUntilTimestampMsec = 2;</code>
     */
    boolean hasValidUntilTimestampMsec();
    /**
     * <code>optional int64 validUntilTimestampMsec = 2;</code>
     */
    long getValidUntilTimestampMsec();

    // optional bool autoRenewing = 3;
    /**
     * <code>optional bool autoRenewing = 3;</code>
     */
    boolean hasAutoRenewing();
    /**
     * <code>optional bool autoRenewing = 3;</code>
     */
    boolean getAutoRenewing();

    // optional int64 trialUntilTimestampMsec = 4;
    /**
     * <code>optional int64 trialUntilTimestampMsec = 4;</code>
     */
    boolean hasTrialUntilTimestampMsec();
    /**
     * <code>optional int64 trialUntilTimestampMsec = 4;</code>
     */
    long getTrialUntilTimestampMsec();
  }
  /**
   * Protobuf type {@code LibrarySubscriptionDetails}
   */
  public static final class LibrarySubscriptionDetails extends
      com.google.protobuf.GeneratedMessage
      implements LibrarySubscriptionDetailsOrBuilder {
    // Use LibrarySubscriptionDetails.newBuilder() to construct.
    private LibrarySubscriptionDetails(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private LibrarySubscriptionDetails(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final LibrarySubscriptionDetails defaultInstance;
    public static LibrarySubscriptionDetails getDefaultInstance() {
      return defaultInstance;
    }

    public LibrarySubscriptionDetails getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private LibrarySubscriptionDetails(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              initiationTimestampMsec_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              validUntilTimestampMsec_ = input.readInt64();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              autoRenewing_ = input.readBool();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              trialUntilTimestampMsec_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibrarySubscriptionDetails_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibrarySubscriptionDetails_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.Builder.class);
    }

    public static com.google.protobuf.Parser<LibrarySubscriptionDetails> PARSER =
        new com.google.protobuf.AbstractParser<LibrarySubscriptionDetails>() {
      public LibrarySubscriptionDetails parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new LibrarySubscriptionDetails(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<LibrarySubscriptionDetails> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 initiationTimestampMsec = 1;
    public static final int INITIATIONTIMESTAMPMSEC_FIELD_NUMBER = 1;
    private long initiationTimestampMsec_;
    /**
     * <code>optional int64 initiationTimestampMsec = 1;</code>
     */
    public boolean hasInitiationTimestampMsec() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 initiationTimestampMsec = 1;</code>
     */
    public long getInitiationTimestampMsec() {
      return initiationTimestampMsec_;
    }

    // optional int64 validUntilTimestampMsec = 2;
    public static final int VALIDUNTILTIMESTAMPMSEC_FIELD_NUMBER = 2;
    private long validUntilTimestampMsec_;
    /**
     * <code>optional int64 validUntilTimestampMsec = 2;</code>
     */
    public boolean hasValidUntilTimestampMsec() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 validUntilTimestampMsec = 2;</code>
     */
    public long getValidUntilTimestampMsec() {
      return validUntilTimestampMsec_;
    }

    // optional bool autoRenewing = 3;
    public static final int AUTORENEWING_FIELD_NUMBER = 3;
    private boolean autoRenewing_;
    /**
     * <code>optional bool autoRenewing = 3;</code>
     */
    public boolean hasAutoRenewing() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool autoRenewing = 3;</code>
     */
    public boolean getAutoRenewing() {
      return autoRenewing_;
    }

    // optional int64 trialUntilTimestampMsec = 4;
    public static final int TRIALUNTILTIMESTAMPMSEC_FIELD_NUMBER = 4;
    private long trialUntilTimestampMsec_;
    /**
     * <code>optional int64 trialUntilTimestampMsec = 4;</code>
     */
    public boolean hasTrialUntilTimestampMsec() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 trialUntilTimestampMsec = 4;</code>
     */
    public long getTrialUntilTimestampMsec() {
      return trialUntilTimestampMsec_;
    }

    private void initFields() {
      initiationTimestampMsec_ = 0L;
      validUntilTimestampMsec_ = 0L;
      autoRenewing_ = false;
      trialUntilTimestampMsec_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, initiationTimestampMsec_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, validUntilTimestampMsec_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, autoRenewing_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(4, trialUntilTimestampMsec_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, initiationTimestampMsec_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, validUntilTimestampMsec_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, autoRenewing_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, trialUntilTimestampMsec_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code LibrarySubscriptionDetails}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetailsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibrarySubscriptionDetails_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibrarySubscriptionDetails_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.class, com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        initiationTimestampMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        validUntilTimestampMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        autoRenewing_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        trialUntilTimestampMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibrarySubscriptionDetails_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails build() {
        com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails result = new com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.initiationTimestampMsec_ = initiationTimestampMsec_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.validUntilTimestampMsec_ = validUntilTimestampMsec_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.autoRenewing_ = autoRenewing_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.trialUntilTimestampMsec_ = trialUntilTimestampMsec_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails.getDefaultInstance()) return this;
        if (other.hasInitiationTimestampMsec()) {
          setInitiationTimestampMsec(other.getInitiationTimestampMsec());
        }
        if (other.hasValidUntilTimestampMsec()) {
          setValidUntilTimestampMsec(other.getValidUntilTimestampMsec());
        }
        if (other.hasAutoRenewing()) {
          setAutoRenewing(other.getAutoRenewing());
        }
        if (other.hasTrialUntilTimestampMsec()) {
          setTrialUntilTimestampMsec(other.getTrialUntilTimestampMsec());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.LibrarySubscriptionDetails) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 initiationTimestampMsec = 1;
      private long initiationTimestampMsec_ ;
      /**
       * <code>optional int64 initiationTimestampMsec = 1;</code>
       */
      public boolean hasInitiationTimestampMsec() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 initiationTimestampMsec = 1;</code>
       */
      public long getInitiationTimestampMsec() {
        return initiationTimestampMsec_;
      }
      /**
       * <code>optional int64 initiationTimestampMsec = 1;</code>
       */
      public Builder setInitiationTimestampMsec(long value) {
        bitField0_ |= 0x00000001;
        initiationTimestampMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 initiationTimestampMsec = 1;</code>
       */
      public Builder clearInitiationTimestampMsec() {
        bitField0_ = (bitField0_ & ~0x00000001);
        initiationTimestampMsec_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 validUntilTimestampMsec = 2;
      private long validUntilTimestampMsec_ ;
      /**
       * <code>optional int64 validUntilTimestampMsec = 2;</code>
       */
      public boolean hasValidUntilTimestampMsec() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 validUntilTimestampMsec = 2;</code>
       */
      public long getValidUntilTimestampMsec() {
        return validUntilTimestampMsec_;
      }
      /**
       * <code>optional int64 validUntilTimestampMsec = 2;</code>
       */
      public Builder setValidUntilTimestampMsec(long value) {
        bitField0_ |= 0x00000002;
        validUntilTimestampMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 validUntilTimestampMsec = 2;</code>
       */
      public Builder clearValidUntilTimestampMsec() {
        bitField0_ = (bitField0_ & ~0x00000002);
        validUntilTimestampMsec_ = 0L;
        onChanged();
        return this;
      }

      // optional bool autoRenewing = 3;
      private boolean autoRenewing_ ;
      /**
       * <code>optional bool autoRenewing = 3;</code>
       */
      public boolean hasAutoRenewing() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool autoRenewing = 3;</code>
       */
      public boolean getAutoRenewing() {
        return autoRenewing_;
      }
      /**
       * <code>optional bool autoRenewing = 3;</code>
       */
      public Builder setAutoRenewing(boolean value) {
        bitField0_ |= 0x00000004;
        autoRenewing_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool autoRenewing = 3;</code>
       */
      public Builder clearAutoRenewing() {
        bitField0_ = (bitField0_ & ~0x00000004);
        autoRenewing_ = false;
        onChanged();
        return this;
      }

      // optional int64 trialUntilTimestampMsec = 4;
      private long trialUntilTimestampMsec_ ;
      /**
       * <code>optional int64 trialUntilTimestampMsec = 4;</code>
       */
      public boolean hasTrialUntilTimestampMsec() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 trialUntilTimestampMsec = 4;</code>
       */
      public long getTrialUntilTimestampMsec() {
        return trialUntilTimestampMsec_;
      }
      /**
       * <code>optional int64 trialUntilTimestampMsec = 4;</code>
       */
      public Builder setTrialUntilTimestampMsec(long value) {
        bitField0_ |= 0x00000008;
        trialUntilTimestampMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 trialUntilTimestampMsec = 4;</code>
       */
      public Builder clearTrialUntilTimestampMsec() {
        bitField0_ = (bitField0_ & ~0x00000008);
        trialUntilTimestampMsec_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:LibrarySubscriptionDetails)
    }

    static {
      defaultInstance = new LibrarySubscriptionDetails(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:LibrarySubscriptionDetails)
  }

  public interface LibraryUpdateOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 status = 1;
    /**
     * <code>optional int32 status = 1;</code>
     */
    boolean hasStatus();
    /**
     * <code>optional int32 status = 1;</code>
     */
    int getStatus();

    // optional int32 corpus = 2;
    /**
     * <code>optional int32 corpus = 2;</code>
     */
    boolean hasCorpus();
    /**
     * <code>optional int32 corpus = 2;</code>
     */
    int getCorpus();

    // optional bytes serverToken = 3;
    /**
     * <code>optional bytes serverToken = 3;</code>
     */
    boolean hasServerToken();
    /**
     * <code>optional bytes serverToken = 3;</code>
     */
    com.google.protobuf.ByteString getServerToken();

    // repeated .LibraryMutation mutation = 4;
    /**
     * <code>repeated .LibraryMutation mutation = 4;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation> 
        getMutationList();
    /**
     * <code>repeated .LibraryMutation mutation = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation getMutation(int index);
    /**
     * <code>repeated .LibraryMutation mutation = 4;</code>
     */
    int getMutationCount();
    /**
     * <code>repeated .LibraryMutation mutation = 4;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutationOrBuilder> 
        getMutationOrBuilderList();
    /**
     * <code>repeated .LibraryMutation mutation = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutationOrBuilder getMutationOrBuilder(
        int index);

    // optional bool hasMore = 5;
    /**
     * <code>optional bool hasMore = 5;</code>
     */
    boolean hasHasMore();
    /**
     * <code>optional bool hasMore = 5;</code>
     */
    boolean getHasMore();

    // optional string libraryId = 6;
    /**
     * <code>optional string libraryId = 6;</code>
     */
    boolean hasLibraryId();
    /**
     * <code>optional string libraryId = 6;</code>
     */
    java.lang.String getLibraryId();
    /**
     * <code>optional string libraryId = 6;</code>
     */
    com.google.protobuf.ByteString
        getLibraryIdBytes();
  }
  /**
   * Protobuf type {@code LibraryUpdate}
   */
  public static final class LibraryUpdate extends
      com.google.protobuf.GeneratedMessage
      implements LibraryUpdateOrBuilder {
    // Use LibraryUpdate.newBuilder() to construct.
    private LibraryUpdate(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private LibraryUpdate(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final LibraryUpdate defaultInstance;
    public static LibraryUpdate getDefaultInstance() {
      return defaultInstance;
    }

    public LibraryUpdate getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private LibraryUpdate(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              status_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              corpus_ = input.readInt32();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              serverToken_ = input.readBytes();
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                mutation_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation>();
                mutable_bitField0_ |= 0x00000008;
              }
              mutation_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.PARSER, extensionRegistry));
              break;
            }
            case 40: {
              bitField0_ |= 0x00000008;
              hasMore_ = input.readBool();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000010;
              libraryId_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          mutation_ = java.util.Collections.unmodifiableList(mutation_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryUpdate_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryUpdate_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.class, com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.Builder.class);
    }

    public static com.google.protobuf.Parser<LibraryUpdate> PARSER =
        new com.google.protobuf.AbstractParser<LibraryUpdate>() {
      public LibraryUpdate parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new LibraryUpdate(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<LibraryUpdate> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 status = 1;
    public static final int STATUS_FIELD_NUMBER = 1;
    private int status_;
    /**
     * <code>optional int32 status = 1;</code>
     */
    public boolean hasStatus() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 status = 1;</code>
     */
    public int getStatus() {
      return status_;
    }

    // optional int32 corpus = 2;
    public static final int CORPUS_FIELD_NUMBER = 2;
    private int corpus_;
    /**
     * <code>optional int32 corpus = 2;</code>
     */
    public boolean hasCorpus() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 corpus = 2;</code>
     */
    public int getCorpus() {
      return corpus_;
    }

    // optional bytes serverToken = 3;
    public static final int SERVERTOKEN_FIELD_NUMBER = 3;
    private com.google.protobuf.ByteString serverToken_;
    /**
     * <code>optional bytes serverToken = 3;</code>
     */
    public boolean hasServerToken() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bytes serverToken = 3;</code>
     */
    public com.google.protobuf.ByteString getServerToken() {
      return serverToken_;
    }

    // repeated .LibraryMutation mutation = 4;
    public static final int MUTATION_FIELD_NUMBER = 4;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation> mutation_;
    /**
     * <code>repeated .LibraryMutation mutation = 4;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation> getMutationList() {
      return mutation_;
    }
    /**
     * <code>repeated .LibraryMutation mutation = 4;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutationOrBuilder> 
        getMutationOrBuilderList() {
      return mutation_;
    }
    /**
     * <code>repeated .LibraryMutation mutation = 4;</code>
     */
    public int getMutationCount() {
      return mutation_.size();
    }
    /**
     * <code>repeated .LibraryMutation mutation = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation getMutation(int index) {
      return mutation_.get(index);
    }
    /**
     * <code>repeated .LibraryMutation mutation = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutationOrBuilder getMutationOrBuilder(
        int index) {
      return mutation_.get(index);
    }

    // optional bool hasMore = 5;
    public static final int HASMORE_FIELD_NUMBER = 5;
    private boolean hasMore_;
    /**
     * <code>optional bool hasMore = 5;</code>
     */
    public boolean hasHasMore() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool hasMore = 5;</code>
     */
    public boolean getHasMore() {
      return hasMore_;
    }

    // optional string libraryId = 6;
    public static final int LIBRARYID_FIELD_NUMBER = 6;
    private java.lang.Object libraryId_;
    /**
     * <code>optional string libraryId = 6;</code>
     */
    public boolean hasLibraryId() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string libraryId = 6;</code>
     */
    public java.lang.String getLibraryId() {
      java.lang.Object ref = libraryId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          libraryId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string libraryId = 6;</code>
     */
    public com.google.protobuf.ByteString
        getLibraryIdBytes() {
      java.lang.Object ref = libraryId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        libraryId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      status_ = 0;
      corpus_ = 0;
      serverToken_ = com.google.protobuf.ByteString.EMPTY;
      mutation_ = java.util.Collections.emptyList();
      hasMore_ = false;
      libraryId_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, status_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, corpus_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, serverToken_);
      }
      for (int i = 0; i < mutation_.size(); i++) {
        output.writeMessage(4, mutation_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(5, hasMore_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(6, getLibraryIdBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, status_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, corpus_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, serverToken_);
      }
      for (int i = 0; i < mutation_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, mutation_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, hasMore_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getLibraryIdBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code LibraryUpdate}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryUpdate_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryUpdate_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.class, com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getMutationFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        status_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        corpus_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        serverToken_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000004);
        if (mutationBuilder_ == null) {
          mutation_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          mutationBuilder_.clear();
        }
        hasMore_ = false;
        bitField0_ = (bitField0_ & ~0x00000010);
        libraryId_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryUpdate_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate build() {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate result = new com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.status_ = status_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.corpus_ = corpus_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.serverToken_ = serverToken_;
        if (mutationBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            mutation_ = java.util.Collections.unmodifiableList(mutation_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.mutation_ = mutation_;
        } else {
          result.mutation_ = mutationBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000008;
        }
        result.hasMore_ = hasMore_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000010;
        }
        result.libraryId_ = libraryId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.getDefaultInstance()) return this;
        if (other.hasStatus()) {
          setStatus(other.getStatus());
        }
        if (other.hasCorpus()) {
          setCorpus(other.getCorpus());
        }
        if (other.hasServerToken()) {
          setServerToken(other.getServerToken());
        }
        if (mutationBuilder_ == null) {
          if (!other.mutation_.isEmpty()) {
            if (mutation_.isEmpty()) {
              mutation_ = other.mutation_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureMutationIsMutable();
              mutation_.addAll(other.mutation_);
            }
            onChanged();
          }
        } else {
          if (!other.mutation_.isEmpty()) {
            if (mutationBuilder_.isEmpty()) {
              mutationBuilder_.dispose();
              mutationBuilder_ = null;
              mutation_ = other.mutation_;
              bitField0_ = (bitField0_ & ~0x00000008);
              mutationBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getMutationFieldBuilder() : null;
            } else {
              mutationBuilder_.addAllMessages(other.mutation_);
            }
          }
        }
        if (other.hasHasMore()) {
          setHasMore(other.getHasMore());
        }
        if (other.hasLibraryId()) {
          bitField0_ |= 0x00000020;
          libraryId_ = other.libraryId_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 status = 1;
      private int status_ ;
      /**
       * <code>optional int32 status = 1;</code>
       */
      public boolean hasStatus() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 status = 1;</code>
       */
      public int getStatus() {
        return status_;
      }
      /**
       * <code>optional int32 status = 1;</code>
       */
      public Builder setStatus(int value) {
        bitField0_ |= 0x00000001;
        status_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 status = 1;</code>
       */
      public Builder clearStatus() {
        bitField0_ = (bitField0_ & ~0x00000001);
        status_ = 0;
        onChanged();
        return this;
      }

      // optional int32 corpus = 2;
      private int corpus_ ;
      /**
       * <code>optional int32 corpus = 2;</code>
       */
      public boolean hasCorpus() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 corpus = 2;</code>
       */
      public int getCorpus() {
        return corpus_;
      }
      /**
       * <code>optional int32 corpus = 2;</code>
       */
      public Builder setCorpus(int value) {
        bitField0_ |= 0x00000002;
        corpus_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 corpus = 2;</code>
       */
      public Builder clearCorpus() {
        bitField0_ = (bitField0_ & ~0x00000002);
        corpus_ = 0;
        onChanged();
        return this;
      }

      // optional bytes serverToken = 3;
      private com.google.protobuf.ByteString serverToken_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes serverToken = 3;</code>
       */
      public boolean hasServerToken() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bytes serverToken = 3;</code>
       */
      public com.google.protobuf.ByteString getServerToken() {
        return serverToken_;
      }
      /**
       * <code>optional bytes serverToken = 3;</code>
       */
      public Builder setServerToken(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        serverToken_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes serverToken = 3;</code>
       */
      public Builder clearServerToken() {
        bitField0_ = (bitField0_ & ~0x00000004);
        serverToken_ = getDefaultInstance().getServerToken();
        onChanged();
        return this;
      }

      // repeated .LibraryMutation mutation = 4;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation> mutation_ =
        java.util.Collections.emptyList();
      private void ensureMutationIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          mutation_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation>(mutation_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation, com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutationOrBuilder> mutationBuilder_;

      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation> getMutationList() {
        if (mutationBuilder_ == null) {
          return java.util.Collections.unmodifiableList(mutation_);
        } else {
          return mutationBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public int getMutationCount() {
        if (mutationBuilder_ == null) {
          return mutation_.size();
        } else {
          return mutationBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation getMutation(int index) {
        if (mutationBuilder_ == null) {
          return mutation_.get(index);
        } else {
          return mutationBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public Builder setMutation(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation value) {
        if (mutationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMutationIsMutable();
          mutation_.set(index, value);
          onChanged();
        } else {
          mutationBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public Builder setMutation(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.Builder builderForValue) {
        if (mutationBuilder_ == null) {
          ensureMutationIsMutable();
          mutation_.set(index, builderForValue.build());
          onChanged();
        } else {
          mutationBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public Builder addMutation(com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation value) {
        if (mutationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMutationIsMutable();
          mutation_.add(value);
          onChanged();
        } else {
          mutationBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public Builder addMutation(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation value) {
        if (mutationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMutationIsMutable();
          mutation_.add(index, value);
          onChanged();
        } else {
          mutationBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public Builder addMutation(
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.Builder builderForValue) {
        if (mutationBuilder_ == null) {
          ensureMutationIsMutable();
          mutation_.add(builderForValue.build());
          onChanged();
        } else {
          mutationBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public Builder addMutation(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.Builder builderForValue) {
        if (mutationBuilder_ == null) {
          ensureMutationIsMutable();
          mutation_.add(index, builderForValue.build());
          onChanged();
        } else {
          mutationBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public Builder addAllMutation(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation> values) {
        if (mutationBuilder_ == null) {
          ensureMutationIsMutable();
          super.addAll(values, mutation_);
          onChanged();
        } else {
          mutationBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public Builder clearMutation() {
        if (mutationBuilder_ == null) {
          mutation_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          mutationBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public Builder removeMutation(int index) {
        if (mutationBuilder_ == null) {
          ensureMutationIsMutable();
          mutation_.remove(index);
          onChanged();
        } else {
          mutationBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.Builder getMutationBuilder(
          int index) {
        return getMutationFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutationOrBuilder getMutationOrBuilder(
          int index) {
        if (mutationBuilder_ == null) {
          return mutation_.get(index);  } else {
          return mutationBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutationOrBuilder> 
           getMutationOrBuilderList() {
        if (mutationBuilder_ != null) {
          return mutationBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(mutation_);
        }
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.Builder addMutationBuilder() {
        return getMutationFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.getDefaultInstance());
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.Builder addMutationBuilder(
          int index) {
        return getMutationFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.getDefaultInstance());
      }
      /**
       * <code>repeated .LibraryMutation mutation = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.Builder> 
           getMutationBuilderList() {
        return getMutationFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation, com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutationOrBuilder> 
          getMutationFieldBuilder() {
        if (mutationBuilder_ == null) {
          mutationBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation, com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutation.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryMutationOrBuilder>(
                  mutation_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          mutation_ = null;
        }
        return mutationBuilder_;
      }

      // optional bool hasMore = 5;
      private boolean hasMore_ ;
      /**
       * <code>optional bool hasMore = 5;</code>
       */
      public boolean hasHasMore() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bool hasMore = 5;</code>
       */
      public boolean getHasMore() {
        return hasMore_;
      }
      /**
       * <code>optional bool hasMore = 5;</code>
       */
      public Builder setHasMore(boolean value) {
        bitField0_ |= 0x00000010;
        hasMore_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool hasMore = 5;</code>
       */
      public Builder clearHasMore() {
        bitField0_ = (bitField0_ & ~0x00000010);
        hasMore_ = false;
        onChanged();
        return this;
      }

      // optional string libraryId = 6;
      private java.lang.Object libraryId_ = "";
      /**
       * <code>optional string libraryId = 6;</code>
       */
      public boolean hasLibraryId() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional string libraryId = 6;</code>
       */
      public java.lang.String getLibraryId() {
        java.lang.Object ref = libraryId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          libraryId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string libraryId = 6;</code>
       */
      public com.google.protobuf.ByteString
          getLibraryIdBytes() {
        java.lang.Object ref = libraryId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          libraryId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string libraryId = 6;</code>
       */
      public Builder setLibraryId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        libraryId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string libraryId = 6;</code>
       */
      public Builder clearLibraryId() {
        bitField0_ = (bitField0_ & ~0x00000020);
        libraryId_ = getDefaultInstance().getLibraryId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string libraryId = 6;</code>
       */
      public Builder setLibraryIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        libraryId_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:LibraryUpdate)
    }

    static {
      defaultInstance = new LibraryUpdate(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:LibraryUpdate)
  }

  public interface AndroidAppNotificationDataOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 versionCode = 1;
    /**
     * <code>optional int32 versionCode = 1;</code>
     */
    boolean hasVersionCode();
    /**
     * <code>optional int32 versionCode = 1;</code>
     */
    int getVersionCode();

    // optional string assetId = 2;
    /**
     * <code>optional string assetId = 2;</code>
     */
    boolean hasAssetId();
    /**
     * <code>optional string assetId = 2;</code>
     */
    java.lang.String getAssetId();
    /**
     * <code>optional string assetId = 2;</code>
     */
    com.google.protobuf.ByteString
        getAssetIdBytes();
  }
  /**
   * Protobuf type {@code AndroidAppNotificationData}
   */
  public static final class AndroidAppNotificationData extends
      com.google.protobuf.GeneratedMessage
      implements AndroidAppNotificationDataOrBuilder {
    // Use AndroidAppNotificationData.newBuilder() to construct.
    private AndroidAppNotificationData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AndroidAppNotificationData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AndroidAppNotificationData defaultInstance;
    public static AndroidAppNotificationData getDefaultInstance() {
      return defaultInstance;
    }

    public AndroidAppNotificationData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AndroidAppNotificationData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              versionCode_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              assetId_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppNotificationData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppNotificationData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.Builder.class);
    }

    public static com.google.protobuf.Parser<AndroidAppNotificationData> PARSER =
        new com.google.protobuf.AbstractParser<AndroidAppNotificationData>() {
      public AndroidAppNotificationData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AndroidAppNotificationData(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AndroidAppNotificationData> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 versionCode = 1;
    public static final int VERSIONCODE_FIELD_NUMBER = 1;
    private int versionCode_;
    /**
     * <code>optional int32 versionCode = 1;</code>
     */
    public boolean hasVersionCode() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 versionCode = 1;</code>
     */
    public int getVersionCode() {
      return versionCode_;
    }

    // optional string assetId = 2;
    public static final int ASSETID_FIELD_NUMBER = 2;
    private java.lang.Object assetId_;
    /**
     * <code>optional string assetId = 2;</code>
     */
    public boolean hasAssetId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string assetId = 2;</code>
     */
    public java.lang.String getAssetId() {
      java.lang.Object ref = assetId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          assetId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string assetId = 2;</code>
     */
    public com.google.protobuf.ByteString
        getAssetIdBytes() {
      java.lang.Object ref = assetId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        assetId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      versionCode_ = 0;
      assetId_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, versionCode_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getAssetIdBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, versionCode_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getAssetIdBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AndroidAppNotificationData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppNotificationData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppNotificationData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        versionCode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        assetId_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidAppNotificationData_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData result = new com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.versionCode_ = versionCode_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.assetId_ = assetId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.getDefaultInstance()) return this;
        if (other.hasVersionCode()) {
          setVersionCode(other.getVersionCode());
        }
        if (other.hasAssetId()) {
          bitField0_ |= 0x00000002;
          assetId_ = other.assetId_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 versionCode = 1;
      private int versionCode_ ;
      /**
       * <code>optional int32 versionCode = 1;</code>
       */
      public boolean hasVersionCode() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 versionCode = 1;</code>
       */
      public int getVersionCode() {
        return versionCode_;
      }
      /**
       * <code>optional int32 versionCode = 1;</code>
       */
      public Builder setVersionCode(int value) {
        bitField0_ |= 0x00000001;
        versionCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 versionCode = 1;</code>
       */
      public Builder clearVersionCode() {
        bitField0_ = (bitField0_ & ~0x00000001);
        versionCode_ = 0;
        onChanged();
        return this;
      }

      // optional string assetId = 2;
      private java.lang.Object assetId_ = "";
      /**
       * <code>optional string assetId = 2;</code>
       */
      public boolean hasAssetId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string assetId = 2;</code>
       */
      public java.lang.String getAssetId() {
        java.lang.Object ref = assetId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          assetId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string assetId = 2;</code>
       */
      public com.google.protobuf.ByteString
          getAssetIdBytes() {
        java.lang.Object ref = assetId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          assetId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string assetId = 2;</code>
       */
      public Builder setAssetId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        assetId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string assetId = 2;</code>
       */
      public Builder clearAssetId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        assetId_ = getDefaultInstance().getAssetId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string assetId = 2;</code>
       */
      public Builder setAssetIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        assetId_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:AndroidAppNotificationData)
    }

    static {
      defaultInstance = new AndroidAppNotificationData(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:AndroidAppNotificationData)
  }

  public interface InAppNotificationDataOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string checkoutOrderId = 1;
    /**
     * <code>optional string checkoutOrderId = 1;</code>
     */
    boolean hasCheckoutOrderId();
    /**
     * <code>optional string checkoutOrderId = 1;</code>
     */
    java.lang.String getCheckoutOrderId();
    /**
     * <code>optional string checkoutOrderId = 1;</code>
     */
    com.google.protobuf.ByteString
        getCheckoutOrderIdBytes();

    // optional string inAppNotificationId = 2;
    /**
     * <code>optional string inAppNotificationId = 2;</code>
     */
    boolean hasInAppNotificationId();
    /**
     * <code>optional string inAppNotificationId = 2;</code>
     */
    java.lang.String getInAppNotificationId();
    /**
     * <code>optional string inAppNotificationId = 2;</code>
     */
    com.google.protobuf.ByteString
        getInAppNotificationIdBytes();
  }
  /**
   * Protobuf type {@code InAppNotificationData}
   */
  public static final class InAppNotificationData extends
      com.google.protobuf.GeneratedMessage
      implements InAppNotificationDataOrBuilder {
    // Use InAppNotificationData.newBuilder() to construct.
    private InAppNotificationData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private InAppNotificationData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final InAppNotificationData defaultInstance;
    public static InAppNotificationData getDefaultInstance() {
      return defaultInstance;
    }

    public InAppNotificationData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private InAppNotificationData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              checkoutOrderId_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              inAppNotificationId_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_InAppNotificationData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_InAppNotificationData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.class, com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.Builder.class);
    }

    public static com.google.protobuf.Parser<InAppNotificationData> PARSER =
        new com.google.protobuf.AbstractParser<InAppNotificationData>() {
      public InAppNotificationData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new InAppNotificationData(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<InAppNotificationData> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string checkoutOrderId = 1;
    public static final int CHECKOUTORDERID_FIELD_NUMBER = 1;
    private java.lang.Object checkoutOrderId_;
    /**
     * <code>optional string checkoutOrderId = 1;</code>
     */
    public boolean hasCheckoutOrderId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string checkoutOrderId = 1;</code>
     */
    public java.lang.String getCheckoutOrderId() {
      java.lang.Object ref = checkoutOrderId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          checkoutOrderId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string checkoutOrderId = 1;</code>
     */
    public com.google.protobuf.ByteString
        getCheckoutOrderIdBytes() {
      java.lang.Object ref = checkoutOrderId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        checkoutOrderId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string inAppNotificationId = 2;
    public static final int INAPPNOTIFICATIONID_FIELD_NUMBER = 2;
    private java.lang.Object inAppNotificationId_;
    /**
     * <code>optional string inAppNotificationId = 2;</code>
     */
    public boolean hasInAppNotificationId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string inAppNotificationId = 2;</code>
     */
    public java.lang.String getInAppNotificationId() {
      java.lang.Object ref = inAppNotificationId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          inAppNotificationId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string inAppNotificationId = 2;</code>
     */
    public com.google.protobuf.ByteString
        getInAppNotificationIdBytes() {
      java.lang.Object ref = inAppNotificationId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        inAppNotificationId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      checkoutOrderId_ = "";
      inAppNotificationId_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getCheckoutOrderIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getInAppNotificationIdBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getCheckoutOrderIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getInAppNotificationIdBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code InAppNotificationData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_InAppNotificationData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_InAppNotificationData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.class, com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        checkoutOrderId_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        inAppNotificationId_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_InAppNotificationData_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData build() {
        com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData result = new com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.checkoutOrderId_ = checkoutOrderId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.inAppNotificationId_ = inAppNotificationId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.getDefaultInstance()) return this;
        if (other.hasCheckoutOrderId()) {
          bitField0_ |= 0x00000001;
          checkoutOrderId_ = other.checkoutOrderId_;
          onChanged();
        }
        if (other.hasInAppNotificationId()) {
          bitField0_ |= 0x00000002;
          inAppNotificationId_ = other.inAppNotificationId_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string checkoutOrderId = 1;
      private java.lang.Object checkoutOrderId_ = "";
      /**
       * <code>optional string checkoutOrderId = 1;</code>
       */
      public boolean hasCheckoutOrderId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string checkoutOrderId = 1;</code>
       */
      public java.lang.String getCheckoutOrderId() {
        java.lang.Object ref = checkoutOrderId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          checkoutOrderId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string checkoutOrderId = 1;</code>
       */
      public com.google.protobuf.ByteString
          getCheckoutOrderIdBytes() {
        java.lang.Object ref = checkoutOrderId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          checkoutOrderId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string checkoutOrderId = 1;</code>
       */
      public Builder setCheckoutOrderId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        checkoutOrderId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string checkoutOrderId = 1;</code>
       */
      public Builder clearCheckoutOrderId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        checkoutOrderId_ = getDefaultInstance().getCheckoutOrderId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string checkoutOrderId = 1;</code>
       */
      public Builder setCheckoutOrderIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        checkoutOrderId_ = value;
        onChanged();
        return this;
      }

      // optional string inAppNotificationId = 2;
      private java.lang.Object inAppNotificationId_ = "";
      /**
       * <code>optional string inAppNotificationId = 2;</code>
       */
      public boolean hasInAppNotificationId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string inAppNotificationId = 2;</code>
       */
      public java.lang.String getInAppNotificationId() {
        java.lang.Object ref = inAppNotificationId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          inAppNotificationId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string inAppNotificationId = 2;</code>
       */
      public com.google.protobuf.ByteString
          getInAppNotificationIdBytes() {
        java.lang.Object ref = inAppNotificationId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          inAppNotificationId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string inAppNotificationId = 2;</code>
       */
      public Builder setInAppNotificationId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        inAppNotificationId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string inAppNotificationId = 2;</code>
       */
      public Builder clearInAppNotificationId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        inAppNotificationId_ = getDefaultInstance().getInAppNotificationId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string inAppNotificationId = 2;</code>
       */
      public Builder setInAppNotificationIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        inAppNotificationId_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:InAppNotificationData)
    }

    static {
      defaultInstance = new InAppNotificationData(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:InAppNotificationData)
  }

  public interface LibraryDirtyDataOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 backend = 1;
    /**
     * <code>optional int32 backend = 1;</code>
     */
    boolean hasBackend();
    /**
     * <code>optional int32 backend = 1;</code>
     */
    int getBackend();
  }
  /**
   * Protobuf type {@code LibraryDirtyData}
   */
  public static final class LibraryDirtyData extends
      com.google.protobuf.GeneratedMessage
      implements LibraryDirtyDataOrBuilder {
    // Use LibraryDirtyData.newBuilder() to construct.
    private LibraryDirtyData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private LibraryDirtyData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final LibraryDirtyData defaultInstance;
    public static LibraryDirtyData getDefaultInstance() {
      return defaultInstance;
    }

    public LibraryDirtyData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private LibraryDirtyData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              backend_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryDirtyData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryDirtyData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.class, com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.Builder.class);
    }

    public static com.google.protobuf.Parser<LibraryDirtyData> PARSER =
        new com.google.protobuf.AbstractParser<LibraryDirtyData>() {
      public LibraryDirtyData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new LibraryDirtyData(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<LibraryDirtyData> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 backend = 1;
    public static final int BACKEND_FIELD_NUMBER = 1;
    private int backend_;
    /**
     * <code>optional int32 backend = 1;</code>
     */
    public boolean hasBackend() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 backend = 1;</code>
     */
    public int getBackend() {
      return backend_;
    }

    private void initFields() {
      backend_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, backend_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, backend_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code LibraryDirtyData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryDirtyData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryDirtyData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.class, com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        backend_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_LibraryDirtyData_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData build() {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData result = new com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.backend_ = backend_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.getDefaultInstance()) return this;
        if (other.hasBackend()) {
          setBackend(other.getBackend());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 backend = 1;
      private int backend_ ;
      /**
       * <code>optional int32 backend = 1;</code>
       */
      public boolean hasBackend() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 backend = 1;</code>
       */
      public int getBackend() {
        return backend_;
      }
      /**
       * <code>optional int32 backend = 1;</code>
       */
      public Builder setBackend(int value) {
        bitField0_ |= 0x00000001;
        backend_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 backend = 1;</code>
       */
      public Builder clearBackend() {
        bitField0_ = (bitField0_ & ~0x00000001);
        backend_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:LibraryDirtyData)
    }

    static {
      defaultInstance = new LibraryDirtyData(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:LibraryDirtyData)
  }

  public interface NotificationOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 notificationType = 1;
    /**
     * <code>optional int32 notificationType = 1;</code>
     */
    boolean hasNotificationType();
    /**
     * <code>optional int32 notificationType = 1;</code>
     */
    int getNotificationType();

    // optional int64 timestamp = 3;
    /**
     * <code>optional int64 timestamp = 3;</code>
     */
    boolean hasTimestamp();
    /**
     * <code>optional int64 timestamp = 3;</code>
     */
    long getTimestamp();

    // optional .Docid docid = 4;
    /**
     * <code>optional .Docid docid = 4;</code>
     */
    boolean hasDocid();
    /**
     * <code>optional .Docid docid = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Docid getDocid();
    /**
     * <code>optional .Docid docid = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getDocidOrBuilder();

    // optional string docTitle = 5;
    /**
     * <code>optional string docTitle = 5;</code>
     */
    boolean hasDocTitle();
    /**
     * <code>optional string docTitle = 5;</code>
     */
    java.lang.String getDocTitle();
    /**
     * <code>optional string docTitle = 5;</code>
     */
    com.google.protobuf.ByteString
        getDocTitleBytes();

    // optional string userEmail = 6;
    /**
     * <code>optional string userEmail = 6;</code>
     */
    boolean hasUserEmail();
    /**
     * <code>optional string userEmail = 6;</code>
     */
    java.lang.String getUserEmail();
    /**
     * <code>optional string userEmail = 6;</code>
     */
    com.google.protobuf.ByteString
        getUserEmailBytes();

    // optional .AndroidAppNotificationData appData = 7;
    /**
     * <code>optional .AndroidAppNotificationData appData = 7;</code>
     */
    boolean hasAppData();
    /**
     * <code>optional .AndroidAppNotificationData appData = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData getAppData();
    /**
     * <code>optional .AndroidAppNotificationData appData = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationDataOrBuilder getAppDataOrBuilder();

    // optional .AndroidAppDeliveryData appDeliveryData = 8;
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
     */
    boolean hasAppDeliveryData();
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData getAppDeliveryData();
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder getAppDeliveryDataOrBuilder();

    // optional .PurchaseRemovalData purchaseRemovalData = 9;
    /**
     * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
     */
    boolean hasPurchaseRemovalData();
    /**
     * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData getPurchaseRemovalData();
    /**
     * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalDataOrBuilder getPurchaseRemovalDataOrBuilder();

    // optional .UserNotificationData userNotificationData = 10;
    /**
     * <code>optional .UserNotificationData userNotificationData = 10;</code>
     */
    boolean hasUserNotificationData();
    /**
     * <code>optional .UserNotificationData userNotificationData = 10;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData getUserNotificationData();
    /**
     * <code>optional .UserNotificationData userNotificationData = 10;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationDataOrBuilder getUserNotificationDataOrBuilder();

    // optional .InAppNotificationData inAppNotificationData = 11;
    /**
     * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
     */
    boolean hasInAppNotificationData();
    /**
     * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData getInAppNotificationData();
    /**
     * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationDataOrBuilder getInAppNotificationDataOrBuilder();

    // optional .PurchaseDeclinedData purchaseDeclinedData = 12;
    /**
     * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
     */
    boolean hasPurchaseDeclinedData();
    /**
     * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData getPurchaseDeclinedData();
    /**
     * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedDataOrBuilder getPurchaseDeclinedDataOrBuilder();

    // optional string notificationId = 13;
    /**
     * <code>optional string notificationId = 13;</code>
     */
    boolean hasNotificationId();
    /**
     * <code>optional string notificationId = 13;</code>
     */
    java.lang.String getNotificationId();
    /**
     * <code>optional string notificationId = 13;</code>
     */
    com.google.protobuf.ByteString
        getNotificationIdBytes();

    // optional .LibraryUpdate libraryUpdate = 14;
    /**
     * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
     */
    boolean hasLibraryUpdate();
    /**
     * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate getLibraryUpdate();
    /**
     * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdateOrBuilder getLibraryUpdateOrBuilder();

    // optional .LibraryDirtyData libraryDirtyData = 15;
    /**
     * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
     */
    boolean hasLibraryDirtyData();
    /**
     * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData getLibraryDirtyData();
    /**
     * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyDataOrBuilder getLibraryDirtyDataOrBuilder();
  }
  /**
   * Protobuf type {@code Notification}
   */
  public static final class Notification extends
      com.google.protobuf.GeneratedMessage
      implements NotificationOrBuilder {
    // Use Notification.newBuilder() to construct.
    private Notification(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Notification(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Notification defaultInstance;
    public static Notification getDefaultInstance() {
      return defaultInstance;
    }

    public Notification getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Notification(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              notificationType_ = input.readInt32();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000002;
              timestamp_ = input.readInt64();
              break;
            }
            case 34: {
              com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = docid_.toBuilder();
              }
              docid_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Docid.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(docid_);
                docid_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 42: {
              bitField0_ |= 0x00000008;
              docTitle_ = input.readBytes();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000010;
              userEmail_ = input.readBytes();
              break;
            }
            case 58: {
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = appData_.toBuilder();
              }
              appData_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(appData_);
                appData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 66: {
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = appDeliveryData_.toBuilder();
              }
              appDeliveryData_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(appDeliveryData_);
                appDeliveryData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 74: {
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = purchaseRemovalData_.toBuilder();
              }
              purchaseRemovalData_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(purchaseRemovalData_);
                purchaseRemovalData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 82: {
              com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = userNotificationData_.toBuilder();
              }
              userNotificationData_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(userNotificationData_);
                userNotificationData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 90: {
              com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.Builder subBuilder = null;
              if (((bitField0_ & 0x00000200) == 0x00000200)) {
                subBuilder = inAppNotificationData_.toBuilder();
              }
              inAppNotificationData_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(inAppNotificationData_);
                inAppNotificationData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000200;
              break;
            }
            case 98: {
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.Builder subBuilder = null;
              if (((bitField0_ & 0x00000400) == 0x00000400)) {
                subBuilder = purchaseDeclinedData_.toBuilder();
              }
              purchaseDeclinedData_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(purchaseDeclinedData_);
                purchaseDeclinedData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000400;
              break;
            }
            case 106: {
              bitField0_ |= 0x00000800;
              notificationId_ = input.readBytes();
              break;
            }
            case 114: {
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.Builder subBuilder = null;
              if (((bitField0_ & 0x00001000) == 0x00001000)) {
                subBuilder = libraryUpdate_.toBuilder();
              }
              libraryUpdate_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(libraryUpdate_);
                libraryUpdate_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00001000;
              break;
            }
            case 122: {
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.Builder subBuilder = null;
              if (((bitField0_ & 0x00002000) == 0x00002000)) {
                subBuilder = libraryDirtyData_.toBuilder();
              }
              libraryDirtyData_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(libraryDirtyData_);
                libraryDirtyData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00002000;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Notification_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Notification_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Notification.class, com.akdeniz.googleplaycrawler.GooglePlay.Notification.Builder.class);
    }

    public static com.google.protobuf.Parser<Notification> PARSER =
        new com.google.protobuf.AbstractParser<Notification>() {
      public Notification parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Notification(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Notification> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 notificationType = 1;
    public static final int NOTIFICATIONTYPE_FIELD_NUMBER = 1;
    private int notificationType_;
    /**
     * <code>optional int32 notificationType = 1;</code>
     */
    public boolean hasNotificationType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 notificationType = 1;</code>
     */
    public int getNotificationType() {
      return notificationType_;
    }

    // optional int64 timestamp = 3;
    public static final int TIMESTAMP_FIELD_NUMBER = 3;
    private long timestamp_;
    /**
     * <code>optional int64 timestamp = 3;</code>
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 timestamp = 3;</code>
     */
    public long getTimestamp() {
      return timestamp_;
    }

    // optional .Docid docid = 4;
    public static final int DOCID_FIELD_NUMBER = 4;
    private com.akdeniz.googleplaycrawler.GooglePlay.Docid docid_;
    /**
     * <code>optional .Docid docid = 4;</code>
     */
    public boolean hasDocid() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .Docid docid = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Docid getDocid() {
      return docid_;
    }
    /**
     * <code>optional .Docid docid = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getDocidOrBuilder() {
      return docid_;
    }

    // optional string docTitle = 5;
    public static final int DOCTITLE_FIELD_NUMBER = 5;
    private java.lang.Object docTitle_;
    /**
     * <code>optional string docTitle = 5;</code>
     */
    public boolean hasDocTitle() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string docTitle = 5;</code>
     */
    public java.lang.String getDocTitle() {
      java.lang.Object ref = docTitle_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          docTitle_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string docTitle = 5;</code>
     */
    public com.google.protobuf.ByteString
        getDocTitleBytes() {
      java.lang.Object ref = docTitle_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        docTitle_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string userEmail = 6;
    public static final int USEREMAIL_FIELD_NUMBER = 6;
    private java.lang.Object userEmail_;
    /**
     * <code>optional string userEmail = 6;</code>
     */
    public boolean hasUserEmail() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string userEmail = 6;</code>
     */
    public java.lang.String getUserEmail() {
      java.lang.Object ref = userEmail_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          userEmail_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string userEmail = 6;</code>
     */
    public com.google.protobuf.ByteString
        getUserEmailBytes() {
      java.lang.Object ref = userEmail_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        userEmail_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .AndroidAppNotificationData appData = 7;
    public static final int APPDATA_FIELD_NUMBER = 7;
    private com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData appData_;
    /**
     * <code>optional .AndroidAppNotificationData appData = 7;</code>
     */
    public boolean hasAppData() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .AndroidAppNotificationData appData = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData getAppData() {
      return appData_;
    }
    /**
     * <code>optional .AndroidAppNotificationData appData = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationDataOrBuilder getAppDataOrBuilder() {
      return appData_;
    }

    // optional .AndroidAppDeliveryData appDeliveryData = 8;
    public static final int APPDELIVERYDATA_FIELD_NUMBER = 8;
    private com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData appDeliveryData_;
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
     */
    public boolean hasAppDeliveryData() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData getAppDeliveryData() {
      return appDeliveryData_;
    }
    /**
     * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder getAppDeliveryDataOrBuilder() {
      return appDeliveryData_;
    }

    // optional .PurchaseRemovalData purchaseRemovalData = 9;
    public static final int PURCHASEREMOVALDATA_FIELD_NUMBER = 9;
    private com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData purchaseRemovalData_;
    /**
     * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
     */
    public boolean hasPurchaseRemovalData() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData getPurchaseRemovalData() {
      return purchaseRemovalData_;
    }
    /**
     * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalDataOrBuilder getPurchaseRemovalDataOrBuilder() {
      return purchaseRemovalData_;
    }

    // optional .UserNotificationData userNotificationData = 10;
    public static final int USERNOTIFICATIONDATA_FIELD_NUMBER = 10;
    private com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData userNotificationData_;
    /**
     * <code>optional .UserNotificationData userNotificationData = 10;</code>
     */
    public boolean hasUserNotificationData() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional .UserNotificationData userNotificationData = 10;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData getUserNotificationData() {
      return userNotificationData_;
    }
    /**
     * <code>optional .UserNotificationData userNotificationData = 10;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationDataOrBuilder getUserNotificationDataOrBuilder() {
      return userNotificationData_;
    }

    // optional .InAppNotificationData inAppNotificationData = 11;
    public static final int INAPPNOTIFICATIONDATA_FIELD_NUMBER = 11;
    private com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData inAppNotificationData_;
    /**
     * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
     */
    public boolean hasInAppNotificationData() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData getInAppNotificationData() {
      return inAppNotificationData_;
    }
    /**
     * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationDataOrBuilder getInAppNotificationDataOrBuilder() {
      return inAppNotificationData_;
    }

    // optional .PurchaseDeclinedData purchaseDeclinedData = 12;
    public static final int PURCHASEDECLINEDDATA_FIELD_NUMBER = 12;
    private com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData purchaseDeclinedData_;
    /**
     * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
     */
    public boolean hasPurchaseDeclinedData() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData getPurchaseDeclinedData() {
      return purchaseDeclinedData_;
    }
    /**
     * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedDataOrBuilder getPurchaseDeclinedDataOrBuilder() {
      return purchaseDeclinedData_;
    }

    // optional string notificationId = 13;
    public static final int NOTIFICATIONID_FIELD_NUMBER = 13;
    private java.lang.Object notificationId_;
    /**
     * <code>optional string notificationId = 13;</code>
     */
    public boolean hasNotificationId() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional string notificationId = 13;</code>
     */
    public java.lang.String getNotificationId() {
      java.lang.Object ref = notificationId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          notificationId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string notificationId = 13;</code>
     */
    public com.google.protobuf.ByteString
        getNotificationIdBytes() {
      java.lang.Object ref = notificationId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        notificationId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .LibraryUpdate libraryUpdate = 14;
    public static final int LIBRARYUPDATE_FIELD_NUMBER = 14;
    private com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate libraryUpdate_;
    /**
     * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
     */
    public boolean hasLibraryUpdate() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate getLibraryUpdate() {
      return libraryUpdate_;
    }
    /**
     * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdateOrBuilder getLibraryUpdateOrBuilder() {
      return libraryUpdate_;
    }

    // optional .LibraryDirtyData libraryDirtyData = 15;
    public static final int LIBRARYDIRTYDATA_FIELD_NUMBER = 15;
    private com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData libraryDirtyData_;
    /**
     * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
     */
    public boolean hasLibraryDirtyData() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData getLibraryDirtyData() {
      return libraryDirtyData_;
    }
    /**
     * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyDataOrBuilder getLibraryDirtyDataOrBuilder() {
      return libraryDirtyData_;
    }

    private void initFields() {
      notificationType_ = 0;
      timestamp_ = 0L;
      docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
      docTitle_ = "";
      userEmail_ = "";
      appData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.getDefaultInstance();
      appDeliveryData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance();
      purchaseRemovalData_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.getDefaultInstance();
      userNotificationData_ = com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.getDefaultInstance();
      inAppNotificationData_ = com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.getDefaultInstance();
      purchaseDeclinedData_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.getDefaultInstance();
      notificationId_ = "";
      libraryUpdate_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.getDefaultInstance();
      libraryDirtyData_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, notificationType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(3, timestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(4, docid_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(5, getDocTitleBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(6, getUserEmailBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(7, appData_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(8, appDeliveryData_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(9, purchaseRemovalData_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(10, userNotificationData_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeMessage(11, inAppNotificationData_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeMessage(12, purchaseDeclinedData_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeBytes(13, getNotificationIdBytes());
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeMessage(14, libraryUpdate_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeMessage(15, libraryDirtyData_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, notificationType_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, timestamp_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, docid_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getDocTitleBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getUserEmailBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, appData_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, appDeliveryData_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, purchaseRemovalData_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, userNotificationData_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, inAppNotificationData_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(12, purchaseDeclinedData_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(13, getNotificationIdBytes());
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(14, libraryUpdate_);
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, libraryDirtyData_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.Notification parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Notification parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Notification parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Notification parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Notification parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Notification parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Notification parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Notification parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Notification parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Notification parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Notification prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Notification}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.NotificationOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Notification_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Notification_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Notification.class, com.akdeniz.googleplaycrawler.GooglePlay.Notification.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Notification.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getDocidFieldBuilder();
          getAppDataFieldBuilder();
          getAppDeliveryDataFieldBuilder();
          getPurchaseRemovalDataFieldBuilder();
          getUserNotificationDataFieldBuilder();
          getInAppNotificationDataFieldBuilder();
          getPurchaseDeclinedDataFieldBuilder();
          getLibraryUpdateFieldBuilder();
          getLibraryDirtyDataFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        notificationType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (docidBuilder_ == null) {
          docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
        } else {
          docidBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        docTitle_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        userEmail_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        if (appDataBuilder_ == null) {
          appData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.getDefaultInstance();
        } else {
          appDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (appDeliveryDataBuilder_ == null) {
          appDeliveryData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance();
        } else {
          appDeliveryDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (purchaseRemovalDataBuilder_ == null) {
          purchaseRemovalData_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.getDefaultInstance();
        } else {
          purchaseRemovalDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        if (userNotificationDataBuilder_ == null) {
          userNotificationData_ = com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.getDefaultInstance();
        } else {
          userNotificationDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        if (inAppNotificationDataBuilder_ == null) {
          inAppNotificationData_ = com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.getDefaultInstance();
        } else {
          inAppNotificationDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        if (purchaseDeclinedDataBuilder_ == null) {
          purchaseDeclinedData_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.getDefaultInstance();
        } else {
          purchaseDeclinedDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        notificationId_ = "";
        bitField0_ = (bitField0_ & ~0x00000800);
        if (libraryUpdateBuilder_ == null) {
          libraryUpdate_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.getDefaultInstance();
        } else {
          libraryUpdateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00001000);
        if (libraryDirtyDataBuilder_ == null) {
          libraryDirtyData_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.getDefaultInstance();
        } else {
          libraryDirtyDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Notification_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Notification getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Notification.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Notification build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Notification result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Notification buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Notification result = new com.akdeniz.googleplaycrawler.GooglePlay.Notification(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.notificationType_ = notificationType_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.timestamp_ = timestamp_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (docidBuilder_ == null) {
          result.docid_ = docid_;
        } else {
          result.docid_ = docidBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.docTitle_ = docTitle_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.userEmail_ = userEmail_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (appDataBuilder_ == null) {
          result.appData_ = appData_;
        } else {
          result.appData_ = appDataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (appDeliveryDataBuilder_ == null) {
          result.appDeliveryData_ = appDeliveryData_;
        } else {
          result.appDeliveryData_ = appDeliveryDataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (purchaseRemovalDataBuilder_ == null) {
          result.purchaseRemovalData_ = purchaseRemovalData_;
        } else {
          result.purchaseRemovalData_ = purchaseRemovalDataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        if (userNotificationDataBuilder_ == null) {
          result.userNotificationData_ = userNotificationData_;
        } else {
          result.userNotificationData_ = userNotificationDataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        if (inAppNotificationDataBuilder_ == null) {
          result.inAppNotificationData_ = inAppNotificationData_;
        } else {
          result.inAppNotificationData_ = inAppNotificationDataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        if (purchaseDeclinedDataBuilder_ == null) {
          result.purchaseDeclinedData_ = purchaseDeclinedData_;
        } else {
          result.purchaseDeclinedData_ = purchaseDeclinedDataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        result.notificationId_ = notificationId_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        if (libraryUpdateBuilder_ == null) {
          result.libraryUpdate_ = libraryUpdate_;
        } else {
          result.libraryUpdate_ = libraryUpdateBuilder_.build();
        }
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00002000;
        }
        if (libraryDirtyDataBuilder_ == null) {
          result.libraryDirtyData_ = libraryDirtyData_;
        } else {
          result.libraryDirtyData_ = libraryDirtyDataBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Notification) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Notification)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Notification other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Notification.getDefaultInstance()) return this;
        if (other.hasNotificationType()) {
          setNotificationType(other.getNotificationType());
        }
        if (other.hasTimestamp()) {
          setTimestamp(other.getTimestamp());
        }
        if (other.hasDocid()) {
          mergeDocid(other.getDocid());
        }
        if (other.hasDocTitle()) {
          bitField0_ |= 0x00000008;
          docTitle_ = other.docTitle_;
          onChanged();
        }
        if (other.hasUserEmail()) {
          bitField0_ |= 0x00000010;
          userEmail_ = other.userEmail_;
          onChanged();
        }
        if (other.hasAppData()) {
          mergeAppData(other.getAppData());
        }
        if (other.hasAppDeliveryData()) {
          mergeAppDeliveryData(other.getAppDeliveryData());
        }
        if (other.hasPurchaseRemovalData()) {
          mergePurchaseRemovalData(other.getPurchaseRemovalData());
        }
        if (other.hasUserNotificationData()) {
          mergeUserNotificationData(other.getUserNotificationData());
        }
        if (other.hasInAppNotificationData()) {
          mergeInAppNotificationData(other.getInAppNotificationData());
        }
        if (other.hasPurchaseDeclinedData()) {
          mergePurchaseDeclinedData(other.getPurchaseDeclinedData());
        }
        if (other.hasNotificationId()) {
          bitField0_ |= 0x00000800;
          notificationId_ = other.notificationId_;
          onChanged();
        }
        if (other.hasLibraryUpdate()) {
          mergeLibraryUpdate(other.getLibraryUpdate());
        }
        if (other.hasLibraryDirtyData()) {
          mergeLibraryDirtyData(other.getLibraryDirtyData());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.Notification parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.Notification) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 notificationType = 1;
      private int notificationType_ ;
      /**
       * <code>optional int32 notificationType = 1;</code>
       */
      public boolean hasNotificationType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 notificationType = 1;</code>
       */
      public int getNotificationType() {
        return notificationType_;
      }
      /**
       * <code>optional int32 notificationType = 1;</code>
       */
      public Builder setNotificationType(int value) {
        bitField0_ |= 0x00000001;
        notificationType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 notificationType = 1;</code>
       */
      public Builder clearNotificationType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        notificationType_ = 0;
        onChanged();
        return this;
      }

      // optional int64 timestamp = 3;
      private long timestamp_ ;
      /**
       * <code>optional int64 timestamp = 3;</code>
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 timestamp = 3;</code>
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <code>optional int64 timestamp = 3;</code>
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000002;
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 timestamp = 3;</code>
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000002);
        timestamp_ = 0L;
        onChanged();
        return this;
      }

      // optional .Docid docid = 4;
      private com.akdeniz.googleplaycrawler.GooglePlay.Docid docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder> docidBuilder_;
      /**
       * <code>optional .Docid docid = 4;</code>
       */
      public boolean hasDocid() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .Docid docid = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Docid getDocid() {
        if (docidBuilder_ == null) {
          return docid_;
        } else {
          return docidBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Docid docid = 4;</code>
       */
      public Builder setDocid(com.akdeniz.googleplaycrawler.GooglePlay.Docid value) {
        if (docidBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          docid_ = value;
          onChanged();
        } else {
          docidBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Docid docid = 4;</code>
       */
      public Builder setDocid(
          com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder builderForValue) {
        if (docidBuilder_ == null) {
          docid_ = builderForValue.build();
          onChanged();
        } else {
          docidBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Docid docid = 4;</code>
       */
      public Builder mergeDocid(com.akdeniz.googleplaycrawler.GooglePlay.Docid value) {
        if (docidBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              docid_ != com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance()) {
            docid_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Docid.newBuilder(docid_).mergeFrom(value).buildPartial();
          } else {
            docid_ = value;
          }
          onChanged();
        } else {
          docidBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .Docid docid = 4;</code>
       */
      public Builder clearDocid() {
        if (docidBuilder_ == null) {
          docid_ = com.akdeniz.googleplaycrawler.GooglePlay.Docid.getDefaultInstance();
          onChanged();
        } else {
          docidBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .Docid docid = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder getDocidBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getDocidFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Docid docid = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder getDocidOrBuilder() {
        if (docidBuilder_ != null) {
          return docidBuilder_.getMessageOrBuilder();
        } else {
          return docid_;
        }
      }
      /**
       * <code>optional .Docid docid = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder> 
          getDocidFieldBuilder() {
        if (docidBuilder_ == null) {
          docidBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Docid, com.akdeniz.googleplaycrawler.GooglePlay.Docid.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocidOrBuilder>(
                  docid_,
                  getParentForChildren(),
                  isClean());
          docid_ = null;
        }
        return docidBuilder_;
      }

      // optional string docTitle = 5;
      private java.lang.Object docTitle_ = "";
      /**
       * <code>optional string docTitle = 5;</code>
       */
      public boolean hasDocTitle() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string docTitle = 5;</code>
       */
      public java.lang.String getDocTitle() {
        java.lang.Object ref = docTitle_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          docTitle_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string docTitle = 5;</code>
       */
      public com.google.protobuf.ByteString
          getDocTitleBytes() {
        java.lang.Object ref = docTitle_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          docTitle_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string docTitle = 5;</code>
       */
      public Builder setDocTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        docTitle_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string docTitle = 5;</code>
       */
      public Builder clearDocTitle() {
        bitField0_ = (bitField0_ & ~0x00000008);
        docTitle_ = getDefaultInstance().getDocTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string docTitle = 5;</code>
       */
      public Builder setDocTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        docTitle_ = value;
        onChanged();
        return this;
      }

      // optional string userEmail = 6;
      private java.lang.Object userEmail_ = "";
      /**
       * <code>optional string userEmail = 6;</code>
       */
      public boolean hasUserEmail() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string userEmail = 6;</code>
       */
      public java.lang.String getUserEmail() {
        java.lang.Object ref = userEmail_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          userEmail_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string userEmail = 6;</code>
       */
      public com.google.protobuf.ByteString
          getUserEmailBytes() {
        java.lang.Object ref = userEmail_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          userEmail_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string userEmail = 6;</code>
       */
      public Builder setUserEmail(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        userEmail_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string userEmail = 6;</code>
       */
      public Builder clearUserEmail() {
        bitField0_ = (bitField0_ & ~0x00000010);
        userEmail_ = getDefaultInstance().getUserEmail();
        onChanged();
        return this;
      }
      /**
       * <code>optional string userEmail = 6;</code>
       */
      public Builder setUserEmailBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        userEmail_ = value;
        onChanged();
        return this;
      }

      // optional .AndroidAppNotificationData appData = 7;
      private com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData appData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationDataOrBuilder> appDataBuilder_;
      /**
       * <code>optional .AndroidAppNotificationData appData = 7;</code>
       */
      public boolean hasAppData() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .AndroidAppNotificationData appData = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData getAppData() {
        if (appDataBuilder_ == null) {
          return appData_;
        } else {
          return appDataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AndroidAppNotificationData appData = 7;</code>
       */
      public Builder setAppData(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData value) {
        if (appDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          appData_ = value;
          onChanged();
        } else {
          appDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .AndroidAppNotificationData appData = 7;</code>
       */
      public Builder setAppData(
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.Builder builderForValue) {
        if (appDataBuilder_ == null) {
          appData_ = builderForValue.build();
          onChanged();
        } else {
          appDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .AndroidAppNotificationData appData = 7;</code>
       */
      public Builder mergeAppData(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData value) {
        if (appDataBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              appData_ != com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.getDefaultInstance()) {
            appData_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.newBuilder(appData_).mergeFrom(value).buildPartial();
          } else {
            appData_ = value;
          }
          onChanged();
        } else {
          appDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .AndroidAppNotificationData appData = 7;</code>
       */
      public Builder clearAppData() {
        if (appDataBuilder_ == null) {
          appData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.getDefaultInstance();
          onChanged();
        } else {
          appDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .AndroidAppNotificationData appData = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.Builder getAppDataBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getAppDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AndroidAppNotificationData appData = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationDataOrBuilder getAppDataOrBuilder() {
        if (appDataBuilder_ != null) {
          return appDataBuilder_.getMessageOrBuilder();
        } else {
          return appData_;
        }
      }
      /**
       * <code>optional .AndroidAppNotificationData appData = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationDataOrBuilder> 
          getAppDataFieldBuilder() {
        if (appDataBuilder_ == null) {
          appDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppNotificationDataOrBuilder>(
                  appData_,
                  getParentForChildren(),
                  isClean());
          appData_ = null;
        }
        return appDataBuilder_;
      }

      // optional .AndroidAppDeliveryData appDeliveryData = 8;
      private com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData appDeliveryData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder> appDeliveryDataBuilder_;
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public boolean hasAppDeliveryData() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData getAppDeliveryData() {
        if (appDeliveryDataBuilder_ == null) {
          return appDeliveryData_;
        } else {
          return appDeliveryDataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public Builder setAppDeliveryData(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData value) {
        if (appDeliveryDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          appDeliveryData_ = value;
          onChanged();
        } else {
          appDeliveryDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public Builder setAppDeliveryData(
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder builderForValue) {
        if (appDeliveryDataBuilder_ == null) {
          appDeliveryData_ = builderForValue.build();
          onChanged();
        } else {
          appDeliveryDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public Builder mergeAppDeliveryData(com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData value) {
        if (appDeliveryDataBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              appDeliveryData_ != com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance()) {
            appDeliveryData_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.newBuilder(appDeliveryData_).mergeFrom(value).buildPartial();
          } else {
            appDeliveryData_ = value;
          }
          onChanged();
        } else {
          appDeliveryDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public Builder clearAppDeliveryData() {
        if (appDeliveryDataBuilder_ == null) {
          appDeliveryData_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.getDefaultInstance();
          onChanged();
        } else {
          appDeliveryDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder getAppDeliveryDataBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getAppDeliveryDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder getAppDeliveryDataOrBuilder() {
        if (appDeliveryDataBuilder_ != null) {
          return appDeliveryDataBuilder_.getMessageOrBuilder();
        } else {
          return appDeliveryData_;
        }
      }
      /**
       * <code>optional .AndroidAppDeliveryData appDeliveryData = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder> 
          getAppDeliveryDataFieldBuilder() {
        if (appDeliveryDataBuilder_ == null) {
          appDeliveryDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidAppDeliveryDataOrBuilder>(
                  appDeliveryData_,
                  getParentForChildren(),
                  isClean());
          appDeliveryData_ = null;
        }
        return appDeliveryDataBuilder_;
      }

      // optional .PurchaseRemovalData purchaseRemovalData = 9;
      private com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData purchaseRemovalData_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalDataOrBuilder> purchaseRemovalDataBuilder_;
      /**
       * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
       */
      public boolean hasPurchaseRemovalData() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData getPurchaseRemovalData() {
        if (purchaseRemovalDataBuilder_ == null) {
          return purchaseRemovalData_;
        } else {
          return purchaseRemovalDataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
       */
      public Builder setPurchaseRemovalData(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData value) {
        if (purchaseRemovalDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          purchaseRemovalData_ = value;
          onChanged();
        } else {
          purchaseRemovalDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
       */
      public Builder setPurchaseRemovalData(
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.Builder builderForValue) {
        if (purchaseRemovalDataBuilder_ == null) {
          purchaseRemovalData_ = builderForValue.build();
          onChanged();
        } else {
          purchaseRemovalDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
       */
      public Builder mergePurchaseRemovalData(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData value) {
        if (purchaseRemovalDataBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              purchaseRemovalData_ != com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.getDefaultInstance()) {
            purchaseRemovalData_ =
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.newBuilder(purchaseRemovalData_).mergeFrom(value).buildPartial();
          } else {
            purchaseRemovalData_ = value;
          }
          onChanged();
        } else {
          purchaseRemovalDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
       */
      public Builder clearPurchaseRemovalData() {
        if (purchaseRemovalDataBuilder_ == null) {
          purchaseRemovalData_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.getDefaultInstance();
          onChanged();
        } else {
          purchaseRemovalDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.Builder getPurchaseRemovalDataBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getPurchaseRemovalDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalDataOrBuilder getPurchaseRemovalDataOrBuilder() {
        if (purchaseRemovalDataBuilder_ != null) {
          return purchaseRemovalDataBuilder_.getMessageOrBuilder();
        } else {
          return purchaseRemovalData_;
        }
      }
      /**
       * <code>optional .PurchaseRemovalData purchaseRemovalData = 9;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalDataOrBuilder> 
          getPurchaseRemovalDataFieldBuilder() {
        if (purchaseRemovalDataBuilder_ == null) {
          purchaseRemovalDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalDataOrBuilder>(
                  purchaseRemovalData_,
                  getParentForChildren(),
                  isClean());
          purchaseRemovalData_ = null;
        }
        return purchaseRemovalDataBuilder_;
      }

      // optional .UserNotificationData userNotificationData = 10;
      private com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData userNotificationData_ = com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData, com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationDataOrBuilder> userNotificationDataBuilder_;
      /**
       * <code>optional .UserNotificationData userNotificationData = 10;</code>
       */
      public boolean hasUserNotificationData() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional .UserNotificationData userNotificationData = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData getUserNotificationData() {
        if (userNotificationDataBuilder_ == null) {
          return userNotificationData_;
        } else {
          return userNotificationDataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .UserNotificationData userNotificationData = 10;</code>
       */
      public Builder setUserNotificationData(com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData value) {
        if (userNotificationDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          userNotificationData_ = value;
          onChanged();
        } else {
          userNotificationDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .UserNotificationData userNotificationData = 10;</code>
       */
      public Builder setUserNotificationData(
          com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.Builder builderForValue) {
        if (userNotificationDataBuilder_ == null) {
          userNotificationData_ = builderForValue.build();
          onChanged();
        } else {
          userNotificationDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .UserNotificationData userNotificationData = 10;</code>
       */
      public Builder mergeUserNotificationData(com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData value) {
        if (userNotificationDataBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              userNotificationData_ != com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.getDefaultInstance()) {
            userNotificationData_ =
              com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.newBuilder(userNotificationData_).mergeFrom(value).buildPartial();
          } else {
            userNotificationData_ = value;
          }
          onChanged();
        } else {
          userNotificationDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .UserNotificationData userNotificationData = 10;</code>
       */
      public Builder clearUserNotificationData() {
        if (userNotificationDataBuilder_ == null) {
          userNotificationData_ = com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.getDefaultInstance();
          onChanged();
        } else {
          userNotificationDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       * <code>optional .UserNotificationData userNotificationData = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.Builder getUserNotificationDataBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getUserNotificationDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .UserNotificationData userNotificationData = 10;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationDataOrBuilder getUserNotificationDataOrBuilder() {
        if (userNotificationDataBuilder_ != null) {
          return userNotificationDataBuilder_.getMessageOrBuilder();
        } else {
          return userNotificationData_;
        }
      }
      /**
       * <code>optional .UserNotificationData userNotificationData = 10;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData, com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationDataOrBuilder> 
          getUserNotificationDataFieldBuilder() {
        if (userNotificationDataBuilder_ == null) {
          userNotificationDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData, com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationDataOrBuilder>(
                  userNotificationData_,
                  getParentForChildren(),
                  isClean());
          userNotificationData_ = null;
        }
        return userNotificationDataBuilder_;
      }

      // optional .InAppNotificationData inAppNotificationData = 11;
      private com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData inAppNotificationData_ = com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData, com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationDataOrBuilder> inAppNotificationDataBuilder_;
      /**
       * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
       */
      public boolean hasInAppNotificationData() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData getInAppNotificationData() {
        if (inAppNotificationDataBuilder_ == null) {
          return inAppNotificationData_;
        } else {
          return inAppNotificationDataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
       */
      public Builder setInAppNotificationData(com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData value) {
        if (inAppNotificationDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          inAppNotificationData_ = value;
          onChanged();
        } else {
          inAppNotificationDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
       */
      public Builder setInAppNotificationData(
          com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.Builder builderForValue) {
        if (inAppNotificationDataBuilder_ == null) {
          inAppNotificationData_ = builderForValue.build();
          onChanged();
        } else {
          inAppNotificationDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
       */
      public Builder mergeInAppNotificationData(com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData value) {
        if (inAppNotificationDataBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200) &&
              inAppNotificationData_ != com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.getDefaultInstance()) {
            inAppNotificationData_ =
              com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.newBuilder(inAppNotificationData_).mergeFrom(value).buildPartial();
          } else {
            inAppNotificationData_ = value;
          }
          onChanged();
        } else {
          inAppNotificationDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
       */
      public Builder clearInAppNotificationData() {
        if (inAppNotificationDataBuilder_ == null) {
          inAppNotificationData_ = com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.getDefaultInstance();
          onChanged();
        } else {
          inAppNotificationDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      /**
       * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.Builder getInAppNotificationDataBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getInAppNotificationDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationDataOrBuilder getInAppNotificationDataOrBuilder() {
        if (inAppNotificationDataBuilder_ != null) {
          return inAppNotificationDataBuilder_.getMessageOrBuilder();
        } else {
          return inAppNotificationData_;
        }
      }
      /**
       * <code>optional .InAppNotificationData inAppNotificationData = 11;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData, com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationDataOrBuilder> 
          getInAppNotificationDataFieldBuilder() {
        if (inAppNotificationDataBuilder_ == null) {
          inAppNotificationDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData, com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.InAppNotificationDataOrBuilder>(
                  inAppNotificationData_,
                  getParentForChildren(),
                  isClean());
          inAppNotificationData_ = null;
        }
        return inAppNotificationDataBuilder_;
      }

      // optional .PurchaseDeclinedData purchaseDeclinedData = 12;
      private com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData purchaseDeclinedData_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedDataOrBuilder> purchaseDeclinedDataBuilder_;
      /**
       * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
       */
      public boolean hasPurchaseDeclinedData() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData getPurchaseDeclinedData() {
        if (purchaseDeclinedDataBuilder_ == null) {
          return purchaseDeclinedData_;
        } else {
          return purchaseDeclinedDataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
       */
      public Builder setPurchaseDeclinedData(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData value) {
        if (purchaseDeclinedDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          purchaseDeclinedData_ = value;
          onChanged();
        } else {
          purchaseDeclinedDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
       */
      public Builder setPurchaseDeclinedData(
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.Builder builderForValue) {
        if (purchaseDeclinedDataBuilder_ == null) {
          purchaseDeclinedData_ = builderForValue.build();
          onChanged();
        } else {
          purchaseDeclinedDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
       */
      public Builder mergePurchaseDeclinedData(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData value) {
        if (purchaseDeclinedDataBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400) &&
              purchaseDeclinedData_ != com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.getDefaultInstance()) {
            purchaseDeclinedData_ =
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.newBuilder(purchaseDeclinedData_).mergeFrom(value).buildPartial();
          } else {
            purchaseDeclinedData_ = value;
          }
          onChanged();
        } else {
          purchaseDeclinedDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
       */
      public Builder clearPurchaseDeclinedData() {
        if (purchaseDeclinedDataBuilder_ == null) {
          purchaseDeclinedData_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.getDefaultInstance();
          onChanged();
        } else {
          purchaseDeclinedDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }
      /**
       * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.Builder getPurchaseDeclinedDataBuilder() {
        bitField0_ |= 0x00000400;
        onChanged();
        return getPurchaseDeclinedDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedDataOrBuilder getPurchaseDeclinedDataOrBuilder() {
        if (purchaseDeclinedDataBuilder_ != null) {
          return purchaseDeclinedDataBuilder_.getMessageOrBuilder();
        } else {
          return purchaseDeclinedData_;
        }
      }
      /**
       * <code>optional .PurchaseDeclinedData purchaseDeclinedData = 12;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedDataOrBuilder> 
          getPurchaseDeclinedDataFieldBuilder() {
        if (purchaseDeclinedDataBuilder_ == null) {
          purchaseDeclinedDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedDataOrBuilder>(
                  purchaseDeclinedData_,
                  getParentForChildren(),
                  isClean());
          purchaseDeclinedData_ = null;
        }
        return purchaseDeclinedDataBuilder_;
      }

      // optional string notificationId = 13;
      private java.lang.Object notificationId_ = "";
      /**
       * <code>optional string notificationId = 13;</code>
       */
      public boolean hasNotificationId() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional string notificationId = 13;</code>
       */
      public java.lang.String getNotificationId() {
        java.lang.Object ref = notificationId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          notificationId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string notificationId = 13;</code>
       */
      public com.google.protobuf.ByteString
          getNotificationIdBytes() {
        java.lang.Object ref = notificationId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          notificationId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string notificationId = 13;</code>
       */
      public Builder setNotificationId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        notificationId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string notificationId = 13;</code>
       */
      public Builder clearNotificationId() {
        bitField0_ = (bitField0_ & ~0x00000800);
        notificationId_ = getDefaultInstance().getNotificationId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string notificationId = 13;</code>
       */
      public Builder setNotificationIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        notificationId_ = value;
        onChanged();
        return this;
      }

      // optional .LibraryUpdate libraryUpdate = 14;
      private com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate libraryUpdate_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate, com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdateOrBuilder> libraryUpdateBuilder_;
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
       */
      public boolean hasLibraryUpdate() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate getLibraryUpdate() {
        if (libraryUpdateBuilder_ == null) {
          return libraryUpdate_;
        } else {
          return libraryUpdateBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
       */
      public Builder setLibraryUpdate(com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate value) {
        if (libraryUpdateBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          libraryUpdate_ = value;
          onChanged();
        } else {
          libraryUpdateBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
       */
      public Builder setLibraryUpdate(
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.Builder builderForValue) {
        if (libraryUpdateBuilder_ == null) {
          libraryUpdate_ = builderForValue.build();
          onChanged();
        } else {
          libraryUpdateBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
       */
      public Builder mergeLibraryUpdate(com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate value) {
        if (libraryUpdateBuilder_ == null) {
          if (((bitField0_ & 0x00001000) == 0x00001000) &&
              libraryUpdate_ != com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.getDefaultInstance()) {
            libraryUpdate_ =
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.newBuilder(libraryUpdate_).mergeFrom(value).buildPartial();
          } else {
            libraryUpdate_ = value;
          }
          onChanged();
        } else {
          libraryUpdateBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
       */
      public Builder clearLibraryUpdate() {
        if (libraryUpdateBuilder_ == null) {
          libraryUpdate_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.getDefaultInstance();
          onChanged();
        } else {
          libraryUpdateBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00001000);
        return this;
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.Builder getLibraryUpdateBuilder() {
        bitField0_ |= 0x00001000;
        onChanged();
        return getLibraryUpdateFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdateOrBuilder getLibraryUpdateOrBuilder() {
        if (libraryUpdateBuilder_ != null) {
          return libraryUpdateBuilder_.getMessageOrBuilder();
        } else {
          return libraryUpdate_;
        }
      }
      /**
       * <code>optional .LibraryUpdate libraryUpdate = 14;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate, com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdateOrBuilder> 
          getLibraryUpdateFieldBuilder() {
        if (libraryUpdateBuilder_ == null) {
          libraryUpdateBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate, com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdate.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryUpdateOrBuilder>(
                  libraryUpdate_,
                  getParentForChildren(),
                  isClean());
          libraryUpdate_ = null;
        }
        return libraryUpdateBuilder_;
      }

      // optional .LibraryDirtyData libraryDirtyData = 15;
      private com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData libraryDirtyData_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData, com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyDataOrBuilder> libraryDirtyDataBuilder_;
      /**
       * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
       */
      public boolean hasLibraryDirtyData() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData getLibraryDirtyData() {
        if (libraryDirtyDataBuilder_ == null) {
          return libraryDirtyData_;
        } else {
          return libraryDirtyDataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
       */
      public Builder setLibraryDirtyData(com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData value) {
        if (libraryDirtyDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          libraryDirtyData_ = value;
          onChanged();
        } else {
          libraryDirtyDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
       */
      public Builder setLibraryDirtyData(
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.Builder builderForValue) {
        if (libraryDirtyDataBuilder_ == null) {
          libraryDirtyData_ = builderForValue.build();
          onChanged();
        } else {
          libraryDirtyDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
       */
      public Builder mergeLibraryDirtyData(com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData value) {
        if (libraryDirtyDataBuilder_ == null) {
          if (((bitField0_ & 0x00002000) == 0x00002000) &&
              libraryDirtyData_ != com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.getDefaultInstance()) {
            libraryDirtyData_ =
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.newBuilder(libraryDirtyData_).mergeFrom(value).buildPartial();
          } else {
            libraryDirtyData_ = value;
          }
          onChanged();
        } else {
          libraryDirtyDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00002000;
        return this;
      }
      /**
       * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
       */
      public Builder clearLibraryDirtyData() {
        if (libraryDirtyDataBuilder_ == null) {
          libraryDirtyData_ = com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.getDefaultInstance();
          onChanged();
        } else {
          libraryDirtyDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }
      /**
       * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.Builder getLibraryDirtyDataBuilder() {
        bitField0_ |= 0x00002000;
        onChanged();
        return getLibraryDirtyDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyDataOrBuilder getLibraryDirtyDataOrBuilder() {
        if (libraryDirtyDataBuilder_ != null) {
          return libraryDirtyDataBuilder_.getMessageOrBuilder();
        } else {
          return libraryDirtyData_;
        }
      }
      /**
       * <code>optional .LibraryDirtyData libraryDirtyData = 15;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData, com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyDataOrBuilder> 
          getLibraryDirtyDataFieldBuilder() {
        if (libraryDirtyDataBuilder_ == null) {
          libraryDirtyDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData, com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.LibraryDirtyDataOrBuilder>(
                  libraryDirtyData_,
                  getParentForChildren(),
                  isClean());
          libraryDirtyData_ = null;
        }
        return libraryDirtyDataBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Notification)
    }

    static {
      defaultInstance = new Notification(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Notification)
  }

  public interface PurchaseDeclinedDataOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 reason = 1;
    /**
     * <code>optional int32 reason = 1;</code>
     */
    boolean hasReason();
    /**
     * <code>optional int32 reason = 1;</code>
     */
    int getReason();

    // optional bool showNotification = 2;
    /**
     * <code>optional bool showNotification = 2;</code>
     */
    boolean hasShowNotification();
    /**
     * <code>optional bool showNotification = 2;</code>
     */
    boolean getShowNotification();
  }
  /**
   * Protobuf type {@code PurchaseDeclinedData}
   */
  public static final class PurchaseDeclinedData extends
      com.google.protobuf.GeneratedMessage
      implements PurchaseDeclinedDataOrBuilder {
    // Use PurchaseDeclinedData.newBuilder() to construct.
    private PurchaseDeclinedData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PurchaseDeclinedData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final PurchaseDeclinedData defaultInstance;
    public static PurchaseDeclinedData getDefaultInstance() {
      return defaultInstance;
    }

    public PurchaseDeclinedData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private PurchaseDeclinedData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              reason_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              showNotification_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseDeclinedData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseDeclinedData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.class, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.Builder.class);
    }

    public static com.google.protobuf.Parser<PurchaseDeclinedData> PARSER =
        new com.google.protobuf.AbstractParser<PurchaseDeclinedData>() {
      public PurchaseDeclinedData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new PurchaseDeclinedData(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<PurchaseDeclinedData> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 reason = 1;
    public static final int REASON_FIELD_NUMBER = 1;
    private int reason_;
    /**
     * <code>optional int32 reason = 1;</code>
     */
    public boolean hasReason() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 reason = 1;</code>
     */
    public int getReason() {
      return reason_;
    }

    // optional bool showNotification = 2;
    public static final int SHOWNOTIFICATION_FIELD_NUMBER = 2;
    private boolean showNotification_;
    /**
     * <code>optional bool showNotification = 2;</code>
     */
    public boolean hasShowNotification() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bool showNotification = 2;</code>
     */
    public boolean getShowNotification() {
      return showNotification_;
    }

    private void initFields() {
      reason_ = 0;
      showNotification_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, reason_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, showNotification_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, reason_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, showNotification_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code PurchaseDeclinedData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseDeclinedData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseDeclinedData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.class, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        reason_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        showNotification_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseDeclinedData_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData build() {
        com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData result = new com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.reason_ = reason_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.showNotification_ = showNotification_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData.getDefaultInstance()) return this;
        if (other.hasReason()) {
          setReason(other.getReason());
        }
        if (other.hasShowNotification()) {
          setShowNotification(other.getShowNotification());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.PurchaseDeclinedData) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 reason = 1;
      private int reason_ ;
      /**
       * <code>optional int32 reason = 1;</code>
       */
      public boolean hasReason() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 reason = 1;</code>
       */
      public int getReason() {
        return reason_;
      }
      /**
       * <code>optional int32 reason = 1;</code>
       */
      public Builder setReason(int value) {
        bitField0_ |= 0x00000001;
        reason_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 reason = 1;</code>
       */
      public Builder clearReason() {
        bitField0_ = (bitField0_ & ~0x00000001);
        reason_ = 0;
        onChanged();
        return this;
      }

      // optional bool showNotification = 2;
      private boolean showNotification_ ;
      /**
       * <code>optional bool showNotification = 2;</code>
       */
      public boolean hasShowNotification() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bool showNotification = 2;</code>
       */
      public boolean getShowNotification() {
        return showNotification_;
      }
      /**
       * <code>optional bool showNotification = 2;</code>
       */
      public Builder setShowNotification(boolean value) {
        bitField0_ |= 0x00000002;
        showNotification_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool showNotification = 2;</code>
       */
      public Builder clearShowNotification() {
        bitField0_ = (bitField0_ & ~0x00000002);
        showNotification_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:PurchaseDeclinedData)
    }

    static {
      defaultInstance = new PurchaseDeclinedData(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:PurchaseDeclinedData)
  }

  public interface PurchaseRemovalDataOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool malicious = 1;
    /**
     * <code>optional bool malicious = 1;</code>
     */
    boolean hasMalicious();
    /**
     * <code>optional bool malicious = 1;</code>
     */
    boolean getMalicious();
  }
  /**
   * Protobuf type {@code PurchaseRemovalData}
   */
  public static final class PurchaseRemovalData extends
      com.google.protobuf.GeneratedMessage
      implements PurchaseRemovalDataOrBuilder {
    // Use PurchaseRemovalData.newBuilder() to construct.
    private PurchaseRemovalData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PurchaseRemovalData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final PurchaseRemovalData defaultInstance;
    public static PurchaseRemovalData getDefaultInstance() {
      return defaultInstance;
    }

    public PurchaseRemovalData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private PurchaseRemovalData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              malicious_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseRemovalData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseRemovalData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.class, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.Builder.class);
    }

    public static com.google.protobuf.Parser<PurchaseRemovalData> PARSER =
        new com.google.protobuf.AbstractParser<PurchaseRemovalData>() {
      public PurchaseRemovalData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new PurchaseRemovalData(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<PurchaseRemovalData> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool malicious = 1;
    public static final int MALICIOUS_FIELD_NUMBER = 1;
    private boolean malicious_;
    /**
     * <code>optional bool malicious = 1;</code>
     */
    public boolean hasMalicious() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool malicious = 1;</code>
     */
    public boolean getMalicious() {
      return malicious_;
    }

    private void initFields() {
      malicious_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, malicious_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, malicious_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code PurchaseRemovalData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseRemovalData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseRemovalData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.class, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        malicious_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PurchaseRemovalData_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData build() {
        com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData result = new com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.malicious_ = malicious_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData.getDefaultInstance()) return this;
        if (other.hasMalicious()) {
          setMalicious(other.getMalicious());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.PurchaseRemovalData) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool malicious = 1;
      private boolean malicious_ ;
      /**
       * <code>optional bool malicious = 1;</code>
       */
      public boolean hasMalicious() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bool malicious = 1;</code>
       */
      public boolean getMalicious() {
        return malicious_;
      }
      /**
       * <code>optional bool malicious = 1;</code>
       */
      public Builder setMalicious(boolean value) {
        bitField0_ |= 0x00000001;
        malicious_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool malicious = 1;</code>
       */
      public Builder clearMalicious() {
        bitField0_ = (bitField0_ & ~0x00000001);
        malicious_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:PurchaseRemovalData)
    }

    static {
      defaultInstance = new PurchaseRemovalData(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:PurchaseRemovalData)
  }

  public interface UserNotificationDataOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string notificationTitle = 1;
    /**
     * <code>optional string notificationTitle = 1;</code>
     */
    boolean hasNotificationTitle();
    /**
     * <code>optional string notificationTitle = 1;</code>
     */
    java.lang.String getNotificationTitle();
    /**
     * <code>optional string notificationTitle = 1;</code>
     */
    com.google.protobuf.ByteString
        getNotificationTitleBytes();

    // optional string notificationText = 2;
    /**
     * <code>optional string notificationText = 2;</code>
     */
    boolean hasNotificationText();
    /**
     * <code>optional string notificationText = 2;</code>
     */
    java.lang.String getNotificationText();
    /**
     * <code>optional string notificationText = 2;</code>
     */
    com.google.protobuf.ByteString
        getNotificationTextBytes();

    // optional string tickerText = 3;
    /**
     * <code>optional string tickerText = 3;</code>
     */
    boolean hasTickerText();
    /**
     * <code>optional string tickerText = 3;</code>
     */
    java.lang.String getTickerText();
    /**
     * <code>optional string tickerText = 3;</code>
     */
    com.google.protobuf.ByteString
        getTickerTextBytes();

    // optional string dialogTitle = 4;
    /**
     * <code>optional string dialogTitle = 4;</code>
     */
    boolean hasDialogTitle();
    /**
     * <code>optional string dialogTitle = 4;</code>
     */
    java.lang.String getDialogTitle();
    /**
     * <code>optional string dialogTitle = 4;</code>
     */
    com.google.protobuf.ByteString
        getDialogTitleBytes();

    // optional string dialogText = 5;
    /**
     * <code>optional string dialogText = 5;</code>
     */
    boolean hasDialogText();
    /**
     * <code>optional string dialogText = 5;</code>
     */
    java.lang.String getDialogText();
    /**
     * <code>optional string dialogText = 5;</code>
     */
    com.google.protobuf.ByteString
        getDialogTextBytes();
  }
  /**
   * Protobuf type {@code UserNotificationData}
   */
  public static final class UserNotificationData extends
      com.google.protobuf.GeneratedMessage
      implements UserNotificationDataOrBuilder {
    // Use UserNotificationData.newBuilder() to construct.
    private UserNotificationData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private UserNotificationData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final UserNotificationData defaultInstance;
    public static UserNotificationData getDefaultInstance() {
      return defaultInstance;
    }

    public UserNotificationData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private UserNotificationData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              notificationTitle_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              notificationText_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              tickerText_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              dialogTitle_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              dialogText_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UserNotificationData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UserNotificationData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.class, com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.Builder.class);
    }

    public static com.google.protobuf.Parser<UserNotificationData> PARSER =
        new com.google.protobuf.AbstractParser<UserNotificationData>() {
      public UserNotificationData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UserNotificationData(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<UserNotificationData> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string notificationTitle = 1;
    public static final int NOTIFICATIONTITLE_FIELD_NUMBER = 1;
    private java.lang.Object notificationTitle_;
    /**
     * <code>optional string notificationTitle = 1;</code>
     */
    public boolean hasNotificationTitle() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string notificationTitle = 1;</code>
     */
    public java.lang.String getNotificationTitle() {
      java.lang.Object ref = notificationTitle_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          notificationTitle_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string notificationTitle = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNotificationTitleBytes() {
      java.lang.Object ref = notificationTitle_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        notificationTitle_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string notificationText = 2;
    public static final int NOTIFICATIONTEXT_FIELD_NUMBER = 2;
    private java.lang.Object notificationText_;
    /**
     * <code>optional string notificationText = 2;</code>
     */
    public boolean hasNotificationText() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string notificationText = 2;</code>
     */
    public java.lang.String getNotificationText() {
      java.lang.Object ref = notificationText_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          notificationText_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string notificationText = 2;</code>
     */
    public com.google.protobuf.ByteString
        getNotificationTextBytes() {
      java.lang.Object ref = notificationText_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        notificationText_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string tickerText = 3;
    public static final int TICKERTEXT_FIELD_NUMBER = 3;
    private java.lang.Object tickerText_;
    /**
     * <code>optional string tickerText = 3;</code>
     */
    public boolean hasTickerText() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string tickerText = 3;</code>
     */
    public java.lang.String getTickerText() {
      java.lang.Object ref = tickerText_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          tickerText_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string tickerText = 3;</code>
     */
    public com.google.protobuf.ByteString
        getTickerTextBytes() {
      java.lang.Object ref = tickerText_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        tickerText_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string dialogTitle = 4;
    public static final int DIALOGTITLE_FIELD_NUMBER = 4;
    private java.lang.Object dialogTitle_;
    /**
     * <code>optional string dialogTitle = 4;</code>
     */
    public boolean hasDialogTitle() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string dialogTitle = 4;</code>
     */
    public java.lang.String getDialogTitle() {
      java.lang.Object ref = dialogTitle_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          dialogTitle_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string dialogTitle = 4;</code>
     */
    public com.google.protobuf.ByteString
        getDialogTitleBytes() {
      java.lang.Object ref = dialogTitle_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        dialogTitle_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string dialogText = 5;
    public static final int DIALOGTEXT_FIELD_NUMBER = 5;
    private java.lang.Object dialogText_;
    /**
     * <code>optional string dialogText = 5;</code>
     */
    public boolean hasDialogText() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string dialogText = 5;</code>
     */
    public java.lang.String getDialogText() {
      java.lang.Object ref = dialogText_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          dialogText_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string dialogText = 5;</code>
     */
    public com.google.protobuf.ByteString
        getDialogTextBytes() {
      java.lang.Object ref = dialogText_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        dialogText_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      notificationTitle_ = "";
      notificationText_ = "";
      tickerText_ = "";
      dialogTitle_ = "";
      dialogText_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNotificationTitleBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getNotificationTextBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getTickerTextBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getDialogTitleBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getDialogTextBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNotificationTitleBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getNotificationTextBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getTickerTextBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getDialogTitleBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getDialogTextBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code UserNotificationData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UserNotificationData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UserNotificationData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.class, com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        notificationTitle_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        notificationText_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        tickerText_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        dialogTitle_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        dialogText_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UserNotificationData_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData build() {
        com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData result = new com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.notificationTitle_ = notificationTitle_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.notificationText_ = notificationText_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.tickerText_ = tickerText_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.dialogTitle_ = dialogTitle_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.dialogText_ = dialogText_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData.getDefaultInstance()) return this;
        if (other.hasNotificationTitle()) {
          bitField0_ |= 0x00000001;
          notificationTitle_ = other.notificationTitle_;
          onChanged();
        }
        if (other.hasNotificationText()) {
          bitField0_ |= 0x00000002;
          notificationText_ = other.notificationText_;
          onChanged();
        }
        if (other.hasTickerText()) {
          bitField0_ |= 0x00000004;
          tickerText_ = other.tickerText_;
          onChanged();
        }
        if (other.hasDialogTitle()) {
          bitField0_ |= 0x00000008;
          dialogTitle_ = other.dialogTitle_;
          onChanged();
        }
        if (other.hasDialogText()) {
          bitField0_ |= 0x00000010;
          dialogText_ = other.dialogText_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.UserNotificationData) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string notificationTitle = 1;
      private java.lang.Object notificationTitle_ = "";
      /**
       * <code>optional string notificationTitle = 1;</code>
       */
      public boolean hasNotificationTitle() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string notificationTitle = 1;</code>
       */
      public java.lang.String getNotificationTitle() {
        java.lang.Object ref = notificationTitle_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          notificationTitle_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string notificationTitle = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNotificationTitleBytes() {
        java.lang.Object ref = notificationTitle_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          notificationTitle_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string notificationTitle = 1;</code>
       */
      public Builder setNotificationTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        notificationTitle_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string notificationTitle = 1;</code>
       */
      public Builder clearNotificationTitle() {
        bitField0_ = (bitField0_ & ~0x00000001);
        notificationTitle_ = getDefaultInstance().getNotificationTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string notificationTitle = 1;</code>
       */
      public Builder setNotificationTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        notificationTitle_ = value;
        onChanged();
        return this;
      }

      // optional string notificationText = 2;
      private java.lang.Object notificationText_ = "";
      /**
       * <code>optional string notificationText = 2;</code>
       */
      public boolean hasNotificationText() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string notificationText = 2;</code>
       */
      public java.lang.String getNotificationText() {
        java.lang.Object ref = notificationText_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          notificationText_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string notificationText = 2;</code>
       */
      public com.google.protobuf.ByteString
          getNotificationTextBytes() {
        java.lang.Object ref = notificationText_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          notificationText_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string notificationText = 2;</code>
       */
      public Builder setNotificationText(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        notificationText_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string notificationText = 2;</code>
       */
      public Builder clearNotificationText() {
        bitField0_ = (bitField0_ & ~0x00000002);
        notificationText_ = getDefaultInstance().getNotificationText();
        onChanged();
        return this;
      }
      /**
       * <code>optional string notificationText = 2;</code>
       */
      public Builder setNotificationTextBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        notificationText_ = value;
        onChanged();
        return this;
      }

      // optional string tickerText = 3;
      private java.lang.Object tickerText_ = "";
      /**
       * <code>optional string tickerText = 3;</code>
       */
      public boolean hasTickerText() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string tickerText = 3;</code>
       */
      public java.lang.String getTickerText() {
        java.lang.Object ref = tickerText_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          tickerText_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string tickerText = 3;</code>
       */
      public com.google.protobuf.ByteString
          getTickerTextBytes() {
        java.lang.Object ref = tickerText_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          tickerText_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string tickerText = 3;</code>
       */
      public Builder setTickerText(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        tickerText_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string tickerText = 3;</code>
       */
      public Builder clearTickerText() {
        bitField0_ = (bitField0_ & ~0x00000004);
        tickerText_ = getDefaultInstance().getTickerText();
        onChanged();
        return this;
      }
      /**
       * <code>optional string tickerText = 3;</code>
       */
      public Builder setTickerTextBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        tickerText_ = value;
        onChanged();
        return this;
      }

      // optional string dialogTitle = 4;
      private java.lang.Object dialogTitle_ = "";
      /**
       * <code>optional string dialogTitle = 4;</code>
       */
      public boolean hasDialogTitle() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string dialogTitle = 4;</code>
       */
      public java.lang.String getDialogTitle() {
        java.lang.Object ref = dialogTitle_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          dialogTitle_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string dialogTitle = 4;</code>
       */
      public com.google.protobuf.ByteString
          getDialogTitleBytes() {
        java.lang.Object ref = dialogTitle_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          dialogTitle_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string dialogTitle = 4;</code>
       */
      public Builder setDialogTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        dialogTitle_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string dialogTitle = 4;</code>
       */
      public Builder clearDialogTitle() {
        bitField0_ = (bitField0_ & ~0x00000008);
        dialogTitle_ = getDefaultInstance().getDialogTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string dialogTitle = 4;</code>
       */
      public Builder setDialogTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        dialogTitle_ = value;
        onChanged();
        return this;
      }

      // optional string dialogText = 5;
      private java.lang.Object dialogText_ = "";
      /**
       * <code>optional string dialogText = 5;</code>
       */
      public boolean hasDialogText() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string dialogText = 5;</code>
       */
      public java.lang.String getDialogText() {
        java.lang.Object ref = dialogText_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          dialogText_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string dialogText = 5;</code>
       */
      public com.google.protobuf.ByteString
          getDialogTextBytes() {
        java.lang.Object ref = dialogText_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          dialogText_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string dialogText = 5;</code>
       */
      public Builder setDialogText(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        dialogText_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string dialogText = 5;</code>
       */
      public Builder clearDialogText() {
        bitField0_ = (bitField0_ & ~0x00000010);
        dialogText_ = getDefaultInstance().getDialogText();
        onChanged();
        return this;
      }
      /**
       * <code>optional string dialogText = 5;</code>
       */
      public Builder setDialogTextBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        dialogText_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:UserNotificationData)
    }

    static {
      defaultInstance = new UserNotificationData(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:UserNotificationData)
  }

  public interface AggregateRatingOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 type = 1;
    /**
     * <code>optional int32 type = 1;</code>
     */
    boolean hasType();
    /**
     * <code>optional int32 type = 1;</code>
     */
    int getType();

    // optional float starRating = 2;
    /**
     * <code>optional float starRating = 2;</code>
     */
    boolean hasStarRating();
    /**
     * <code>optional float starRating = 2;</code>
     */
    float getStarRating();

    // optional uint64 ratingsCount = 3;
    /**
     * <code>optional uint64 ratingsCount = 3;</code>
     */
    boolean hasRatingsCount();
    /**
     * <code>optional uint64 ratingsCount = 3;</code>
     */
    long getRatingsCount();

    // optional uint64 oneStarRatings = 4;
    /**
     * <code>optional uint64 oneStarRatings = 4;</code>
     */
    boolean hasOneStarRatings();
    /**
     * <code>optional uint64 oneStarRatings = 4;</code>
     */
    long getOneStarRatings();

    // optional uint64 twoStarRatings = 5;
    /**
     * <code>optional uint64 twoStarRatings = 5;</code>
     */
    boolean hasTwoStarRatings();
    /**
     * <code>optional uint64 twoStarRatings = 5;</code>
     */
    long getTwoStarRatings();

    // optional uint64 threeStarRatings = 6;
    /**
     * <code>optional uint64 threeStarRatings = 6;</code>
     */
    boolean hasThreeStarRatings();
    /**
     * <code>optional uint64 threeStarRatings = 6;</code>
     */
    long getThreeStarRatings();

    // optional uint64 fourStarRatings = 7;
    /**
     * <code>optional uint64 fourStarRatings = 7;</code>
     */
    boolean hasFourStarRatings();
    /**
     * <code>optional uint64 fourStarRatings = 7;</code>
     */
    long getFourStarRatings();

    // optional uint64 fiveStarRatings = 8;
    /**
     * <code>optional uint64 fiveStarRatings = 8;</code>
     */
    boolean hasFiveStarRatings();
    /**
     * <code>optional uint64 fiveStarRatings = 8;</code>
     */
    long getFiveStarRatings();

    // optional uint64 thumbsUpCount = 9;
    /**
     * <code>optional uint64 thumbsUpCount = 9;</code>
     */
    boolean hasThumbsUpCount();
    /**
     * <code>optional uint64 thumbsUpCount = 9;</code>
     */
    long getThumbsUpCount();

    // optional uint64 thumbsDownCount = 10;
    /**
     * <code>optional uint64 thumbsDownCount = 10;</code>
     */
    boolean hasThumbsDownCount();
    /**
     * <code>optional uint64 thumbsDownCount = 10;</code>
     */
    long getThumbsDownCount();

    // optional uint64 commentCount = 11;
    /**
     * <code>optional uint64 commentCount = 11;</code>
     */
    boolean hasCommentCount();
    /**
     * <code>optional uint64 commentCount = 11;</code>
     */
    long getCommentCount();

    // optional double bayesianMeanRating = 12;
    /**
     * <code>optional double bayesianMeanRating = 12;</code>
     */
    boolean hasBayesianMeanRating();
    /**
     * <code>optional double bayesianMeanRating = 12;</code>
     */
    double getBayesianMeanRating();
  }
  /**
   * Protobuf type {@code AggregateRating}
   */
  public static final class AggregateRating extends
      com.google.protobuf.GeneratedMessage
      implements AggregateRatingOrBuilder {
    // Use AggregateRating.newBuilder() to construct.
    private AggregateRating(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AggregateRating(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AggregateRating defaultInstance;
    public static AggregateRating getDefaultInstance() {
      return defaultInstance;
    }

    public AggregateRating getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AggregateRating(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              type_ = input.readInt32();
              break;
            }
            case 21: {
              bitField0_ |= 0x00000002;
              starRating_ = input.readFloat();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              ratingsCount_ = input.readUInt64();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              oneStarRatings_ = input.readUInt64();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              twoStarRatings_ = input.readUInt64();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              threeStarRatings_ = input.readUInt64();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              fourStarRatings_ = input.readUInt64();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000080;
              fiveStarRatings_ = input.readUInt64();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000100;
              thumbsUpCount_ = input.readUInt64();
              break;
            }
            case 80: {
              bitField0_ |= 0x00000200;
              thumbsDownCount_ = input.readUInt64();
              break;
            }
            case 88: {
              bitField0_ |= 0x00000400;
              commentCount_ = input.readUInt64();
              break;
            }
            case 97: {
              bitField0_ |= 0x00000800;
              bayesianMeanRating_ = input.readDouble();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AggregateRating_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AggregateRating_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.class, com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.Builder.class);
    }

    public static com.google.protobuf.Parser<AggregateRating> PARSER =
        new com.google.protobuf.AbstractParser<AggregateRating>() {
      public AggregateRating parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AggregateRating(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AggregateRating> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 type = 1;
    public static final int TYPE_FIELD_NUMBER = 1;
    private int type_;
    /**
     * <code>optional int32 type = 1;</code>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 type = 1;</code>
     */
    public int getType() {
      return type_;
    }

    // optional float starRating = 2;
    public static final int STARRATING_FIELD_NUMBER = 2;
    private float starRating_;
    /**
     * <code>optional float starRating = 2;</code>
     */
    public boolean hasStarRating() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional float starRating = 2;</code>
     */
    public float getStarRating() {
      return starRating_;
    }

    // optional uint64 ratingsCount = 3;
    public static final int RATINGSCOUNT_FIELD_NUMBER = 3;
    private long ratingsCount_;
    /**
     * <code>optional uint64 ratingsCount = 3;</code>
     */
    public boolean hasRatingsCount() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional uint64 ratingsCount = 3;</code>
     */
    public long getRatingsCount() {
      return ratingsCount_;
    }

    // optional uint64 oneStarRatings = 4;
    public static final int ONESTARRATINGS_FIELD_NUMBER = 4;
    private long oneStarRatings_;
    /**
     * <code>optional uint64 oneStarRatings = 4;</code>
     */
    public boolean hasOneStarRatings() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional uint64 oneStarRatings = 4;</code>
     */
    public long getOneStarRatings() {
      return oneStarRatings_;
    }

    // optional uint64 twoStarRatings = 5;
    public static final int TWOSTARRATINGS_FIELD_NUMBER = 5;
    private long twoStarRatings_;
    /**
     * <code>optional uint64 twoStarRatings = 5;</code>
     */
    public boolean hasTwoStarRatings() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional uint64 twoStarRatings = 5;</code>
     */
    public long getTwoStarRatings() {
      return twoStarRatings_;
    }

    // optional uint64 threeStarRatings = 6;
    public static final int THREESTARRATINGS_FIELD_NUMBER = 6;
    private long threeStarRatings_;
    /**
     * <code>optional uint64 threeStarRatings = 6;</code>
     */
    public boolean hasThreeStarRatings() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional uint64 threeStarRatings = 6;</code>
     */
    public long getThreeStarRatings() {
      return threeStarRatings_;
    }

    // optional uint64 fourStarRatings = 7;
    public static final int FOURSTARRATINGS_FIELD_NUMBER = 7;
    private long fourStarRatings_;
    /**
     * <code>optional uint64 fourStarRatings = 7;</code>
     */
    public boolean hasFourStarRatings() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional uint64 fourStarRatings = 7;</code>
     */
    public long getFourStarRatings() {
      return fourStarRatings_;
    }

    // optional uint64 fiveStarRatings = 8;
    public static final int FIVESTARRATINGS_FIELD_NUMBER = 8;
    private long fiveStarRatings_;
    /**
     * <code>optional uint64 fiveStarRatings = 8;</code>
     */
    public boolean hasFiveStarRatings() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional uint64 fiveStarRatings = 8;</code>
     */
    public long getFiveStarRatings() {
      return fiveStarRatings_;
    }

    // optional uint64 thumbsUpCount = 9;
    public static final int THUMBSUPCOUNT_FIELD_NUMBER = 9;
    private long thumbsUpCount_;
    /**
     * <code>optional uint64 thumbsUpCount = 9;</code>
     */
    public boolean hasThumbsUpCount() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional uint64 thumbsUpCount = 9;</code>
     */
    public long getThumbsUpCount() {
      return thumbsUpCount_;
    }

    // optional uint64 thumbsDownCount = 10;
    public static final int THUMBSDOWNCOUNT_FIELD_NUMBER = 10;
    private long thumbsDownCount_;
    /**
     * <code>optional uint64 thumbsDownCount = 10;</code>
     */
    public boolean hasThumbsDownCount() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional uint64 thumbsDownCount = 10;</code>
     */
    public long getThumbsDownCount() {
      return thumbsDownCount_;
    }

    // optional uint64 commentCount = 11;
    public static final int COMMENTCOUNT_FIELD_NUMBER = 11;
    private long commentCount_;
    /**
     * <code>optional uint64 commentCount = 11;</code>
     */
    public boolean hasCommentCount() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional uint64 commentCount = 11;</code>
     */
    public long getCommentCount() {
      return commentCount_;
    }

    // optional double bayesianMeanRating = 12;
    public static final int BAYESIANMEANRATING_FIELD_NUMBER = 12;
    private double bayesianMeanRating_;
    /**
     * <code>optional double bayesianMeanRating = 12;</code>
     */
    public boolean hasBayesianMeanRating() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional double bayesianMeanRating = 12;</code>
     */
    public double getBayesianMeanRating() {
      return bayesianMeanRating_;
    }

    private void initFields() {
      type_ = 0;
      starRating_ = 0F;
      ratingsCount_ = 0L;
      oneStarRatings_ = 0L;
      twoStarRatings_ = 0L;
      threeStarRatings_ = 0L;
      fourStarRatings_ = 0L;
      fiveStarRatings_ = 0L;
      thumbsUpCount_ = 0L;
      thumbsDownCount_ = 0L;
      commentCount_ = 0L;
      bayesianMeanRating_ = 0D;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, type_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeFloat(2, starRating_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeUInt64(3, ratingsCount_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeUInt64(4, oneStarRatings_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeUInt64(5, twoStarRatings_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeUInt64(6, threeStarRatings_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeUInt64(7, fourStarRatings_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeUInt64(8, fiveStarRatings_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeUInt64(9, thumbsUpCount_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeUInt64(10, thumbsDownCount_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeUInt64(11, commentCount_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeDouble(12, bayesianMeanRating_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, type_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(2, starRating_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(3, ratingsCount_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(4, oneStarRatings_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(5, twoStarRatings_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(6, threeStarRatings_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(7, fourStarRatings_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(8, fiveStarRatings_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(9, thumbsUpCount_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(10, thumbsDownCount_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(11, commentCount_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(12, bayesianMeanRating_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AggregateRating}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AggregateRatingOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AggregateRating_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AggregateRating_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.class, com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        type_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        starRating_ = 0F;
        bitField0_ = (bitField0_ & ~0x00000002);
        ratingsCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        oneStarRatings_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        twoStarRatings_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        threeStarRatings_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000020);
        fourStarRatings_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        fiveStarRatings_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000080);
        thumbsUpCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000100);
        thumbsDownCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000200);
        commentCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000400);
        bayesianMeanRating_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000800);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AggregateRating_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating result = new com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.type_ = type_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.starRating_ = starRating_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.ratingsCount_ = ratingsCount_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.oneStarRatings_ = oneStarRatings_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.twoStarRatings_ = twoStarRatings_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.threeStarRatings_ = threeStarRatings_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.fourStarRatings_ = fourStarRatings_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.fiveStarRatings_ = fiveStarRatings_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.thumbsUpCount_ = thumbsUpCount_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.thumbsDownCount_ = thumbsDownCount_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.commentCount_ = commentCount_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        result.bayesianMeanRating_ = bayesianMeanRating_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating.getDefaultInstance()) return this;
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasStarRating()) {
          setStarRating(other.getStarRating());
        }
        if (other.hasRatingsCount()) {
          setRatingsCount(other.getRatingsCount());
        }
        if (other.hasOneStarRatings()) {
          setOneStarRatings(other.getOneStarRatings());
        }
        if (other.hasTwoStarRatings()) {
          setTwoStarRatings(other.getTwoStarRatings());
        }
        if (other.hasThreeStarRatings()) {
          setThreeStarRatings(other.getThreeStarRatings());
        }
        if (other.hasFourStarRatings()) {
          setFourStarRatings(other.getFourStarRatings());
        }
        if (other.hasFiveStarRatings()) {
          setFiveStarRatings(other.getFiveStarRatings());
        }
        if (other.hasThumbsUpCount()) {
          setThumbsUpCount(other.getThumbsUpCount());
        }
        if (other.hasThumbsDownCount()) {
          setThumbsDownCount(other.getThumbsDownCount());
        }
        if (other.hasCommentCount()) {
          setCommentCount(other.getCommentCount());
        }
        if (other.hasBayesianMeanRating()) {
          setBayesianMeanRating(other.getBayesianMeanRating());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.AggregateRating) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 type = 1;
      private int type_ ;
      /**
       * <code>optional int32 type = 1;</code>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 type = 1;</code>
       */
      public int getType() {
        return type_;
      }
      /**
       * <code>optional int32 type = 1;</code>
       */
      public Builder setType(int value) {
        bitField0_ |= 0x00000001;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 type = 1;</code>
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = 0;
        onChanged();
        return this;
      }

      // optional float starRating = 2;
      private float starRating_ ;
      /**
       * <code>optional float starRating = 2;</code>
       */
      public boolean hasStarRating() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional float starRating = 2;</code>
       */
      public float getStarRating() {
        return starRating_;
      }
      /**
       * <code>optional float starRating = 2;</code>
       */
      public Builder setStarRating(float value) {
        bitField0_ |= 0x00000002;
        starRating_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional float starRating = 2;</code>
       */
      public Builder clearStarRating() {
        bitField0_ = (bitField0_ & ~0x00000002);
        starRating_ = 0F;
        onChanged();
        return this;
      }

      // optional uint64 ratingsCount = 3;
      private long ratingsCount_ ;
      /**
       * <code>optional uint64 ratingsCount = 3;</code>
       */
      public boolean hasRatingsCount() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional uint64 ratingsCount = 3;</code>
       */
      public long getRatingsCount() {
        return ratingsCount_;
      }
      /**
       * <code>optional uint64 ratingsCount = 3;</code>
       */
      public Builder setRatingsCount(long value) {
        bitField0_ |= 0x00000004;
        ratingsCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 ratingsCount = 3;</code>
       */
      public Builder clearRatingsCount() {
        bitField0_ = (bitField0_ & ~0x00000004);
        ratingsCount_ = 0L;
        onChanged();
        return this;
      }

      // optional uint64 oneStarRatings = 4;
      private long oneStarRatings_ ;
      /**
       * <code>optional uint64 oneStarRatings = 4;</code>
       */
      public boolean hasOneStarRatings() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional uint64 oneStarRatings = 4;</code>
       */
      public long getOneStarRatings() {
        return oneStarRatings_;
      }
      /**
       * <code>optional uint64 oneStarRatings = 4;</code>
       */
      public Builder setOneStarRatings(long value) {
        bitField0_ |= 0x00000008;
        oneStarRatings_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 oneStarRatings = 4;</code>
       */
      public Builder clearOneStarRatings() {
        bitField0_ = (bitField0_ & ~0x00000008);
        oneStarRatings_ = 0L;
        onChanged();
        return this;
      }

      // optional uint64 twoStarRatings = 5;
      private long twoStarRatings_ ;
      /**
       * <code>optional uint64 twoStarRatings = 5;</code>
       */
      public boolean hasTwoStarRatings() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional uint64 twoStarRatings = 5;</code>
       */
      public long getTwoStarRatings() {
        return twoStarRatings_;
      }
      /**
       * <code>optional uint64 twoStarRatings = 5;</code>
       */
      public Builder setTwoStarRatings(long value) {
        bitField0_ |= 0x00000010;
        twoStarRatings_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 twoStarRatings = 5;</code>
       */
      public Builder clearTwoStarRatings() {
        bitField0_ = (bitField0_ & ~0x00000010);
        twoStarRatings_ = 0L;
        onChanged();
        return this;
      }

      // optional uint64 threeStarRatings = 6;
      private long threeStarRatings_ ;
      /**
       * <code>optional uint64 threeStarRatings = 6;</code>
       */
      public boolean hasThreeStarRatings() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional uint64 threeStarRatings = 6;</code>
       */
      public long getThreeStarRatings() {
        return threeStarRatings_;
      }
      /**
       * <code>optional uint64 threeStarRatings = 6;</code>
       */
      public Builder setThreeStarRatings(long value) {
        bitField0_ |= 0x00000020;
        threeStarRatings_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 threeStarRatings = 6;</code>
       */
      public Builder clearThreeStarRatings() {
        bitField0_ = (bitField0_ & ~0x00000020);
        threeStarRatings_ = 0L;
        onChanged();
        return this;
      }

      // optional uint64 fourStarRatings = 7;
      private long fourStarRatings_ ;
      /**
       * <code>optional uint64 fourStarRatings = 7;</code>
       */
      public boolean hasFourStarRatings() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional uint64 fourStarRatings = 7;</code>
       */
      public long getFourStarRatings() {
        return fourStarRatings_;
      }
      /**
       * <code>optional uint64 fourStarRatings = 7;</code>
       */
      public Builder setFourStarRatings(long value) {
        bitField0_ |= 0x00000040;
        fourStarRatings_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 fourStarRatings = 7;</code>
       */
      public Builder clearFourStarRatings() {
        bitField0_ = (bitField0_ & ~0x00000040);
        fourStarRatings_ = 0L;
        onChanged();
        return this;
      }

      // optional uint64 fiveStarRatings = 8;
      private long fiveStarRatings_ ;
      /**
       * <code>optional uint64 fiveStarRatings = 8;</code>
       */
      public boolean hasFiveStarRatings() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional uint64 fiveStarRatings = 8;</code>
       */
      public long getFiveStarRatings() {
        return fiveStarRatings_;
      }
      /**
       * <code>optional uint64 fiveStarRatings = 8;</code>
       */
      public Builder setFiveStarRatings(long value) {
        bitField0_ |= 0x00000080;
        fiveStarRatings_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 fiveStarRatings = 8;</code>
       */
      public Builder clearFiveStarRatings() {
        bitField0_ = (bitField0_ & ~0x00000080);
        fiveStarRatings_ = 0L;
        onChanged();
        return this;
      }

      // optional uint64 thumbsUpCount = 9;
      private long thumbsUpCount_ ;
      /**
       * <code>optional uint64 thumbsUpCount = 9;</code>
       */
      public boolean hasThumbsUpCount() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional uint64 thumbsUpCount = 9;</code>
       */
      public long getThumbsUpCount() {
        return thumbsUpCount_;
      }
      /**
       * <code>optional uint64 thumbsUpCount = 9;</code>
       */
      public Builder setThumbsUpCount(long value) {
        bitField0_ |= 0x00000100;
        thumbsUpCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 thumbsUpCount = 9;</code>
       */
      public Builder clearThumbsUpCount() {
        bitField0_ = (bitField0_ & ~0x00000100);
        thumbsUpCount_ = 0L;
        onChanged();
        return this;
      }

      // optional uint64 thumbsDownCount = 10;
      private long thumbsDownCount_ ;
      /**
       * <code>optional uint64 thumbsDownCount = 10;</code>
       */
      public boolean hasThumbsDownCount() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional uint64 thumbsDownCount = 10;</code>
       */
      public long getThumbsDownCount() {
        return thumbsDownCount_;
      }
      /**
       * <code>optional uint64 thumbsDownCount = 10;</code>
       */
      public Builder setThumbsDownCount(long value) {
        bitField0_ |= 0x00000200;
        thumbsDownCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 thumbsDownCount = 10;</code>
       */
      public Builder clearThumbsDownCount() {
        bitField0_ = (bitField0_ & ~0x00000200);
        thumbsDownCount_ = 0L;
        onChanged();
        return this;
      }

      // optional uint64 commentCount = 11;
      private long commentCount_ ;
      /**
       * <code>optional uint64 commentCount = 11;</code>
       */
      public boolean hasCommentCount() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional uint64 commentCount = 11;</code>
       */
      public long getCommentCount() {
        return commentCount_;
      }
      /**
       * <code>optional uint64 commentCount = 11;</code>
       */
      public Builder setCommentCount(long value) {
        bitField0_ |= 0x00000400;
        commentCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional uint64 commentCount = 11;</code>
       */
      public Builder clearCommentCount() {
        bitField0_ = (bitField0_ & ~0x00000400);
        commentCount_ = 0L;
        onChanged();
        return this;
      }

      // optional double bayesianMeanRating = 12;
      private double bayesianMeanRating_ ;
      /**
       * <code>optional double bayesianMeanRating = 12;</code>
       */
      public boolean hasBayesianMeanRating() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional double bayesianMeanRating = 12;</code>
       */
      public double getBayesianMeanRating() {
        return bayesianMeanRating_;
      }
      /**
       * <code>optional double bayesianMeanRating = 12;</code>
       */
      public Builder setBayesianMeanRating(double value) {
        bitField0_ |= 0x00000800;
        bayesianMeanRating_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional double bayesianMeanRating = 12;</code>
       */
      public Builder clearBayesianMeanRating() {
        bitField0_ = (bitField0_ & ~0x00000800);
        bayesianMeanRating_ = 0D;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:AggregateRating)
    }

    static {
      defaultInstance = new AggregateRating(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:AggregateRating)
  }

  public interface PayloadOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .ListResponse listResponse = 1;
    /**
     * <code>optional .ListResponse listResponse = 1;</code>
     */
    boolean hasListResponse();
    /**
     * <code>optional .ListResponse listResponse = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ListResponse getListResponse();
    /**
     * <code>optional .ListResponse listResponse = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ListResponseOrBuilder getListResponseOrBuilder();

    // optional .DetailsResponse detailsResponse = 2;
    /**
     * <code>optional .DetailsResponse detailsResponse = 2;</code>
     */
    boolean hasDetailsResponse();
    /**
     * <code>optional .DetailsResponse detailsResponse = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse getDetailsResponse();
    /**
     * <code>optional .DetailsResponse detailsResponse = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponseOrBuilder getDetailsResponseOrBuilder();

    // optional .ReviewResponse reviewResponse = 3;
    /**
     * <code>optional .ReviewResponse reviewResponse = 3;</code>
     */
    boolean hasReviewResponse();
    /**
     * <code>optional .ReviewResponse reviewResponse = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse getReviewResponse();
    /**
     * <code>optional .ReviewResponse reviewResponse = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponseOrBuilder getReviewResponseOrBuilder();

    // optional .BuyResponse buyResponse = 4;
    /**
     * <code>optional .BuyResponse buyResponse = 4;</code>
     */
    boolean hasBuyResponse();
    /**
     * <code>optional .BuyResponse buyResponse = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse getBuyResponse();
    /**
     * <code>optional .BuyResponse buyResponse = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BuyResponseOrBuilder getBuyResponseOrBuilder();

    // optional .SearchResponse searchResponse = 5;
    /**
     * <code>optional .SearchResponse searchResponse = 5;</code>
     */
    boolean hasSearchResponse();
    /**
     * <code>optional .SearchResponse searchResponse = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse getSearchResponse();
    /**
     * <code>optional .SearchResponse searchResponse = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.SearchResponseOrBuilder getSearchResponseOrBuilder();

    // optional .BrowseResponse browseResponse = 7;
    /**
     * <code>optional .BrowseResponse browseResponse = 7;</code>
     */
    boolean hasBrowseResponse();
    /**
     * <code>optional .BrowseResponse browseResponse = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse getBrowseResponse();
    /**
     * <code>optional .BrowseResponse browseResponse = 7;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponseOrBuilder getBrowseResponseOrBuilder();

    // optional .PurchaseStatusResponse purchaseStatusResponse = 8;
    /**
     * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
     */
    boolean hasPurchaseStatusResponse();
    /**
     * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse getPurchaseStatusResponse();
    /**
     * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponseOrBuilder getPurchaseStatusResponseOrBuilder();

    // optional .BulkDetailsResponse bulkDetailsResponse = 19;
    /**
     * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
     */
    boolean hasBulkDetailsResponse();
    /**
     * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse getBulkDetailsResponse();
    /**
     * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponseOrBuilder getBulkDetailsResponseOrBuilder();

    // optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;
    /**
     * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
     */
    boolean hasUploadDeviceConfigResponse();
    /**
     * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse getUploadDeviceConfigResponse();
    /**
     * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponseOrBuilder getUploadDeviceConfigResponseOrBuilder();

    // optional .AndroidCheckinResponse androidCheckinResponse = 26;
    /**
     * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
     */
    boolean hasAndroidCheckinResponse();
    /**
     * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse getAndroidCheckinResponse();
    /**
     * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponseOrBuilder getAndroidCheckinResponseOrBuilder();

    // optional .DeliveryResponse deliveryResponse = 21;
    /**
     * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
     */
    boolean hasDeliveryResponse();
    /**
     * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse getDeliveryResponse();
    /**
     * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponseOrBuilder getDeliveryResponseOrBuilder();
  }
  /**
   * Protobuf type {@code Payload}
   */
  public static final class Payload extends
      com.google.protobuf.GeneratedMessage
      implements PayloadOrBuilder {
    // Use Payload.newBuilder() to construct.
    private Payload(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Payload(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Payload defaultInstance;
    public static Payload getDefaultInstance() {
      return defaultInstance;
    }

    public Payload getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Payload(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = listResponse_.toBuilder();
              }
              listResponse_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(listResponse_);
                listResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = detailsResponse_.toBuilder();
              }
              detailsResponse_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(detailsResponse_);
                detailsResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = reviewResponse_.toBuilder();
              }
              reviewResponse_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(reviewResponse_);
                reviewResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 34: {
              com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = buyResponse_.toBuilder();
              }
              buyResponse_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(buyResponse_);
                buyResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 42: {
              com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000010) == 0x00000010)) {
                subBuilder = searchResponse_.toBuilder();
              }
              searchResponse_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(searchResponse_);
                searchResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000010;
              break;
            }
            case 58: {
              com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000020) == 0x00000020)) {
                subBuilder = browseResponse_.toBuilder();
              }
              browseResponse_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(browseResponse_);
                browseResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000020;
              break;
            }
            case 66: {
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000040) == 0x00000040)) {
                subBuilder = purchaseStatusResponse_.toBuilder();
              }
              purchaseStatusResponse_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(purchaseStatusResponse_);
                purchaseStatusResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000040;
              break;
            }
            case 154: {
              com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000080) == 0x00000080)) {
                subBuilder = bulkDetailsResponse_.toBuilder();
              }
              bulkDetailsResponse_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(bulkDetailsResponse_);
                bulkDetailsResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000080;
              break;
            }
            case 170: {
              com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000400) == 0x00000400)) {
                subBuilder = deliveryResponse_.toBuilder();
              }
              deliveryResponse_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(deliveryResponse_);
                deliveryResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000400;
              break;
            }
            case 202: {
              com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000100) == 0x00000100)) {
                subBuilder = uploadDeviceConfigResponse_.toBuilder();
              }
              uploadDeviceConfigResponse_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(uploadDeviceConfigResponse_);
                uploadDeviceConfigResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000100;
              break;
            }
            case 210: {
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000200) == 0x00000200)) {
                subBuilder = androidCheckinResponse_.toBuilder();
              }
              androidCheckinResponse_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(androidCheckinResponse_);
                androidCheckinResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000200;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Payload_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Payload_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Payload.class, com.akdeniz.googleplaycrawler.GooglePlay.Payload.Builder.class);
    }

    public static com.google.protobuf.Parser<Payload> PARSER =
        new com.google.protobuf.AbstractParser<Payload>() {
      public Payload parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Payload(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Payload> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .ListResponse listResponse = 1;
    public static final int LISTRESPONSE_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.ListResponse listResponse_;
    /**
     * <code>optional .ListResponse listResponse = 1;</code>
     */
    public boolean hasListResponse() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .ListResponse listResponse = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ListResponse getListResponse() {
      return listResponse_;
    }
    /**
     * <code>optional .ListResponse listResponse = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ListResponseOrBuilder getListResponseOrBuilder() {
      return listResponse_;
    }

    // optional .DetailsResponse detailsResponse = 2;
    public static final int DETAILSRESPONSE_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse detailsResponse_;
    /**
     * <code>optional .DetailsResponse detailsResponse = 2;</code>
     */
    public boolean hasDetailsResponse() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .DetailsResponse detailsResponse = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse getDetailsResponse() {
      return detailsResponse_;
    }
    /**
     * <code>optional .DetailsResponse detailsResponse = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponseOrBuilder getDetailsResponseOrBuilder() {
      return detailsResponse_;
    }

    // optional .ReviewResponse reviewResponse = 3;
    public static final int REVIEWRESPONSE_FIELD_NUMBER = 3;
    private com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse reviewResponse_;
    /**
     * <code>optional .ReviewResponse reviewResponse = 3;</code>
     */
    public boolean hasReviewResponse() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .ReviewResponse reviewResponse = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse getReviewResponse() {
      return reviewResponse_;
    }
    /**
     * <code>optional .ReviewResponse reviewResponse = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponseOrBuilder getReviewResponseOrBuilder() {
      return reviewResponse_;
    }

    // optional .BuyResponse buyResponse = 4;
    public static final int BUYRESPONSE_FIELD_NUMBER = 4;
    private com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse buyResponse_;
    /**
     * <code>optional .BuyResponse buyResponse = 4;</code>
     */
    public boolean hasBuyResponse() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .BuyResponse buyResponse = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse getBuyResponse() {
      return buyResponse_;
    }
    /**
     * <code>optional .BuyResponse buyResponse = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponseOrBuilder getBuyResponseOrBuilder() {
      return buyResponse_;
    }

    // optional .SearchResponse searchResponse = 5;
    public static final int SEARCHRESPONSE_FIELD_NUMBER = 5;
    private com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse searchResponse_;
    /**
     * <code>optional .SearchResponse searchResponse = 5;</code>
     */
    public boolean hasSearchResponse() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional .SearchResponse searchResponse = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse getSearchResponse() {
      return searchResponse_;
    }
    /**
     * <code>optional .SearchResponse searchResponse = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.SearchResponseOrBuilder getSearchResponseOrBuilder() {
      return searchResponse_;
    }

    // optional .BrowseResponse browseResponse = 7;
    public static final int BROWSERESPONSE_FIELD_NUMBER = 7;
    private com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse browseResponse_;
    /**
     * <code>optional .BrowseResponse browseResponse = 7;</code>
     */
    public boolean hasBrowseResponse() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional .BrowseResponse browseResponse = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse getBrowseResponse() {
      return browseResponse_;
    }
    /**
     * <code>optional .BrowseResponse browseResponse = 7;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponseOrBuilder getBrowseResponseOrBuilder() {
      return browseResponse_;
    }

    // optional .PurchaseStatusResponse purchaseStatusResponse = 8;
    public static final int PURCHASESTATUSRESPONSE_FIELD_NUMBER = 8;
    private com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse purchaseStatusResponse_;
    /**
     * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
     */
    public boolean hasPurchaseStatusResponse() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse getPurchaseStatusResponse() {
      return purchaseStatusResponse_;
    }
    /**
     * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponseOrBuilder getPurchaseStatusResponseOrBuilder() {
      return purchaseStatusResponse_;
    }

    // optional .BulkDetailsResponse bulkDetailsResponse = 19;
    public static final int BULKDETAILSRESPONSE_FIELD_NUMBER = 19;
    private com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse bulkDetailsResponse_;
    /**
     * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
     */
    public boolean hasBulkDetailsResponse() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse getBulkDetailsResponse() {
      return bulkDetailsResponse_;
    }
    /**
     * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponseOrBuilder getBulkDetailsResponseOrBuilder() {
      return bulkDetailsResponse_;
    }

    // optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;
    public static final int UPLOADDEVICECONFIGRESPONSE_FIELD_NUMBER = 25;
    private com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse uploadDeviceConfigResponse_;
    /**
     * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
     */
    public boolean hasUploadDeviceConfigResponse() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse getUploadDeviceConfigResponse() {
      return uploadDeviceConfigResponse_;
    }
    /**
     * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponseOrBuilder getUploadDeviceConfigResponseOrBuilder() {
      return uploadDeviceConfigResponse_;
    }

    // optional .AndroidCheckinResponse androidCheckinResponse = 26;
    public static final int ANDROIDCHECKINRESPONSE_FIELD_NUMBER = 26;
    private com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse androidCheckinResponse_;
    /**
     * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
     */
    public boolean hasAndroidCheckinResponse() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse getAndroidCheckinResponse() {
      return androidCheckinResponse_;
    }
    /**
     * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponseOrBuilder getAndroidCheckinResponseOrBuilder() {
      return androidCheckinResponse_;
    }

    // optional .DeliveryResponse deliveryResponse = 21;
    public static final int DELIVERYRESPONSE_FIELD_NUMBER = 21;
    private com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse deliveryResponse_;
    /**
     * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
     */
    public boolean hasDeliveryResponse() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse getDeliveryResponse() {
      return deliveryResponse_;
    }
    /**
     * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponseOrBuilder getDeliveryResponseOrBuilder() {
      return deliveryResponse_;
    }

    private void initFields() {
      listResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.getDefaultInstance();
      detailsResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.getDefaultInstance();
      reviewResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.getDefaultInstance();
      buyResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.getDefaultInstance();
      searchResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.getDefaultInstance();
      browseResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.getDefaultInstance();
      purchaseStatusResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.getDefaultInstance();
      bulkDetailsResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.getDefaultInstance();
      uploadDeviceConfigResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.getDefaultInstance();
      androidCheckinResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.getDefaultInstance();
      deliveryResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, listResponse_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, detailsResponse_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, reviewResponse_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, buyResponse_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeMessage(5, searchResponse_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeMessage(7, browseResponse_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeMessage(8, purchaseStatusResponse_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeMessage(19, bulkDetailsResponse_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeMessage(21, deliveryResponse_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeMessage(25, uploadDeviceConfigResponse_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeMessage(26, androidCheckinResponse_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, listResponse_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, detailsResponse_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, reviewResponse_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, buyResponse_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, searchResponse_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, browseResponse_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, purchaseStatusResponse_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(19, bulkDetailsResponse_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(21, deliveryResponse_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(25, uploadDeviceConfigResponse_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(26, androidCheckinResponse_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.Payload parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Payload parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Payload parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Payload parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Payload parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Payload parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Payload parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Payload parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Payload parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Payload parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Payload prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Payload}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.PayloadOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Payload_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Payload_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Payload.class, com.akdeniz.googleplaycrawler.GooglePlay.Payload.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Payload.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getListResponseFieldBuilder();
          getDetailsResponseFieldBuilder();
          getReviewResponseFieldBuilder();
          getBuyResponseFieldBuilder();
          getSearchResponseFieldBuilder();
          getBrowseResponseFieldBuilder();
          getPurchaseStatusResponseFieldBuilder();
          getBulkDetailsResponseFieldBuilder();
          getUploadDeviceConfigResponseFieldBuilder();
          getAndroidCheckinResponseFieldBuilder();
          getDeliveryResponseFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (listResponseBuilder_ == null) {
          listResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.getDefaultInstance();
        } else {
          listResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (detailsResponseBuilder_ == null) {
          detailsResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.getDefaultInstance();
        } else {
          detailsResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (reviewResponseBuilder_ == null) {
          reviewResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.getDefaultInstance();
        } else {
          reviewResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        if (buyResponseBuilder_ == null) {
          buyResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.getDefaultInstance();
        } else {
          buyResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        if (searchResponseBuilder_ == null) {
          searchResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.getDefaultInstance();
        } else {
          searchResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        if (browseResponseBuilder_ == null) {
          browseResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.getDefaultInstance();
        } else {
          browseResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        if (purchaseStatusResponseBuilder_ == null) {
          purchaseStatusResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.getDefaultInstance();
        } else {
          purchaseStatusResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        if (bulkDetailsResponseBuilder_ == null) {
          bulkDetailsResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.getDefaultInstance();
        } else {
          bulkDetailsResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        if (uploadDeviceConfigResponseBuilder_ == null) {
          uploadDeviceConfigResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.getDefaultInstance();
        } else {
          uploadDeviceConfigResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        if (androidCheckinResponseBuilder_ == null) {
          androidCheckinResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.getDefaultInstance();
        } else {
          androidCheckinResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        if (deliveryResponseBuilder_ == null) {
          deliveryResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.getDefaultInstance();
        } else {
          deliveryResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Payload_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Payload getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Payload.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Payload build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Payload result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Payload buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Payload result = new com.akdeniz.googleplaycrawler.GooglePlay.Payload(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (listResponseBuilder_ == null) {
          result.listResponse_ = listResponse_;
        } else {
          result.listResponse_ = listResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (detailsResponseBuilder_ == null) {
          result.detailsResponse_ = detailsResponse_;
        } else {
          result.detailsResponse_ = detailsResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (reviewResponseBuilder_ == null) {
          result.reviewResponse_ = reviewResponse_;
        } else {
          result.reviewResponse_ = reviewResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (buyResponseBuilder_ == null) {
          result.buyResponse_ = buyResponse_;
        } else {
          result.buyResponse_ = buyResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        if (searchResponseBuilder_ == null) {
          result.searchResponse_ = searchResponse_;
        } else {
          result.searchResponse_ = searchResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        if (browseResponseBuilder_ == null) {
          result.browseResponse_ = browseResponse_;
        } else {
          result.browseResponse_ = browseResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        if (purchaseStatusResponseBuilder_ == null) {
          result.purchaseStatusResponse_ = purchaseStatusResponse_;
        } else {
          result.purchaseStatusResponse_ = purchaseStatusResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        if (bulkDetailsResponseBuilder_ == null) {
          result.bulkDetailsResponse_ = bulkDetailsResponse_;
        } else {
          result.bulkDetailsResponse_ = bulkDetailsResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        if (uploadDeviceConfigResponseBuilder_ == null) {
          result.uploadDeviceConfigResponse_ = uploadDeviceConfigResponse_;
        } else {
          result.uploadDeviceConfigResponse_ = uploadDeviceConfigResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        if (androidCheckinResponseBuilder_ == null) {
          result.androidCheckinResponse_ = androidCheckinResponse_;
        } else {
          result.androidCheckinResponse_ = androidCheckinResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        if (deliveryResponseBuilder_ == null) {
          result.deliveryResponse_ = deliveryResponse_;
        } else {
          result.deliveryResponse_ = deliveryResponseBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Payload) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Payload)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Payload other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Payload.getDefaultInstance()) return this;
        if (other.hasListResponse()) {
          mergeListResponse(other.getListResponse());
        }
        if (other.hasDetailsResponse()) {
          mergeDetailsResponse(other.getDetailsResponse());
        }
        if (other.hasReviewResponse()) {
          mergeReviewResponse(other.getReviewResponse());
        }
        if (other.hasBuyResponse()) {
          mergeBuyResponse(other.getBuyResponse());
        }
        if (other.hasSearchResponse()) {
          mergeSearchResponse(other.getSearchResponse());
        }
        if (other.hasBrowseResponse()) {
          mergeBrowseResponse(other.getBrowseResponse());
        }
        if (other.hasPurchaseStatusResponse()) {
          mergePurchaseStatusResponse(other.getPurchaseStatusResponse());
        }
        if (other.hasBulkDetailsResponse()) {
          mergeBulkDetailsResponse(other.getBulkDetailsResponse());
        }
        if (other.hasUploadDeviceConfigResponse()) {
          mergeUploadDeviceConfigResponse(other.getUploadDeviceConfigResponse());
        }
        if (other.hasAndroidCheckinResponse()) {
          mergeAndroidCheckinResponse(other.getAndroidCheckinResponse());
        }
        if (other.hasDeliveryResponse()) {
          mergeDeliveryResponse(other.getDeliveryResponse());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.Payload parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.Payload) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .ListResponse listResponse = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.ListResponse listResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ListResponse, com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ListResponseOrBuilder> listResponseBuilder_;
      /**
       * <code>optional .ListResponse listResponse = 1;</code>
       */
      public boolean hasListResponse() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .ListResponse listResponse = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ListResponse getListResponse() {
        if (listResponseBuilder_ == null) {
          return listResponse_;
        } else {
          return listResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .ListResponse listResponse = 1;</code>
       */
      public Builder setListResponse(com.akdeniz.googleplaycrawler.GooglePlay.ListResponse value) {
        if (listResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          listResponse_ = value;
          onChanged();
        } else {
          listResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .ListResponse listResponse = 1;</code>
       */
      public Builder setListResponse(
          com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.Builder builderForValue) {
        if (listResponseBuilder_ == null) {
          listResponse_ = builderForValue.build();
          onChanged();
        } else {
          listResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .ListResponse listResponse = 1;</code>
       */
      public Builder mergeListResponse(com.akdeniz.googleplaycrawler.GooglePlay.ListResponse value) {
        if (listResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              listResponse_ != com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.getDefaultInstance()) {
            listResponse_ =
              com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.newBuilder(listResponse_).mergeFrom(value).buildPartial();
          } else {
            listResponse_ = value;
          }
          onChanged();
        } else {
          listResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .ListResponse listResponse = 1;</code>
       */
      public Builder clearListResponse() {
        if (listResponseBuilder_ == null) {
          listResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.getDefaultInstance();
          onChanged();
        } else {
          listResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .ListResponse listResponse = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.Builder getListResponseBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getListResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .ListResponse listResponse = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ListResponseOrBuilder getListResponseOrBuilder() {
        if (listResponseBuilder_ != null) {
          return listResponseBuilder_.getMessageOrBuilder();
        } else {
          return listResponse_;
        }
      }
      /**
       * <code>optional .ListResponse listResponse = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ListResponse, com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ListResponseOrBuilder> 
          getListResponseFieldBuilder() {
        if (listResponseBuilder_ == null) {
          listResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.ListResponse, com.akdeniz.googleplaycrawler.GooglePlay.ListResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ListResponseOrBuilder>(
                  listResponse_,
                  getParentForChildren(),
                  isClean());
          listResponse_ = null;
        }
        return listResponseBuilder_;
      }

      // optional .DetailsResponse detailsResponse = 2;
      private com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse detailsResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse, com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponseOrBuilder> detailsResponseBuilder_;
      /**
       * <code>optional .DetailsResponse detailsResponse = 2;</code>
       */
      public boolean hasDetailsResponse() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .DetailsResponse detailsResponse = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse getDetailsResponse() {
        if (detailsResponseBuilder_ == null) {
          return detailsResponse_;
        } else {
          return detailsResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .DetailsResponse detailsResponse = 2;</code>
       */
      public Builder setDetailsResponse(com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse value) {
        if (detailsResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          detailsResponse_ = value;
          onChanged();
        } else {
          detailsResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .DetailsResponse detailsResponse = 2;</code>
       */
      public Builder setDetailsResponse(
          com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.Builder builderForValue) {
        if (detailsResponseBuilder_ == null) {
          detailsResponse_ = builderForValue.build();
          onChanged();
        } else {
          detailsResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .DetailsResponse detailsResponse = 2;</code>
       */
      public Builder mergeDetailsResponse(com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse value) {
        if (detailsResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              detailsResponse_ != com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.getDefaultInstance()) {
            detailsResponse_ =
              com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.newBuilder(detailsResponse_).mergeFrom(value).buildPartial();
          } else {
            detailsResponse_ = value;
          }
          onChanged();
        } else {
          detailsResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .DetailsResponse detailsResponse = 2;</code>
       */
      public Builder clearDetailsResponse() {
        if (detailsResponseBuilder_ == null) {
          detailsResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.getDefaultInstance();
          onChanged();
        } else {
          detailsResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .DetailsResponse detailsResponse = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.Builder getDetailsResponseBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getDetailsResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .DetailsResponse detailsResponse = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponseOrBuilder getDetailsResponseOrBuilder() {
        if (detailsResponseBuilder_ != null) {
          return detailsResponseBuilder_.getMessageOrBuilder();
        } else {
          return detailsResponse_;
        }
      }
      /**
       * <code>optional .DetailsResponse detailsResponse = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse, com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponseOrBuilder> 
          getDetailsResponseFieldBuilder() {
        if (detailsResponseBuilder_ == null) {
          detailsResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse, com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DetailsResponseOrBuilder>(
                  detailsResponse_,
                  getParentForChildren(),
                  isClean());
          detailsResponse_ = null;
        }
        return detailsResponseBuilder_;
      }

      // optional .ReviewResponse reviewResponse = 3;
      private com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse reviewResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse, com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponseOrBuilder> reviewResponseBuilder_;
      /**
       * <code>optional .ReviewResponse reviewResponse = 3;</code>
       */
      public boolean hasReviewResponse() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .ReviewResponse reviewResponse = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse getReviewResponse() {
        if (reviewResponseBuilder_ == null) {
          return reviewResponse_;
        } else {
          return reviewResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .ReviewResponse reviewResponse = 3;</code>
       */
      public Builder setReviewResponse(com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse value) {
        if (reviewResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          reviewResponse_ = value;
          onChanged();
        } else {
          reviewResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .ReviewResponse reviewResponse = 3;</code>
       */
      public Builder setReviewResponse(
          com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.Builder builderForValue) {
        if (reviewResponseBuilder_ == null) {
          reviewResponse_ = builderForValue.build();
          onChanged();
        } else {
          reviewResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .ReviewResponse reviewResponse = 3;</code>
       */
      public Builder mergeReviewResponse(com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse value) {
        if (reviewResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              reviewResponse_ != com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.getDefaultInstance()) {
            reviewResponse_ =
              com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.newBuilder(reviewResponse_).mergeFrom(value).buildPartial();
          } else {
            reviewResponse_ = value;
          }
          onChanged();
        } else {
          reviewResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .ReviewResponse reviewResponse = 3;</code>
       */
      public Builder clearReviewResponse() {
        if (reviewResponseBuilder_ == null) {
          reviewResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.getDefaultInstance();
          onChanged();
        } else {
          reviewResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .ReviewResponse reviewResponse = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.Builder getReviewResponseBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getReviewResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .ReviewResponse reviewResponse = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponseOrBuilder getReviewResponseOrBuilder() {
        if (reviewResponseBuilder_ != null) {
          return reviewResponseBuilder_.getMessageOrBuilder();
        } else {
          return reviewResponse_;
        }
      }
      /**
       * <code>optional .ReviewResponse reviewResponse = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse, com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponseOrBuilder> 
          getReviewResponseFieldBuilder() {
        if (reviewResponseBuilder_ == null) {
          reviewResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse, com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponseOrBuilder>(
                  reviewResponse_,
                  getParentForChildren(),
                  isClean());
          reviewResponse_ = null;
        }
        return reviewResponseBuilder_;
      }

      // optional .BuyResponse buyResponse = 4;
      private com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse buyResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponseOrBuilder> buyResponseBuilder_;
      /**
       * <code>optional .BuyResponse buyResponse = 4;</code>
       */
      public boolean hasBuyResponse() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .BuyResponse buyResponse = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse getBuyResponse() {
        if (buyResponseBuilder_ == null) {
          return buyResponse_;
        } else {
          return buyResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .BuyResponse buyResponse = 4;</code>
       */
      public Builder setBuyResponse(com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse value) {
        if (buyResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          buyResponse_ = value;
          onChanged();
        } else {
          buyResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .BuyResponse buyResponse = 4;</code>
       */
      public Builder setBuyResponse(
          com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.Builder builderForValue) {
        if (buyResponseBuilder_ == null) {
          buyResponse_ = builderForValue.build();
          onChanged();
        } else {
          buyResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .BuyResponse buyResponse = 4;</code>
       */
      public Builder mergeBuyResponse(com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse value) {
        if (buyResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              buyResponse_ != com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.getDefaultInstance()) {
            buyResponse_ =
              com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.newBuilder(buyResponse_).mergeFrom(value).buildPartial();
          } else {
            buyResponse_ = value;
          }
          onChanged();
        } else {
          buyResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .BuyResponse buyResponse = 4;</code>
       */
      public Builder clearBuyResponse() {
        if (buyResponseBuilder_ == null) {
          buyResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.getDefaultInstance();
          onChanged();
        } else {
          buyResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .BuyResponse buyResponse = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.Builder getBuyResponseBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getBuyResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .BuyResponse buyResponse = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BuyResponseOrBuilder getBuyResponseOrBuilder() {
        if (buyResponseBuilder_ != null) {
          return buyResponseBuilder_.getMessageOrBuilder();
        } else {
          return buyResponse_;
        }
      }
      /**
       * <code>optional .BuyResponse buyResponse = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponseOrBuilder> 
          getBuyResponseFieldBuilder() {
        if (buyResponseBuilder_ == null) {
          buyResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BuyResponseOrBuilder>(
                  buyResponse_,
                  getParentForChildren(),
                  isClean());
          buyResponse_ = null;
        }
        return buyResponseBuilder_;
      }

      // optional .SearchResponse searchResponse = 5;
      private com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse searchResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse, com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.SearchResponseOrBuilder> searchResponseBuilder_;
      /**
       * <code>optional .SearchResponse searchResponse = 5;</code>
       */
      public boolean hasSearchResponse() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional .SearchResponse searchResponse = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse getSearchResponse() {
        if (searchResponseBuilder_ == null) {
          return searchResponse_;
        } else {
          return searchResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .SearchResponse searchResponse = 5;</code>
       */
      public Builder setSearchResponse(com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse value) {
        if (searchResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          searchResponse_ = value;
          onChanged();
        } else {
          searchResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .SearchResponse searchResponse = 5;</code>
       */
      public Builder setSearchResponse(
          com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.Builder builderForValue) {
        if (searchResponseBuilder_ == null) {
          searchResponse_ = builderForValue.build();
          onChanged();
        } else {
          searchResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .SearchResponse searchResponse = 5;</code>
       */
      public Builder mergeSearchResponse(com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse value) {
        if (searchResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010) &&
              searchResponse_ != com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.getDefaultInstance()) {
            searchResponse_ =
              com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.newBuilder(searchResponse_).mergeFrom(value).buildPartial();
          } else {
            searchResponse_ = value;
          }
          onChanged();
        } else {
          searchResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000010;
        return this;
      }
      /**
       * <code>optional .SearchResponse searchResponse = 5;</code>
       */
      public Builder clearSearchResponse() {
        if (searchResponseBuilder_ == null) {
          searchResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.getDefaultInstance();
          onChanged();
        } else {
          searchResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }
      /**
       * <code>optional .SearchResponse searchResponse = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.Builder getSearchResponseBuilder() {
        bitField0_ |= 0x00000010;
        onChanged();
        return getSearchResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .SearchResponse searchResponse = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.SearchResponseOrBuilder getSearchResponseOrBuilder() {
        if (searchResponseBuilder_ != null) {
          return searchResponseBuilder_.getMessageOrBuilder();
        } else {
          return searchResponse_;
        }
      }
      /**
       * <code>optional .SearchResponse searchResponse = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse, com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.SearchResponseOrBuilder> 
          getSearchResponseFieldBuilder() {
        if (searchResponseBuilder_ == null) {
          searchResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse, com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.SearchResponseOrBuilder>(
                  searchResponse_,
                  getParentForChildren(),
                  isClean());
          searchResponse_ = null;
        }
        return searchResponseBuilder_;
      }

      // optional .BrowseResponse browseResponse = 7;
      private com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse browseResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse, com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponseOrBuilder> browseResponseBuilder_;
      /**
       * <code>optional .BrowseResponse browseResponse = 7;</code>
       */
      public boolean hasBrowseResponse() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional .BrowseResponse browseResponse = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse getBrowseResponse() {
        if (browseResponseBuilder_ == null) {
          return browseResponse_;
        } else {
          return browseResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .BrowseResponse browseResponse = 7;</code>
       */
      public Builder setBrowseResponse(com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse value) {
        if (browseResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          browseResponse_ = value;
          onChanged();
        } else {
          browseResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .BrowseResponse browseResponse = 7;</code>
       */
      public Builder setBrowseResponse(
          com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.Builder builderForValue) {
        if (browseResponseBuilder_ == null) {
          browseResponse_ = builderForValue.build();
          onChanged();
        } else {
          browseResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .BrowseResponse browseResponse = 7;</code>
       */
      public Builder mergeBrowseResponse(com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse value) {
        if (browseResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020) &&
              browseResponse_ != com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.getDefaultInstance()) {
            browseResponse_ =
              com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.newBuilder(browseResponse_).mergeFrom(value).buildPartial();
          } else {
            browseResponse_ = value;
          }
          onChanged();
        } else {
          browseResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000020;
        return this;
      }
      /**
       * <code>optional .BrowseResponse browseResponse = 7;</code>
       */
      public Builder clearBrowseResponse() {
        if (browseResponseBuilder_ == null) {
          browseResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.getDefaultInstance();
          onChanged();
        } else {
          browseResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }
      /**
       * <code>optional .BrowseResponse browseResponse = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.Builder getBrowseResponseBuilder() {
        bitField0_ |= 0x00000020;
        onChanged();
        return getBrowseResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .BrowseResponse browseResponse = 7;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponseOrBuilder getBrowseResponseOrBuilder() {
        if (browseResponseBuilder_ != null) {
          return browseResponseBuilder_.getMessageOrBuilder();
        } else {
          return browseResponse_;
        }
      }
      /**
       * <code>optional .BrowseResponse browseResponse = 7;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse, com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponseOrBuilder> 
          getBrowseResponseFieldBuilder() {
        if (browseResponseBuilder_ == null) {
          browseResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse, com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BrowseResponseOrBuilder>(
                  browseResponse_,
                  getParentForChildren(),
                  isClean());
          browseResponse_ = null;
        }
        return browseResponseBuilder_;
      }

      // optional .PurchaseStatusResponse purchaseStatusResponse = 8;
      private com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse purchaseStatusResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponseOrBuilder> purchaseStatusResponseBuilder_;
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
       */
      public boolean hasPurchaseStatusResponse() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse getPurchaseStatusResponse() {
        if (purchaseStatusResponseBuilder_ == null) {
          return purchaseStatusResponse_;
        } else {
          return purchaseStatusResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
       */
      public Builder setPurchaseStatusResponse(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse value) {
        if (purchaseStatusResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          purchaseStatusResponse_ = value;
          onChanged();
        } else {
          purchaseStatusResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
       */
      public Builder setPurchaseStatusResponse(
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.Builder builderForValue) {
        if (purchaseStatusResponseBuilder_ == null) {
          purchaseStatusResponse_ = builderForValue.build();
          onChanged();
        } else {
          purchaseStatusResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
       */
      public Builder mergePurchaseStatusResponse(com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse value) {
        if (purchaseStatusResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000040) == 0x00000040) &&
              purchaseStatusResponse_ != com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.getDefaultInstance()) {
            purchaseStatusResponse_ =
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.newBuilder(purchaseStatusResponse_).mergeFrom(value).buildPartial();
          } else {
            purchaseStatusResponse_ = value;
          }
          onChanged();
        } else {
          purchaseStatusResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000040;
        return this;
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
       */
      public Builder clearPurchaseStatusResponse() {
        if (purchaseStatusResponseBuilder_ == null) {
          purchaseStatusResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.getDefaultInstance();
          onChanged();
        } else {
          purchaseStatusResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000040);
        return this;
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.Builder getPurchaseStatusResponseBuilder() {
        bitField0_ |= 0x00000040;
        onChanged();
        return getPurchaseStatusResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponseOrBuilder getPurchaseStatusResponseOrBuilder() {
        if (purchaseStatusResponseBuilder_ != null) {
          return purchaseStatusResponseBuilder_.getMessageOrBuilder();
        } else {
          return purchaseStatusResponse_;
        }
      }
      /**
       * <code>optional .PurchaseStatusResponse purchaseStatusResponse = 8;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponseOrBuilder> 
          getPurchaseStatusResponseFieldBuilder() {
        if (purchaseStatusResponseBuilder_ == null) {
          purchaseStatusResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PurchaseStatusResponseOrBuilder>(
                  purchaseStatusResponse_,
                  getParentForChildren(),
                  isClean());
          purchaseStatusResponse_ = null;
        }
        return purchaseStatusResponseBuilder_;
      }

      // optional .BulkDetailsResponse bulkDetailsResponse = 19;
      private com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse bulkDetailsResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponseOrBuilder> bulkDetailsResponseBuilder_;
      /**
       * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
       */
      public boolean hasBulkDetailsResponse() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse getBulkDetailsResponse() {
        if (bulkDetailsResponseBuilder_ == null) {
          return bulkDetailsResponse_;
        } else {
          return bulkDetailsResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
       */
      public Builder setBulkDetailsResponse(com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse value) {
        if (bulkDetailsResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          bulkDetailsResponse_ = value;
          onChanged();
        } else {
          bulkDetailsResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
       */
      public Builder setBulkDetailsResponse(
          com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.Builder builderForValue) {
        if (bulkDetailsResponseBuilder_ == null) {
          bulkDetailsResponse_ = builderForValue.build();
          onChanged();
        } else {
          bulkDetailsResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
       */
      public Builder mergeBulkDetailsResponse(com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse value) {
        if (bulkDetailsResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000080) == 0x00000080) &&
              bulkDetailsResponse_ != com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.getDefaultInstance()) {
            bulkDetailsResponse_ =
              com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.newBuilder(bulkDetailsResponse_).mergeFrom(value).buildPartial();
          } else {
            bulkDetailsResponse_ = value;
          }
          onChanged();
        } else {
          bulkDetailsResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000080;
        return this;
      }
      /**
       * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
       */
      public Builder clearBulkDetailsResponse() {
        if (bulkDetailsResponseBuilder_ == null) {
          bulkDetailsResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.getDefaultInstance();
          onChanged();
        } else {
          bulkDetailsResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000080);
        return this;
      }
      /**
       * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.Builder getBulkDetailsResponseBuilder() {
        bitField0_ |= 0x00000080;
        onChanged();
        return getBulkDetailsResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponseOrBuilder getBulkDetailsResponseOrBuilder() {
        if (bulkDetailsResponseBuilder_ != null) {
          return bulkDetailsResponseBuilder_.getMessageOrBuilder();
        } else {
          return bulkDetailsResponse_;
        }
      }
      /**
       * <code>optional .BulkDetailsResponse bulkDetailsResponse = 19;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponseOrBuilder> 
          getBulkDetailsResponseFieldBuilder() {
        if (bulkDetailsResponseBuilder_ == null) {
          bulkDetailsResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BulkDetailsResponseOrBuilder>(
                  bulkDetailsResponse_,
                  getParentForChildren(),
                  isClean());
          bulkDetailsResponse_ = null;
        }
        return bulkDetailsResponseBuilder_;
      }

      // optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;
      private com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse uploadDeviceConfigResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse, com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponseOrBuilder> uploadDeviceConfigResponseBuilder_;
      /**
       * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
       */
      public boolean hasUploadDeviceConfigResponse() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse getUploadDeviceConfigResponse() {
        if (uploadDeviceConfigResponseBuilder_ == null) {
          return uploadDeviceConfigResponse_;
        } else {
          return uploadDeviceConfigResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
       */
      public Builder setUploadDeviceConfigResponse(com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse value) {
        if (uploadDeviceConfigResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          uploadDeviceConfigResponse_ = value;
          onChanged();
        } else {
          uploadDeviceConfigResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
       */
      public Builder setUploadDeviceConfigResponse(
          com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.Builder builderForValue) {
        if (uploadDeviceConfigResponseBuilder_ == null) {
          uploadDeviceConfigResponse_ = builderForValue.build();
          onChanged();
        } else {
          uploadDeviceConfigResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
       */
      public Builder mergeUploadDeviceConfigResponse(com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse value) {
        if (uploadDeviceConfigResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100) &&
              uploadDeviceConfigResponse_ != com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.getDefaultInstance()) {
            uploadDeviceConfigResponse_ =
              com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.newBuilder(uploadDeviceConfigResponse_).mergeFrom(value).buildPartial();
          } else {
            uploadDeviceConfigResponse_ = value;
          }
          onChanged();
        } else {
          uploadDeviceConfigResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000100;
        return this;
      }
      /**
       * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
       */
      public Builder clearUploadDeviceConfigResponse() {
        if (uploadDeviceConfigResponseBuilder_ == null) {
          uploadDeviceConfigResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.getDefaultInstance();
          onChanged();
        } else {
          uploadDeviceConfigResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }
      /**
       * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.Builder getUploadDeviceConfigResponseBuilder() {
        bitField0_ |= 0x00000100;
        onChanged();
        return getUploadDeviceConfigResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponseOrBuilder getUploadDeviceConfigResponseOrBuilder() {
        if (uploadDeviceConfigResponseBuilder_ != null) {
          return uploadDeviceConfigResponseBuilder_.getMessageOrBuilder();
        } else {
          return uploadDeviceConfigResponse_;
        }
      }
      /**
       * <code>optional .UploadDeviceConfigResponse uploadDeviceConfigResponse = 25;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse, com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponseOrBuilder> 
          getUploadDeviceConfigResponseFieldBuilder() {
        if (uploadDeviceConfigResponseBuilder_ == null) {
          uploadDeviceConfigResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse, com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponseOrBuilder>(
                  uploadDeviceConfigResponse_,
                  getParentForChildren(),
                  isClean());
          uploadDeviceConfigResponse_ = null;
        }
        return uploadDeviceConfigResponseBuilder_;
      }

      // optional .AndroidCheckinResponse androidCheckinResponse = 26;
      private com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse androidCheckinResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponseOrBuilder> androidCheckinResponseBuilder_;
      /**
       * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
       */
      public boolean hasAndroidCheckinResponse() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse getAndroidCheckinResponse() {
        if (androidCheckinResponseBuilder_ == null) {
          return androidCheckinResponse_;
        } else {
          return androidCheckinResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
       */
      public Builder setAndroidCheckinResponse(com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse value) {
        if (androidCheckinResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          androidCheckinResponse_ = value;
          onChanged();
        } else {
          androidCheckinResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
       */
      public Builder setAndroidCheckinResponse(
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.Builder builderForValue) {
        if (androidCheckinResponseBuilder_ == null) {
          androidCheckinResponse_ = builderForValue.build();
          onChanged();
        } else {
          androidCheckinResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
       */
      public Builder mergeAndroidCheckinResponse(com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse value) {
        if (androidCheckinResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000200) == 0x00000200) &&
              androidCheckinResponse_ != com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.getDefaultInstance()) {
            androidCheckinResponse_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.newBuilder(androidCheckinResponse_).mergeFrom(value).buildPartial();
          } else {
            androidCheckinResponse_ = value;
          }
          onChanged();
        } else {
          androidCheckinResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000200;
        return this;
      }
      /**
       * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
       */
      public Builder clearAndroidCheckinResponse() {
        if (androidCheckinResponseBuilder_ == null) {
          androidCheckinResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.getDefaultInstance();
          onChanged();
        } else {
          androidCheckinResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }
      /**
       * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.Builder getAndroidCheckinResponseBuilder() {
        bitField0_ |= 0x00000200;
        onChanged();
        return getAndroidCheckinResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponseOrBuilder getAndroidCheckinResponseOrBuilder() {
        if (androidCheckinResponseBuilder_ != null) {
          return androidCheckinResponseBuilder_.getMessageOrBuilder();
        } else {
          return androidCheckinResponse_;
        }
      }
      /**
       * <code>optional .AndroidCheckinResponse androidCheckinResponse = 26;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponseOrBuilder> 
          getAndroidCheckinResponseFieldBuilder() {
        if (androidCheckinResponseBuilder_ == null) {
          androidCheckinResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponseOrBuilder>(
                  androidCheckinResponse_,
                  getParentForChildren(),
                  isClean());
          androidCheckinResponse_ = null;
        }
        return androidCheckinResponseBuilder_;
      }

      // optional .DeliveryResponse deliveryResponse = 21;
      private com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse deliveryResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse, com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponseOrBuilder> deliveryResponseBuilder_;
      /**
       * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
       */
      public boolean hasDeliveryResponse() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse getDeliveryResponse() {
        if (deliveryResponseBuilder_ == null) {
          return deliveryResponse_;
        } else {
          return deliveryResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
       */
      public Builder setDeliveryResponse(com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse value) {
        if (deliveryResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          deliveryResponse_ = value;
          onChanged();
        } else {
          deliveryResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
       */
      public Builder setDeliveryResponse(
          com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.Builder builderForValue) {
        if (deliveryResponseBuilder_ == null) {
          deliveryResponse_ = builderForValue.build();
          onChanged();
        } else {
          deliveryResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
       */
      public Builder mergeDeliveryResponse(com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse value) {
        if (deliveryResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000400) == 0x00000400) &&
              deliveryResponse_ != com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.getDefaultInstance()) {
            deliveryResponse_ =
              com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.newBuilder(deliveryResponse_).mergeFrom(value).buildPartial();
          } else {
            deliveryResponse_ = value;
          }
          onChanged();
        } else {
          deliveryResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000400;
        return this;
      }
      /**
       * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
       */
      public Builder clearDeliveryResponse() {
        if (deliveryResponseBuilder_ == null) {
          deliveryResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.getDefaultInstance();
          onChanged();
        } else {
          deliveryResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000400);
        return this;
      }
      /**
       * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.Builder getDeliveryResponseBuilder() {
        bitField0_ |= 0x00000400;
        onChanged();
        return getDeliveryResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponseOrBuilder getDeliveryResponseOrBuilder() {
        if (deliveryResponseBuilder_ != null) {
          return deliveryResponseBuilder_.getMessageOrBuilder();
        } else {
          return deliveryResponse_;
        }
      }
      /**
       * <code>optional .DeliveryResponse deliveryResponse = 21;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse, com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponseOrBuilder> 
          getDeliveryResponseFieldBuilder() {
        if (deliveryResponseBuilder_ == null) {
          deliveryResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse, com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DeliveryResponseOrBuilder>(
                  deliveryResponse_,
                  getParentForChildren(),
                  isClean());
          deliveryResponse_ = null;
        }
        return deliveryResponseBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Payload)
    }

    static {
      defaultInstance = new Payload(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Payload)
  }

  public interface PreFetchOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string url = 1;
    /**
     * <code>optional string url = 1;</code>
     */
    boolean hasUrl();
    /**
     * <code>optional string url = 1;</code>
     */
    java.lang.String getUrl();
    /**
     * <code>optional string url = 1;</code>
     */
    com.google.protobuf.ByteString
        getUrlBytes();

    // optional bytes response = 2;
    /**
     * <code>optional bytes response = 2;</code>
     */
    boolean hasResponse();
    /**
     * <code>optional bytes response = 2;</code>
     */
    com.google.protobuf.ByteString getResponse();

    // optional string etag = 3;
    /**
     * <code>optional string etag = 3;</code>
     */
    boolean hasEtag();
    /**
     * <code>optional string etag = 3;</code>
     */
    java.lang.String getEtag();
    /**
     * <code>optional string etag = 3;</code>
     */
    com.google.protobuf.ByteString
        getEtagBytes();

    // optional int64 ttl = 4;
    /**
     * <code>optional int64 ttl = 4;</code>
     */
    boolean hasTtl();
    /**
     * <code>optional int64 ttl = 4;</code>
     */
    long getTtl();

    // optional int64 softTtl = 5;
    /**
     * <code>optional int64 softTtl = 5;</code>
     */
    boolean hasSoftTtl();
    /**
     * <code>optional int64 softTtl = 5;</code>
     */
    long getSoftTtl();
  }
  /**
   * Protobuf type {@code PreFetch}
   */
  public static final class PreFetch extends
      com.google.protobuf.GeneratedMessage
      implements PreFetchOrBuilder {
    // Use PreFetch.newBuilder() to construct.
    private PreFetch(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PreFetch(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final PreFetch defaultInstance;
    public static PreFetch getDefaultInstance() {
      return defaultInstance;
    }

    public PreFetch getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private PreFetch(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              url_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              response_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              etag_ = input.readBytes();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              ttl_ = input.readInt64();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              softTtl_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PreFetch_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PreFetch_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.class, com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.Builder.class);
    }

    public static com.google.protobuf.Parser<PreFetch> PARSER =
        new com.google.protobuf.AbstractParser<PreFetch>() {
      public PreFetch parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new PreFetch(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<PreFetch> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string url = 1;
    public static final int URL_FIELD_NUMBER = 1;
    private java.lang.Object url_;
    /**
     * <code>optional string url = 1;</code>
     */
    public boolean hasUrl() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string url = 1;</code>
     */
    public java.lang.String getUrl() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          url_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string url = 1;</code>
     */
    public com.google.protobuf.ByteString
        getUrlBytes() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        url_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bytes response = 2;
    public static final int RESPONSE_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString response_;
    /**
     * <code>optional bytes response = 2;</code>
     */
    public boolean hasResponse() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bytes response = 2;</code>
     */
    public com.google.protobuf.ByteString getResponse() {
      return response_;
    }

    // optional string etag = 3;
    public static final int ETAG_FIELD_NUMBER = 3;
    private java.lang.Object etag_;
    /**
     * <code>optional string etag = 3;</code>
     */
    public boolean hasEtag() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string etag = 3;</code>
     */
    public java.lang.String getEtag() {
      java.lang.Object ref = etag_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          etag_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string etag = 3;</code>
     */
    public com.google.protobuf.ByteString
        getEtagBytes() {
      java.lang.Object ref = etag_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        etag_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 ttl = 4;
    public static final int TTL_FIELD_NUMBER = 4;
    private long ttl_;
    /**
     * <code>optional int64 ttl = 4;</code>
     */
    public boolean hasTtl() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int64 ttl = 4;</code>
     */
    public long getTtl() {
      return ttl_;
    }

    // optional int64 softTtl = 5;
    public static final int SOFTTTL_FIELD_NUMBER = 5;
    private long softTtl_;
    /**
     * <code>optional int64 softTtl = 5;</code>
     */
    public boolean hasSoftTtl() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int64 softTtl = 5;</code>
     */
    public long getSoftTtl() {
      return softTtl_;
    }

    private void initFields() {
      url_ = "";
      response_ = com.google.protobuf.ByteString.EMPTY;
      etag_ = "";
      ttl_ = 0L;
      softTtl_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, response_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getEtagBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(4, ttl_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(5, softTtl_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, response_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getEtagBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, ttl_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, softTtl_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.PreFetch parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PreFetch parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PreFetch parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PreFetch parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PreFetch parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PreFetch parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PreFetch parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PreFetch parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PreFetch parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PreFetch parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.PreFetch prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code PreFetch}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.PreFetchOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PreFetch_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PreFetch_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.class, com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        url_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        response_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        etag_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        ttl_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        softTtl_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PreFetch_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PreFetch getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PreFetch build() {
        com.akdeniz.googleplaycrawler.GooglePlay.PreFetch result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PreFetch buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.PreFetch result = new com.akdeniz.googleplaycrawler.GooglePlay.PreFetch(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.url_ = url_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.response_ = response_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.etag_ = etag_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.ttl_ = ttl_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.softTtl_ = softTtl_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.PreFetch) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.PreFetch)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.PreFetch other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.getDefaultInstance()) return this;
        if (other.hasUrl()) {
          bitField0_ |= 0x00000001;
          url_ = other.url_;
          onChanged();
        }
        if (other.hasResponse()) {
          setResponse(other.getResponse());
        }
        if (other.hasEtag()) {
          bitField0_ |= 0x00000004;
          etag_ = other.etag_;
          onChanged();
        }
        if (other.hasTtl()) {
          setTtl(other.getTtl());
        }
        if (other.hasSoftTtl()) {
          setSoftTtl(other.getSoftTtl());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.PreFetch parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.PreFetch) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string url = 1;
      private java.lang.Object url_ = "";
      /**
       * <code>optional string url = 1;</code>
       */
      public boolean hasUrl() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string url = 1;</code>
       */
      public java.lang.String getUrl() {
        java.lang.Object ref = url_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          url_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string url = 1;</code>
       */
      public com.google.protobuf.ByteString
          getUrlBytes() {
        java.lang.Object ref = url_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          url_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string url = 1;</code>
       */
      public Builder setUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        url_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string url = 1;</code>
       */
      public Builder clearUrl() {
        bitField0_ = (bitField0_ & ~0x00000001);
        url_ = getDefaultInstance().getUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string url = 1;</code>
       */
      public Builder setUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        url_ = value;
        onChanged();
        return this;
      }

      // optional bytes response = 2;
      private com.google.protobuf.ByteString response_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes response = 2;</code>
       */
      public boolean hasResponse() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bytes response = 2;</code>
       */
      public com.google.protobuf.ByteString getResponse() {
        return response_;
      }
      /**
       * <code>optional bytes response = 2;</code>
       */
      public Builder setResponse(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        response_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes response = 2;</code>
       */
      public Builder clearResponse() {
        bitField0_ = (bitField0_ & ~0x00000002);
        response_ = getDefaultInstance().getResponse();
        onChanged();
        return this;
      }

      // optional string etag = 3;
      private java.lang.Object etag_ = "";
      /**
       * <code>optional string etag = 3;</code>
       */
      public boolean hasEtag() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string etag = 3;</code>
       */
      public java.lang.String getEtag() {
        java.lang.Object ref = etag_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          etag_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string etag = 3;</code>
       */
      public com.google.protobuf.ByteString
          getEtagBytes() {
        java.lang.Object ref = etag_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          etag_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string etag = 3;</code>
       */
      public Builder setEtag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        etag_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string etag = 3;</code>
       */
      public Builder clearEtag() {
        bitField0_ = (bitField0_ & ~0x00000004);
        etag_ = getDefaultInstance().getEtag();
        onChanged();
        return this;
      }
      /**
       * <code>optional string etag = 3;</code>
       */
      public Builder setEtagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        etag_ = value;
        onChanged();
        return this;
      }

      // optional int64 ttl = 4;
      private long ttl_ ;
      /**
       * <code>optional int64 ttl = 4;</code>
       */
      public boolean hasTtl() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 ttl = 4;</code>
       */
      public long getTtl() {
        return ttl_;
      }
      /**
       * <code>optional int64 ttl = 4;</code>
       */
      public Builder setTtl(long value) {
        bitField0_ |= 0x00000008;
        ttl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 ttl = 4;</code>
       */
      public Builder clearTtl() {
        bitField0_ = (bitField0_ & ~0x00000008);
        ttl_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 softTtl = 5;
      private long softTtl_ ;
      /**
       * <code>optional int64 softTtl = 5;</code>
       */
      public boolean hasSoftTtl() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int64 softTtl = 5;</code>
       */
      public long getSoftTtl() {
        return softTtl_;
      }
      /**
       * <code>optional int64 softTtl = 5;</code>
       */
      public Builder setSoftTtl(long value) {
        bitField0_ |= 0x00000010;
        softTtl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 softTtl = 5;</code>
       */
      public Builder clearSoftTtl() {
        bitField0_ = (bitField0_ & ~0x00000010);
        softTtl_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:PreFetch)
    }

    static {
      defaultInstance = new PreFetch(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:PreFetch)
  }

  public interface ResponseWrapperOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .Payload payload = 1;
    /**
     * <code>optional .Payload payload = 1;</code>
     */
    boolean hasPayload();
    /**
     * <code>optional .Payload payload = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Payload getPayload();
    /**
     * <code>optional .Payload payload = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PayloadOrBuilder getPayloadOrBuilder();

    // optional .ServerCommands commands = 2;
    /**
     * <code>optional .ServerCommands commands = 2;</code>
     */
    boolean hasCommands();
    /**
     * <code>optional .ServerCommands commands = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands getCommands();
    /**
     * <code>optional .ServerCommands commands = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ServerCommandsOrBuilder getCommandsOrBuilder();

    // repeated .PreFetch preFetch = 3;
    /**
     * <code>repeated .PreFetch preFetch = 3;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PreFetch> 
        getPreFetchList();
    /**
     * <code>repeated .PreFetch preFetch = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PreFetch getPreFetch(int index);
    /**
     * <code>repeated .PreFetch preFetch = 3;</code>
     */
    int getPreFetchCount();
    /**
     * <code>repeated .PreFetch preFetch = 3;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.PreFetchOrBuilder> 
        getPreFetchOrBuilderList();
    /**
     * <code>repeated .PreFetch preFetch = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PreFetchOrBuilder getPreFetchOrBuilder(
        int index);

    // repeated .Notification notification = 4;
    /**
     * <code>repeated .Notification notification = 4;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Notification> 
        getNotificationList();
    /**
     * <code>repeated .Notification notification = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Notification getNotification(int index);
    /**
     * <code>repeated .Notification notification = 4;</code>
     */
    int getNotificationCount();
    /**
     * <code>repeated .Notification notification = 4;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.NotificationOrBuilder> 
        getNotificationOrBuilderList();
    /**
     * <code>repeated .Notification notification = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.NotificationOrBuilder getNotificationOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code ResponseWrapper}
   */
  public static final class ResponseWrapper extends
      com.google.protobuf.GeneratedMessage
      implements ResponseWrapperOrBuilder {
    // Use ResponseWrapper.newBuilder() to construct.
    private ResponseWrapper(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ResponseWrapper(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ResponseWrapper defaultInstance;
    public static ResponseWrapper getDefaultInstance() {
      return defaultInstance;
    }

    public ResponseWrapper getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ResponseWrapper(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.Payload.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = payload_.toBuilder();
              }
              payload_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Payload.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(payload_);
                payload_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = commands_.toBuilder();
              }
              commands_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(commands_);
                commands_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                preFetch_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.PreFetch>();
                mutable_bitField0_ |= 0x00000004;
              }
              preFetch_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.PARSER, extensionRegistry));
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                notification_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Notification>();
                mutable_bitField0_ |= 0x00000008;
              }
              notification_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Notification.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          preFetch_ = java.util.Collections.unmodifiableList(preFetch_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          notification_ = java.util.Collections.unmodifiableList(notification_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ResponseWrapper_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ResponseWrapper_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper.class, com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper.Builder.class);
    }

    public static com.google.protobuf.Parser<ResponseWrapper> PARSER =
        new com.google.protobuf.AbstractParser<ResponseWrapper>() {
      public ResponseWrapper parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ResponseWrapper(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ResponseWrapper> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .Payload payload = 1;
    public static final int PAYLOAD_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.Payload payload_;
    /**
     * <code>optional .Payload payload = 1;</code>
     */
    public boolean hasPayload() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .Payload payload = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Payload getPayload() {
      return payload_;
    }
    /**
     * <code>optional .Payload payload = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PayloadOrBuilder getPayloadOrBuilder() {
      return payload_;
    }

    // optional .ServerCommands commands = 2;
    public static final int COMMANDS_FIELD_NUMBER = 2;
    private com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands commands_;
    /**
     * <code>optional .ServerCommands commands = 2;</code>
     */
    public boolean hasCommands() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .ServerCommands commands = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands getCommands() {
      return commands_;
    }
    /**
     * <code>optional .ServerCommands commands = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ServerCommandsOrBuilder getCommandsOrBuilder() {
      return commands_;
    }

    // repeated .PreFetch preFetch = 3;
    public static final int PREFETCH_FIELD_NUMBER = 3;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PreFetch> preFetch_;
    /**
     * <code>repeated .PreFetch preFetch = 3;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PreFetch> getPreFetchList() {
      return preFetch_;
    }
    /**
     * <code>repeated .PreFetch preFetch = 3;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.PreFetchOrBuilder> 
        getPreFetchOrBuilderList() {
      return preFetch_;
    }
    /**
     * <code>repeated .PreFetch preFetch = 3;</code>
     */
    public int getPreFetchCount() {
      return preFetch_.size();
    }
    /**
     * <code>repeated .PreFetch preFetch = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PreFetch getPreFetch(int index) {
      return preFetch_.get(index);
    }
    /**
     * <code>repeated .PreFetch preFetch = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PreFetchOrBuilder getPreFetchOrBuilder(
        int index) {
      return preFetch_.get(index);
    }

    // repeated .Notification notification = 4;
    public static final int NOTIFICATION_FIELD_NUMBER = 4;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Notification> notification_;
    /**
     * <code>repeated .Notification notification = 4;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Notification> getNotificationList() {
      return notification_;
    }
    /**
     * <code>repeated .Notification notification = 4;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.NotificationOrBuilder> 
        getNotificationOrBuilderList() {
      return notification_;
    }
    /**
     * <code>repeated .Notification notification = 4;</code>
     */
    public int getNotificationCount() {
      return notification_.size();
    }
    /**
     * <code>repeated .Notification notification = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Notification getNotification(int index) {
      return notification_.get(index);
    }
    /**
     * <code>repeated .Notification notification = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.NotificationOrBuilder getNotificationOrBuilder(
        int index) {
      return notification_.get(index);
    }

    private void initFields() {
      payload_ = com.akdeniz.googleplaycrawler.GooglePlay.Payload.getDefaultInstance();
      commands_ = com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.getDefaultInstance();
      preFetch_ = java.util.Collections.emptyList();
      notification_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, payload_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, commands_);
      }
      for (int i = 0; i < preFetch_.size(); i++) {
        output.writeMessage(3, preFetch_.get(i));
      }
      for (int i = 0; i < notification_.size(); i++) {
        output.writeMessage(4, notification_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, payload_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, commands_);
      }
      for (int i = 0; i < preFetch_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, preFetch_.get(i));
      }
      for (int i = 0; i < notification_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, notification_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code ResponseWrapper}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapperOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ResponseWrapper_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ResponseWrapper_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper.class, com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getPayloadFieldBuilder();
          getCommandsFieldBuilder();
          getPreFetchFieldBuilder();
          getNotificationFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (payloadBuilder_ == null) {
          payload_ = com.akdeniz.googleplaycrawler.GooglePlay.Payload.getDefaultInstance();
        } else {
          payloadBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (commandsBuilder_ == null) {
          commands_ = com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.getDefaultInstance();
        } else {
          commandsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        if (preFetchBuilder_ == null) {
          preFetch_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          preFetchBuilder_.clear();
        }
        if (notificationBuilder_ == null) {
          notification_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          notificationBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ResponseWrapper_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper build() {
        com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper result = new com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (payloadBuilder_ == null) {
          result.payload_ = payload_;
        } else {
          result.payload_ = payloadBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (commandsBuilder_ == null) {
          result.commands_ = commands_;
        } else {
          result.commands_ = commandsBuilder_.build();
        }
        if (preFetchBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            preFetch_ = java.util.Collections.unmodifiableList(preFetch_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.preFetch_ = preFetch_;
        } else {
          result.preFetch_ = preFetchBuilder_.build();
        }
        if (notificationBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            notification_ = java.util.Collections.unmodifiableList(notification_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.notification_ = notification_;
        } else {
          result.notification_ = notificationBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper.getDefaultInstance()) return this;
        if (other.hasPayload()) {
          mergePayload(other.getPayload());
        }
        if (other.hasCommands()) {
          mergeCommands(other.getCommands());
        }
        if (preFetchBuilder_ == null) {
          if (!other.preFetch_.isEmpty()) {
            if (preFetch_.isEmpty()) {
              preFetch_ = other.preFetch_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensurePreFetchIsMutable();
              preFetch_.addAll(other.preFetch_);
            }
            onChanged();
          }
        } else {
          if (!other.preFetch_.isEmpty()) {
            if (preFetchBuilder_.isEmpty()) {
              preFetchBuilder_.dispose();
              preFetchBuilder_ = null;
              preFetch_ = other.preFetch_;
              bitField0_ = (bitField0_ & ~0x00000004);
              preFetchBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getPreFetchFieldBuilder() : null;
            } else {
              preFetchBuilder_.addAllMessages(other.preFetch_);
            }
          }
        }
        if (notificationBuilder_ == null) {
          if (!other.notification_.isEmpty()) {
            if (notification_.isEmpty()) {
              notification_ = other.notification_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureNotificationIsMutable();
              notification_.addAll(other.notification_);
            }
            onChanged();
          }
        } else {
          if (!other.notification_.isEmpty()) {
            if (notificationBuilder_.isEmpty()) {
              notificationBuilder_.dispose();
              notificationBuilder_ = null;
              notification_ = other.notification_;
              bitField0_ = (bitField0_ & ~0x00000008);
              notificationBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getNotificationFieldBuilder() : null;
            } else {
              notificationBuilder_.addAllMessages(other.notification_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.ResponseWrapper) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .Payload payload = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.Payload payload_ = com.akdeniz.googleplaycrawler.GooglePlay.Payload.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Payload, com.akdeniz.googleplaycrawler.GooglePlay.Payload.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PayloadOrBuilder> payloadBuilder_;
      /**
       * <code>optional .Payload payload = 1;</code>
       */
      public boolean hasPayload() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .Payload payload = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Payload getPayload() {
        if (payloadBuilder_ == null) {
          return payload_;
        } else {
          return payloadBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Payload payload = 1;</code>
       */
      public Builder setPayload(com.akdeniz.googleplaycrawler.GooglePlay.Payload value) {
        if (payloadBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          payload_ = value;
          onChanged();
        } else {
          payloadBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Payload payload = 1;</code>
       */
      public Builder setPayload(
          com.akdeniz.googleplaycrawler.GooglePlay.Payload.Builder builderForValue) {
        if (payloadBuilder_ == null) {
          payload_ = builderForValue.build();
          onChanged();
        } else {
          payloadBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Payload payload = 1;</code>
       */
      public Builder mergePayload(com.akdeniz.googleplaycrawler.GooglePlay.Payload value) {
        if (payloadBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              payload_ != com.akdeniz.googleplaycrawler.GooglePlay.Payload.getDefaultInstance()) {
            payload_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Payload.newBuilder(payload_).mergeFrom(value).buildPartial();
          } else {
            payload_ = value;
          }
          onChanged();
        } else {
          payloadBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .Payload payload = 1;</code>
       */
      public Builder clearPayload() {
        if (payloadBuilder_ == null) {
          payload_ = com.akdeniz.googleplaycrawler.GooglePlay.Payload.getDefaultInstance();
          onChanged();
        } else {
          payloadBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .Payload payload = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Payload.Builder getPayloadBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getPayloadFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Payload payload = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PayloadOrBuilder getPayloadOrBuilder() {
        if (payloadBuilder_ != null) {
          return payloadBuilder_.getMessageOrBuilder();
        } else {
          return payload_;
        }
      }
      /**
       * <code>optional .Payload payload = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Payload, com.akdeniz.googleplaycrawler.GooglePlay.Payload.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PayloadOrBuilder> 
          getPayloadFieldBuilder() {
        if (payloadBuilder_ == null) {
          payloadBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Payload, com.akdeniz.googleplaycrawler.GooglePlay.Payload.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PayloadOrBuilder>(
                  payload_,
                  getParentForChildren(),
                  isClean());
          payload_ = null;
        }
        return payloadBuilder_;
      }

      // optional .ServerCommands commands = 2;
      private com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands commands_ = com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands, com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ServerCommandsOrBuilder> commandsBuilder_;
      /**
       * <code>optional .ServerCommands commands = 2;</code>
       */
      public boolean hasCommands() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .ServerCommands commands = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands getCommands() {
        if (commandsBuilder_ == null) {
          return commands_;
        } else {
          return commandsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .ServerCommands commands = 2;</code>
       */
      public Builder setCommands(com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands value) {
        if (commandsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          commands_ = value;
          onChanged();
        } else {
          commandsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .ServerCommands commands = 2;</code>
       */
      public Builder setCommands(
          com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.Builder builderForValue) {
        if (commandsBuilder_ == null) {
          commands_ = builderForValue.build();
          onChanged();
        } else {
          commandsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .ServerCommands commands = 2;</code>
       */
      public Builder mergeCommands(com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands value) {
        if (commandsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              commands_ != com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.getDefaultInstance()) {
            commands_ =
              com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.newBuilder(commands_).mergeFrom(value).buildPartial();
          } else {
            commands_ = value;
          }
          onChanged();
        } else {
          commandsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .ServerCommands commands = 2;</code>
       */
      public Builder clearCommands() {
        if (commandsBuilder_ == null) {
          commands_ = com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.getDefaultInstance();
          onChanged();
        } else {
          commandsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .ServerCommands commands = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.Builder getCommandsBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getCommandsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .ServerCommands commands = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ServerCommandsOrBuilder getCommandsOrBuilder() {
        if (commandsBuilder_ != null) {
          return commandsBuilder_.getMessageOrBuilder();
        } else {
          return commands_;
        }
      }
      /**
       * <code>optional .ServerCommands commands = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands, com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ServerCommandsOrBuilder> 
          getCommandsFieldBuilder() {
        if (commandsBuilder_ == null) {
          commandsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands, com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ServerCommandsOrBuilder>(
                  commands_,
                  getParentForChildren(),
                  isClean());
          commands_ = null;
        }
        return commandsBuilder_;
      }

      // repeated .PreFetch preFetch = 3;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PreFetch> preFetch_ =
        java.util.Collections.emptyList();
      private void ensurePreFetchIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          preFetch_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.PreFetch>(preFetch_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PreFetch, com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PreFetchOrBuilder> preFetchBuilder_;

      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PreFetch> getPreFetchList() {
        if (preFetchBuilder_ == null) {
          return java.util.Collections.unmodifiableList(preFetch_);
        } else {
          return preFetchBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public int getPreFetchCount() {
        if (preFetchBuilder_ == null) {
          return preFetch_.size();
        } else {
          return preFetchBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PreFetch getPreFetch(int index) {
        if (preFetchBuilder_ == null) {
          return preFetch_.get(index);
        } else {
          return preFetchBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public Builder setPreFetch(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PreFetch value) {
        if (preFetchBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePreFetchIsMutable();
          preFetch_.set(index, value);
          onChanged();
        } else {
          preFetchBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public Builder setPreFetch(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.Builder builderForValue) {
        if (preFetchBuilder_ == null) {
          ensurePreFetchIsMutable();
          preFetch_.set(index, builderForValue.build());
          onChanged();
        } else {
          preFetchBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public Builder addPreFetch(com.akdeniz.googleplaycrawler.GooglePlay.PreFetch value) {
        if (preFetchBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePreFetchIsMutable();
          preFetch_.add(value);
          onChanged();
        } else {
          preFetchBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public Builder addPreFetch(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PreFetch value) {
        if (preFetchBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePreFetchIsMutable();
          preFetch_.add(index, value);
          onChanged();
        } else {
          preFetchBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public Builder addPreFetch(
          com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.Builder builderForValue) {
        if (preFetchBuilder_ == null) {
          ensurePreFetchIsMutable();
          preFetch_.add(builderForValue.build());
          onChanged();
        } else {
          preFetchBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public Builder addPreFetch(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.Builder builderForValue) {
        if (preFetchBuilder_ == null) {
          ensurePreFetchIsMutable();
          preFetch_.add(index, builderForValue.build());
          onChanged();
        } else {
          preFetchBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public Builder addAllPreFetch(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.PreFetch> values) {
        if (preFetchBuilder_ == null) {
          ensurePreFetchIsMutable();
          super.addAll(values, preFetch_);
          onChanged();
        } else {
          preFetchBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public Builder clearPreFetch() {
        if (preFetchBuilder_ == null) {
          preFetch_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          preFetchBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public Builder removePreFetch(int index) {
        if (preFetchBuilder_ == null) {
          ensurePreFetchIsMutable();
          preFetch_.remove(index);
          onChanged();
        } else {
          preFetchBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.Builder getPreFetchBuilder(
          int index) {
        return getPreFetchFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PreFetchOrBuilder getPreFetchOrBuilder(
          int index) {
        if (preFetchBuilder_ == null) {
          return preFetch_.get(index);  } else {
          return preFetchBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.PreFetchOrBuilder> 
           getPreFetchOrBuilderList() {
        if (preFetchBuilder_ != null) {
          return preFetchBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(preFetch_);
        }
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.Builder addPreFetchBuilder() {
        return getPreFetchFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.getDefaultInstance());
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.Builder addPreFetchBuilder(
          int index) {
        return getPreFetchFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.getDefaultInstance());
      }
      /**
       * <code>repeated .PreFetch preFetch = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.Builder> 
           getPreFetchBuilderList() {
        return getPreFetchFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PreFetch, com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PreFetchOrBuilder> 
          getPreFetchFieldBuilder() {
        if (preFetchBuilder_ == null) {
          preFetchBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.PreFetch, com.akdeniz.googleplaycrawler.GooglePlay.PreFetch.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PreFetchOrBuilder>(
                  preFetch_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          preFetch_ = null;
        }
        return preFetchBuilder_;
      }

      // repeated .Notification notification = 4;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Notification> notification_ =
        java.util.Collections.emptyList();
      private void ensureNotificationIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          notification_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Notification>(notification_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Notification, com.akdeniz.googleplaycrawler.GooglePlay.Notification.Builder, com.akdeniz.googleplaycrawler.GooglePlay.NotificationOrBuilder> notificationBuilder_;

      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Notification> getNotificationList() {
        if (notificationBuilder_ == null) {
          return java.util.Collections.unmodifiableList(notification_);
        } else {
          return notificationBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public int getNotificationCount() {
        if (notificationBuilder_ == null) {
          return notification_.size();
        } else {
          return notificationBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Notification getNotification(int index) {
        if (notificationBuilder_ == null) {
          return notification_.get(index);
        } else {
          return notificationBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public Builder setNotification(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Notification value) {
        if (notificationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNotificationIsMutable();
          notification_.set(index, value);
          onChanged();
        } else {
          notificationBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public Builder setNotification(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Notification.Builder builderForValue) {
        if (notificationBuilder_ == null) {
          ensureNotificationIsMutable();
          notification_.set(index, builderForValue.build());
          onChanged();
        } else {
          notificationBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public Builder addNotification(com.akdeniz.googleplaycrawler.GooglePlay.Notification value) {
        if (notificationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNotificationIsMutable();
          notification_.add(value);
          onChanged();
        } else {
          notificationBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public Builder addNotification(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Notification value) {
        if (notificationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureNotificationIsMutable();
          notification_.add(index, value);
          onChanged();
        } else {
          notificationBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public Builder addNotification(
          com.akdeniz.googleplaycrawler.GooglePlay.Notification.Builder builderForValue) {
        if (notificationBuilder_ == null) {
          ensureNotificationIsMutable();
          notification_.add(builderForValue.build());
          onChanged();
        } else {
          notificationBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public Builder addNotification(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Notification.Builder builderForValue) {
        if (notificationBuilder_ == null) {
          ensureNotificationIsMutable();
          notification_.add(index, builderForValue.build());
          onChanged();
        } else {
          notificationBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public Builder addAllNotification(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Notification> values) {
        if (notificationBuilder_ == null) {
          ensureNotificationIsMutable();
          super.addAll(values, notification_);
          onChanged();
        } else {
          notificationBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public Builder clearNotification() {
        if (notificationBuilder_ == null) {
          notification_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          notificationBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public Builder removeNotification(int index) {
        if (notificationBuilder_ == null) {
          ensureNotificationIsMutable();
          notification_.remove(index);
          onChanged();
        } else {
          notificationBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Notification.Builder getNotificationBuilder(
          int index) {
        return getNotificationFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.NotificationOrBuilder getNotificationOrBuilder(
          int index) {
        if (notificationBuilder_ == null) {
          return notification_.get(index);  } else {
          return notificationBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.NotificationOrBuilder> 
           getNotificationOrBuilderList() {
        if (notificationBuilder_ != null) {
          return notificationBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(notification_);
        }
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Notification.Builder addNotificationBuilder() {
        return getNotificationFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Notification.getDefaultInstance());
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Notification.Builder addNotificationBuilder(
          int index) {
        return getNotificationFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Notification.getDefaultInstance());
      }
      /**
       * <code>repeated .Notification notification = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Notification.Builder> 
           getNotificationBuilderList() {
        return getNotificationFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Notification, com.akdeniz.googleplaycrawler.GooglePlay.Notification.Builder, com.akdeniz.googleplaycrawler.GooglePlay.NotificationOrBuilder> 
          getNotificationFieldBuilder() {
        if (notificationBuilder_ == null) {
          notificationBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Notification, com.akdeniz.googleplaycrawler.GooglePlay.Notification.Builder, com.akdeniz.googleplaycrawler.GooglePlay.NotificationOrBuilder>(
                  notification_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          notification_ = null;
        }
        return notificationBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:ResponseWrapper)
    }

    static {
      defaultInstance = new ResponseWrapper(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:ResponseWrapper)
  }

  public interface ServerCommandsOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool clearCache = 1;
    /**
     * <code>optional bool clearCache = 1;</code>
     */
    boolean hasClearCache();
    /**
     * <code>optional bool clearCache = 1;</code>
     */
    boolean getClearCache();

    // optional string displayErrorMessage = 2;
    /**
     * <code>optional string displayErrorMessage = 2;</code>
     */
    boolean hasDisplayErrorMessage();
    /**
     * <code>optional string displayErrorMessage = 2;</code>
     */
    java.lang.String getDisplayErrorMessage();
    /**
     * <code>optional string displayErrorMessage = 2;</code>
     */
    com.google.protobuf.ByteString
        getDisplayErrorMessageBytes();

    // optional string logErrorStacktrace = 3;
    /**
     * <code>optional string logErrorStacktrace = 3;</code>
     */
    boolean hasLogErrorStacktrace();
    /**
     * <code>optional string logErrorStacktrace = 3;</code>
     */
    java.lang.String getLogErrorStacktrace();
    /**
     * <code>optional string logErrorStacktrace = 3;</code>
     */
    com.google.protobuf.ByteString
        getLogErrorStacktraceBytes();
  }
  /**
   * Protobuf type {@code ServerCommands}
   */
  public static final class ServerCommands extends
      com.google.protobuf.GeneratedMessage
      implements ServerCommandsOrBuilder {
    // Use ServerCommands.newBuilder() to construct.
    private ServerCommands(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ServerCommands(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ServerCommands defaultInstance;
    public static ServerCommands getDefaultInstance() {
      return defaultInstance;
    }

    public ServerCommands getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ServerCommands(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              clearCache_ = input.readBool();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              displayErrorMessage_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              logErrorStacktrace_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ServerCommands_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ServerCommands_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.class, com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.Builder.class);
    }

    public static com.google.protobuf.Parser<ServerCommands> PARSER =
        new com.google.protobuf.AbstractParser<ServerCommands>() {
      public ServerCommands parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ServerCommands(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ServerCommands> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool clearCache = 1;
    public static final int CLEARCACHE_FIELD_NUMBER = 1;
    private boolean clearCache_;
    /**
     * <code>optional bool clearCache = 1;</code>
     */
    public boolean hasClearCache() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool clearCache = 1;</code>
     */
    public boolean getClearCache() {
      return clearCache_;
    }

    // optional string displayErrorMessage = 2;
    public static final int DISPLAYERRORMESSAGE_FIELD_NUMBER = 2;
    private java.lang.Object displayErrorMessage_;
    /**
     * <code>optional string displayErrorMessage = 2;</code>
     */
    public boolean hasDisplayErrorMessage() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string displayErrorMessage = 2;</code>
     */
    public java.lang.String getDisplayErrorMessage() {
      java.lang.Object ref = displayErrorMessage_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          displayErrorMessage_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string displayErrorMessage = 2;</code>
     */
    public com.google.protobuf.ByteString
        getDisplayErrorMessageBytes() {
      java.lang.Object ref = displayErrorMessage_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        displayErrorMessage_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string logErrorStacktrace = 3;
    public static final int LOGERRORSTACKTRACE_FIELD_NUMBER = 3;
    private java.lang.Object logErrorStacktrace_;
    /**
     * <code>optional string logErrorStacktrace = 3;</code>
     */
    public boolean hasLogErrorStacktrace() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string logErrorStacktrace = 3;</code>
     */
    public java.lang.String getLogErrorStacktrace() {
      java.lang.Object ref = logErrorStacktrace_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          logErrorStacktrace_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string logErrorStacktrace = 3;</code>
     */
    public com.google.protobuf.ByteString
        getLogErrorStacktraceBytes() {
      java.lang.Object ref = logErrorStacktrace_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        logErrorStacktrace_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      clearCache_ = false;
      displayErrorMessage_ = "";
      logErrorStacktrace_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, clearCache_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getDisplayErrorMessageBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getLogErrorStacktraceBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, clearCache_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getDisplayErrorMessageBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getLogErrorStacktraceBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code ServerCommands}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.ServerCommandsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ServerCommands_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ServerCommands_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.class, com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        clearCache_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        displayErrorMessage_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        logErrorStacktrace_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ServerCommands_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands build() {
        com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands result = new com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.clearCache_ = clearCache_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.displayErrorMessage_ = displayErrorMessage_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.logErrorStacktrace_ = logErrorStacktrace_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands.getDefaultInstance()) return this;
        if (other.hasClearCache()) {
          setClearCache(other.getClearCache());
        }
        if (other.hasDisplayErrorMessage()) {
          bitField0_ |= 0x00000002;
          displayErrorMessage_ = other.displayErrorMessage_;
          onChanged();
        }
        if (other.hasLogErrorStacktrace()) {
          bitField0_ |= 0x00000004;
          logErrorStacktrace_ = other.logErrorStacktrace_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.ServerCommands) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool clearCache = 1;
      private boolean clearCache_ ;
      /**
       * <code>optional bool clearCache = 1;</code>
       */
      public boolean hasClearCache() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bool clearCache = 1;</code>
       */
      public boolean getClearCache() {
        return clearCache_;
      }
      /**
       * <code>optional bool clearCache = 1;</code>
       */
      public Builder setClearCache(boolean value) {
        bitField0_ |= 0x00000001;
        clearCache_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool clearCache = 1;</code>
       */
      public Builder clearClearCache() {
        bitField0_ = (bitField0_ & ~0x00000001);
        clearCache_ = false;
        onChanged();
        return this;
      }

      // optional string displayErrorMessage = 2;
      private java.lang.Object displayErrorMessage_ = "";
      /**
       * <code>optional string displayErrorMessage = 2;</code>
       */
      public boolean hasDisplayErrorMessage() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string displayErrorMessage = 2;</code>
       */
      public java.lang.String getDisplayErrorMessage() {
        java.lang.Object ref = displayErrorMessage_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          displayErrorMessage_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string displayErrorMessage = 2;</code>
       */
      public com.google.protobuf.ByteString
          getDisplayErrorMessageBytes() {
        java.lang.Object ref = displayErrorMessage_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          displayErrorMessage_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string displayErrorMessage = 2;</code>
       */
      public Builder setDisplayErrorMessage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        displayErrorMessage_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string displayErrorMessage = 2;</code>
       */
      public Builder clearDisplayErrorMessage() {
        bitField0_ = (bitField0_ & ~0x00000002);
        displayErrorMessage_ = getDefaultInstance().getDisplayErrorMessage();
        onChanged();
        return this;
      }
      /**
       * <code>optional string displayErrorMessage = 2;</code>
       */
      public Builder setDisplayErrorMessageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        displayErrorMessage_ = value;
        onChanged();
        return this;
      }

      // optional string logErrorStacktrace = 3;
      private java.lang.Object logErrorStacktrace_ = "";
      /**
       * <code>optional string logErrorStacktrace = 3;</code>
       */
      public boolean hasLogErrorStacktrace() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string logErrorStacktrace = 3;</code>
       */
      public java.lang.String getLogErrorStacktrace() {
        java.lang.Object ref = logErrorStacktrace_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          logErrorStacktrace_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string logErrorStacktrace = 3;</code>
       */
      public com.google.protobuf.ByteString
          getLogErrorStacktraceBytes() {
        java.lang.Object ref = logErrorStacktrace_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          logErrorStacktrace_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string logErrorStacktrace = 3;</code>
       */
      public Builder setLogErrorStacktrace(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        logErrorStacktrace_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string logErrorStacktrace = 3;</code>
       */
      public Builder clearLogErrorStacktrace() {
        bitField0_ = (bitField0_ & ~0x00000004);
        logErrorStacktrace_ = getDefaultInstance().getLogErrorStacktrace();
        onChanged();
        return this;
      }
      /**
       * <code>optional string logErrorStacktrace = 3;</code>
       */
      public Builder setLogErrorStacktraceBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        logErrorStacktrace_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:ServerCommands)
    }

    static {
      defaultInstance = new ServerCommands(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:ServerCommands)
  }

  public interface GetReviewsResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // repeated .Review review = 1;
    /**
     * <code>repeated .Review review = 1;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Review> 
        getReviewList();
    /**
     * <code>repeated .Review review = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Review getReview(int index);
    /**
     * <code>repeated .Review review = 1;</code>
     */
    int getReviewCount();
    /**
     * <code>repeated .Review review = 1;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder> 
        getReviewOrBuilderList();
    /**
     * <code>repeated .Review review = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder getReviewOrBuilder(
        int index);

    // optional int64 matchingCount = 2;
    /**
     * <code>optional int64 matchingCount = 2;</code>
     */
    boolean hasMatchingCount();
    /**
     * <code>optional int64 matchingCount = 2;</code>
     */
    long getMatchingCount();
  }
  /**
   * Protobuf type {@code GetReviewsResponse}
   */
  public static final class GetReviewsResponse extends
      com.google.protobuf.GeneratedMessage
      implements GetReviewsResponseOrBuilder {
    // Use GetReviewsResponse.newBuilder() to construct.
    private GetReviewsResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GetReviewsResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GetReviewsResponse defaultInstance;
    public static GetReviewsResponse getDefaultInstance() {
      return defaultInstance;
    }

    public GetReviewsResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GetReviewsResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                review_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Review>();
                mutable_bitField0_ |= 0x00000001;
              }
              review_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Review.PARSER, extensionRegistry));
              break;
            }
            case 16: {
              bitField0_ |= 0x00000001;
              matchingCount_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
          review_ = java.util.Collections.unmodifiableList(review_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_GetReviewsResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_GetReviewsResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.Builder.class);
    }

    public static com.google.protobuf.Parser<GetReviewsResponse> PARSER =
        new com.google.protobuf.AbstractParser<GetReviewsResponse>() {
      public GetReviewsResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetReviewsResponse(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GetReviewsResponse> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // repeated .Review review = 1;
    public static final int REVIEW_FIELD_NUMBER = 1;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Review> review_;
    /**
     * <code>repeated .Review review = 1;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Review> getReviewList() {
      return review_;
    }
    /**
     * <code>repeated .Review review = 1;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder> 
        getReviewOrBuilderList() {
      return review_;
    }
    /**
     * <code>repeated .Review review = 1;</code>
     */
    public int getReviewCount() {
      return review_.size();
    }
    /**
     * <code>repeated .Review review = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Review getReview(int index) {
      return review_.get(index);
    }
    /**
     * <code>repeated .Review review = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder getReviewOrBuilder(
        int index) {
      return review_.get(index);
    }

    // optional int64 matchingCount = 2;
    public static final int MATCHINGCOUNT_FIELD_NUMBER = 2;
    private long matchingCount_;
    /**
     * <code>optional int64 matchingCount = 2;</code>
     */
    public boolean hasMatchingCount() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 matchingCount = 2;</code>
     */
    public long getMatchingCount() {
      return matchingCount_;
    }

    private void initFields() {
      review_ = java.util.Collections.emptyList();
      matchingCount_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int i = 0; i < review_.size(); i++) {
        output.writeMessage(1, review_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(2, matchingCount_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      for (int i = 0; i < review_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, review_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, matchingCount_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code GetReviewsResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_GetReviewsResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_GetReviewsResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getReviewFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (reviewBuilder_ == null) {
          review_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          reviewBuilder_.clear();
        }
        matchingCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_GetReviewsResponse_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse build() {
        com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse result = new com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (reviewBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            review_ = java.util.Collections.unmodifiableList(review_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.review_ = review_;
        } else {
          result.review_ = reviewBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000001;
        }
        result.matchingCount_ = matchingCount_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.getDefaultInstance()) return this;
        if (reviewBuilder_ == null) {
          if (!other.review_.isEmpty()) {
            if (review_.isEmpty()) {
              review_ = other.review_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureReviewIsMutable();
              review_.addAll(other.review_);
            }
            onChanged();
          }
        } else {
          if (!other.review_.isEmpty()) {
            if (reviewBuilder_.isEmpty()) {
              reviewBuilder_.dispose();
              reviewBuilder_ = null;
              review_ = other.review_;
              bitField0_ = (bitField0_ & ~0x00000001);
              reviewBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getReviewFieldBuilder() : null;
            } else {
              reviewBuilder_.addAllMessages(other.review_);
            }
          }
        }
        if (other.hasMatchingCount()) {
          setMatchingCount(other.getMatchingCount());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // repeated .Review review = 1;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Review> review_ =
        java.util.Collections.emptyList();
      private void ensureReviewIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          review_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Review>(review_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Review, com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder> reviewBuilder_;

      /**
       * <code>repeated .Review review = 1;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Review> getReviewList() {
        if (reviewBuilder_ == null) {
          return java.util.Collections.unmodifiableList(review_);
        } else {
          return reviewBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public int getReviewCount() {
        if (reviewBuilder_ == null) {
          return review_.size();
        } else {
          return reviewBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Review getReview(int index) {
        if (reviewBuilder_ == null) {
          return review_.get(index);
        } else {
          return reviewBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public Builder setReview(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Review value) {
        if (reviewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureReviewIsMutable();
          review_.set(index, value);
          onChanged();
        } else {
          reviewBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public Builder setReview(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder builderForValue) {
        if (reviewBuilder_ == null) {
          ensureReviewIsMutable();
          review_.set(index, builderForValue.build());
          onChanged();
        } else {
          reviewBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public Builder addReview(com.akdeniz.googleplaycrawler.GooglePlay.Review value) {
        if (reviewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureReviewIsMutable();
          review_.add(value);
          onChanged();
        } else {
          reviewBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public Builder addReview(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Review value) {
        if (reviewBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureReviewIsMutable();
          review_.add(index, value);
          onChanged();
        } else {
          reviewBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public Builder addReview(
          com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder builderForValue) {
        if (reviewBuilder_ == null) {
          ensureReviewIsMutable();
          review_.add(builderForValue.build());
          onChanged();
        } else {
          reviewBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public Builder addReview(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder builderForValue) {
        if (reviewBuilder_ == null) {
          ensureReviewIsMutable();
          review_.add(index, builderForValue.build());
          onChanged();
        } else {
          reviewBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public Builder addAllReview(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Review> values) {
        if (reviewBuilder_ == null) {
          ensureReviewIsMutable();
          super.addAll(values, review_);
          onChanged();
        } else {
          reviewBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public Builder clearReview() {
        if (reviewBuilder_ == null) {
          review_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          reviewBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public Builder removeReview(int index) {
        if (reviewBuilder_ == null) {
          ensureReviewIsMutable();
          review_.remove(index);
          onChanged();
        } else {
          reviewBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder getReviewBuilder(
          int index) {
        return getReviewFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder getReviewOrBuilder(
          int index) {
        if (reviewBuilder_ == null) {
          return review_.get(index);  } else {
          return reviewBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder> 
           getReviewOrBuilderList() {
        if (reviewBuilder_ != null) {
          return reviewBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(review_);
        }
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder addReviewBuilder() {
        return getReviewFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Review.getDefaultInstance());
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder addReviewBuilder(
          int index) {
        return getReviewFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Review.getDefaultInstance());
      }
      /**
       * <code>repeated .Review review = 1;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder> 
           getReviewBuilderList() {
        return getReviewFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Review, com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder> 
          getReviewFieldBuilder() {
        if (reviewBuilder_ == null) {
          reviewBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Review, com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder, com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder>(
                  review_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          review_ = null;
        }
        return reviewBuilder_;
      }

      // optional int64 matchingCount = 2;
      private long matchingCount_ ;
      /**
       * <code>optional int64 matchingCount = 2;</code>
       */
      public boolean hasMatchingCount() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 matchingCount = 2;</code>
       */
      public long getMatchingCount() {
        return matchingCount_;
      }
      /**
       * <code>optional int64 matchingCount = 2;</code>
       */
      public Builder setMatchingCount(long value) {
        bitField0_ |= 0x00000002;
        matchingCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 matchingCount = 2;</code>
       */
      public Builder clearMatchingCount() {
        bitField0_ = (bitField0_ & ~0x00000002);
        matchingCount_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:GetReviewsResponse)
    }

    static {
      defaultInstance = new GetReviewsResponse(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:GetReviewsResponse)
  }

  public interface ReviewOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string authorName = 1;
    /**
     * <code>optional string authorName = 1;</code>
     */
    boolean hasAuthorName();
    /**
     * <code>optional string authorName = 1;</code>
     */
    java.lang.String getAuthorName();
    /**
     * <code>optional string authorName = 1;</code>
     */
    com.google.protobuf.ByteString
        getAuthorNameBytes();

    // optional string url = 2;
    /**
     * <code>optional string url = 2;</code>
     */
    boolean hasUrl();
    /**
     * <code>optional string url = 2;</code>
     */
    java.lang.String getUrl();
    /**
     * <code>optional string url = 2;</code>
     */
    com.google.protobuf.ByteString
        getUrlBytes();

    // optional string source = 3;
    /**
     * <code>optional string source = 3;</code>
     */
    boolean hasSource();
    /**
     * <code>optional string source = 3;</code>
     */
    java.lang.String getSource();
    /**
     * <code>optional string source = 3;</code>
     */
    com.google.protobuf.ByteString
        getSourceBytes();

    // optional string documentVersion = 4;
    /**
     * <code>optional string documentVersion = 4;</code>
     */
    boolean hasDocumentVersion();
    /**
     * <code>optional string documentVersion = 4;</code>
     */
    java.lang.String getDocumentVersion();
    /**
     * <code>optional string documentVersion = 4;</code>
     */
    com.google.protobuf.ByteString
        getDocumentVersionBytes();

    // optional int64 timestampMsec = 5;
    /**
     * <code>optional int64 timestampMsec = 5;</code>
     */
    boolean hasTimestampMsec();
    /**
     * <code>optional int64 timestampMsec = 5;</code>
     */
    long getTimestampMsec();

    // optional int32 starRating = 6;
    /**
     * <code>optional int32 starRating = 6;</code>
     */
    boolean hasStarRating();
    /**
     * <code>optional int32 starRating = 6;</code>
     */
    int getStarRating();

    // optional string title = 7;
    /**
     * <code>optional string title = 7;</code>
     */
    boolean hasTitle();
    /**
     * <code>optional string title = 7;</code>
     */
    java.lang.String getTitle();
    /**
     * <code>optional string title = 7;</code>
     */
    com.google.protobuf.ByteString
        getTitleBytes();

    // optional string comment = 8;
    /**
     * <code>optional string comment = 8;</code>
     */
    boolean hasComment();
    /**
     * <code>optional string comment = 8;</code>
     */
    java.lang.String getComment();
    /**
     * <code>optional string comment = 8;</code>
     */
    com.google.protobuf.ByteString
        getCommentBytes();

    // optional string commentId = 9;
    /**
     * <code>optional string commentId = 9;</code>
     */
    boolean hasCommentId();
    /**
     * <code>optional string commentId = 9;</code>
     */
    java.lang.String getCommentId();
    /**
     * <code>optional string commentId = 9;</code>
     */
    com.google.protobuf.ByteString
        getCommentIdBytes();

    // optional string deviceName = 19;
    /**
     * <code>optional string deviceName = 19;</code>
     */
    boolean hasDeviceName();
    /**
     * <code>optional string deviceName = 19;</code>
     */
    java.lang.String getDeviceName();
    /**
     * <code>optional string deviceName = 19;</code>
     */
    com.google.protobuf.ByteString
        getDeviceNameBytes();

    // optional string replyText = 29;
    /**
     * <code>optional string replyText = 29;</code>
     */
    boolean hasReplyText();
    /**
     * <code>optional string replyText = 29;</code>
     */
    java.lang.String getReplyText();
    /**
     * <code>optional string replyText = 29;</code>
     */
    com.google.protobuf.ByteString
        getReplyTextBytes();

    // optional int64 replyTimestampMsec = 30;
    /**
     * <code>optional int64 replyTimestampMsec = 30;</code>
     */
    boolean hasReplyTimestampMsec();
    /**
     * <code>optional int64 replyTimestampMsec = 30;</code>
     */
    long getReplyTimestampMsec();

    // optional .Author author = 31;
    /**
     * <code>optional .Author author = 31;</code>
     */
    boolean hasAuthor();
    /**
     * <code>optional .Author author = 31;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Author getAuthor();
    /**
     * <code>optional .Author author = 31;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AuthorOrBuilder getAuthorOrBuilder();
  }
  /**
   * Protobuf type {@code Review}
   */
  public static final class Review extends
      com.google.protobuf.GeneratedMessage
      implements ReviewOrBuilder {
    // Use Review.newBuilder() to construct.
    private Review(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Review(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Review defaultInstance;
    public static Review getDefaultInstance() {
      return defaultInstance;
    }

    public Review getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Review(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              authorName_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              url_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              source_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              documentVersion_ = input.readBytes();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              timestampMsec_ = input.readInt64();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              starRating_ = input.readInt32();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000040;
              title_ = input.readBytes();
              break;
            }
            case 66: {
              bitField0_ |= 0x00000080;
              comment_ = input.readBytes();
              break;
            }
            case 74: {
              bitField0_ |= 0x00000100;
              commentId_ = input.readBytes();
              break;
            }
            case 154: {
              bitField0_ |= 0x00000200;
              deviceName_ = input.readBytes();
              break;
            }
            case 234: {
              bitField0_ |= 0x00000400;
              replyText_ = input.readBytes();
              break;
            }
            case 240: {
              bitField0_ |= 0x00000800;
              replyTimestampMsec_ = input.readInt64();
              break;
            }
            case 250: {
              com.akdeniz.googleplaycrawler.GooglePlay.Author.Builder subBuilder = null;
              if (((bitField0_ & 0x00001000) == 0x00001000)) {
                subBuilder = author_.toBuilder();
              }
              author_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Author.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(author_);
                author_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00001000;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Review_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Review_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Review.class, com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder.class);
    }

    public static com.google.protobuf.Parser<Review> PARSER =
        new com.google.protobuf.AbstractParser<Review>() {
      public Review parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Review(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Review> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string authorName = 1;
    public static final int AUTHORNAME_FIELD_NUMBER = 1;
    private java.lang.Object authorName_;
    /**
     * <code>optional string authorName = 1;</code>
     */
    public boolean hasAuthorName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string authorName = 1;</code>
     */
    public java.lang.String getAuthorName() {
      java.lang.Object ref = authorName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          authorName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string authorName = 1;</code>
     */
    public com.google.protobuf.ByteString
        getAuthorNameBytes() {
      java.lang.Object ref = authorName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        authorName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string url = 2;
    public static final int URL_FIELD_NUMBER = 2;
    private java.lang.Object url_;
    /**
     * <code>optional string url = 2;</code>
     */
    public boolean hasUrl() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string url = 2;</code>
     */
    public java.lang.String getUrl() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          url_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string url = 2;</code>
     */
    public com.google.protobuf.ByteString
        getUrlBytes() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        url_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string source = 3;
    public static final int SOURCE_FIELD_NUMBER = 3;
    private java.lang.Object source_;
    /**
     * <code>optional string source = 3;</code>
     */
    public boolean hasSource() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string source = 3;</code>
     */
    public java.lang.String getSource() {
      java.lang.Object ref = source_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          source_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string source = 3;</code>
     */
    public com.google.protobuf.ByteString
        getSourceBytes() {
      java.lang.Object ref = source_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        source_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string documentVersion = 4;
    public static final int DOCUMENTVERSION_FIELD_NUMBER = 4;
    private java.lang.Object documentVersion_;
    /**
     * <code>optional string documentVersion = 4;</code>
     */
    public boolean hasDocumentVersion() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string documentVersion = 4;</code>
     */
    public java.lang.String getDocumentVersion() {
      java.lang.Object ref = documentVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          documentVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string documentVersion = 4;</code>
     */
    public com.google.protobuf.ByteString
        getDocumentVersionBytes() {
      java.lang.Object ref = documentVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        documentVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 timestampMsec = 5;
    public static final int TIMESTAMPMSEC_FIELD_NUMBER = 5;
    private long timestampMsec_;
    /**
     * <code>optional int64 timestampMsec = 5;</code>
     */
    public boolean hasTimestampMsec() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional int64 timestampMsec = 5;</code>
     */
    public long getTimestampMsec() {
      return timestampMsec_;
    }

    // optional int32 starRating = 6;
    public static final int STARRATING_FIELD_NUMBER = 6;
    private int starRating_;
    /**
     * <code>optional int32 starRating = 6;</code>
     */
    public boolean hasStarRating() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional int32 starRating = 6;</code>
     */
    public int getStarRating() {
      return starRating_;
    }

    // optional string title = 7;
    public static final int TITLE_FIELD_NUMBER = 7;
    private java.lang.Object title_;
    /**
     * <code>optional string title = 7;</code>
     */
    public boolean hasTitle() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional string title = 7;</code>
     */
    public java.lang.String getTitle() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          title_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string title = 7;</code>
     */
    public com.google.protobuf.ByteString
        getTitleBytes() {
      java.lang.Object ref = title_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        title_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string comment = 8;
    public static final int COMMENT_FIELD_NUMBER = 8;
    private java.lang.Object comment_;
    /**
     * <code>optional string comment = 8;</code>
     */
    public boolean hasComment() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional string comment = 8;</code>
     */
    public java.lang.String getComment() {
      java.lang.Object ref = comment_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          comment_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string comment = 8;</code>
     */
    public com.google.protobuf.ByteString
        getCommentBytes() {
      java.lang.Object ref = comment_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        comment_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string commentId = 9;
    public static final int COMMENTID_FIELD_NUMBER = 9;
    private java.lang.Object commentId_;
    /**
     * <code>optional string commentId = 9;</code>
     */
    public boolean hasCommentId() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional string commentId = 9;</code>
     */
    public java.lang.String getCommentId() {
      java.lang.Object ref = commentId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          commentId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string commentId = 9;</code>
     */
    public com.google.protobuf.ByteString
        getCommentIdBytes() {
      java.lang.Object ref = commentId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        commentId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string deviceName = 19;
    public static final int DEVICENAME_FIELD_NUMBER = 19;
    private java.lang.Object deviceName_;
    /**
     * <code>optional string deviceName = 19;</code>
     */
    public boolean hasDeviceName() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional string deviceName = 19;</code>
     */
    public java.lang.String getDeviceName() {
      java.lang.Object ref = deviceName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          deviceName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string deviceName = 19;</code>
     */
    public com.google.protobuf.ByteString
        getDeviceNameBytes() {
      java.lang.Object ref = deviceName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        deviceName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string replyText = 29;
    public static final int REPLYTEXT_FIELD_NUMBER = 29;
    private java.lang.Object replyText_;
    /**
     * <code>optional string replyText = 29;</code>
     */
    public boolean hasReplyText() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional string replyText = 29;</code>
     */
    public java.lang.String getReplyText() {
      java.lang.Object ref = replyText_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          replyText_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string replyText = 29;</code>
     */
    public com.google.protobuf.ByteString
        getReplyTextBytes() {
      java.lang.Object ref = replyText_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        replyText_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 replyTimestampMsec = 30;
    public static final int REPLYTIMESTAMPMSEC_FIELD_NUMBER = 30;
    private long replyTimestampMsec_;
    /**
     * <code>optional int64 replyTimestampMsec = 30;</code>
     */
    public boolean hasReplyTimestampMsec() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional int64 replyTimestampMsec = 30;</code>
     */
    public long getReplyTimestampMsec() {
      return replyTimestampMsec_;
    }

    // optional .Author author = 31;
    public static final int AUTHOR_FIELD_NUMBER = 31;
    private com.akdeniz.googleplaycrawler.GooglePlay.Author author_;
    /**
     * <code>optional .Author author = 31;</code>
     */
    public boolean hasAuthor() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <code>optional .Author author = 31;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Author getAuthor() {
      return author_;
    }
    /**
     * <code>optional .Author author = 31;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AuthorOrBuilder getAuthorOrBuilder() {
      return author_;
    }

    private void initFields() {
      authorName_ = "";
      url_ = "";
      source_ = "";
      documentVersion_ = "";
      timestampMsec_ = 0L;
      starRating_ = 0;
      title_ = "";
      comment_ = "";
      commentId_ = "";
      deviceName_ = "";
      replyText_ = "";
      replyTimestampMsec_ = 0L;
      author_ = com.akdeniz.googleplaycrawler.GooglePlay.Author.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getAuthorNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getUrlBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getSourceBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getDocumentVersionBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(5, timestampMsec_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt32(6, starRating_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBytes(7, getTitleBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBytes(8, getCommentBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBytes(9, getCommentIdBytes());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBytes(19, getDeviceNameBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBytes(29, getReplyTextBytes());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeInt64(30, replyTimestampMsec_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeMessage(31, author_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getAuthorNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getUrlBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getSourceBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getDocumentVersionBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, timestampMsec_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, starRating_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getTitleBytes());
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getCommentBytes());
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(9, getCommentIdBytes());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(19, getDeviceNameBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(29, getReplyTextBytes());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(30, replyTimestampMsec_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(31, author_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.Review parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Review parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Review parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Review parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Review parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Review parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Review parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Review parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Review parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Review parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Review prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Review}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.ReviewOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Review_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Review_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Review.class, com.akdeniz.googleplaycrawler.GooglePlay.Review.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Review.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getAuthorFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        authorName_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        url_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        source_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        documentVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        timestampMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        starRating_ = 0;
        bitField0_ = (bitField0_ & ~0x00000020);
        title_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        comment_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        commentId_ = "";
        bitField0_ = (bitField0_ & ~0x00000100);
        deviceName_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        replyText_ = "";
        bitField0_ = (bitField0_ & ~0x00000400);
        replyTimestampMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000800);
        if (authorBuilder_ == null) {
          author_ = com.akdeniz.googleplaycrawler.GooglePlay.Author.getDefaultInstance();
        } else {
          authorBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00001000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Review_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Review getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Review.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Review build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Review result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Review buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Review result = new com.akdeniz.googleplaycrawler.GooglePlay.Review(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.authorName_ = authorName_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.url_ = url_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.source_ = source_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.documentVersion_ = documentVersion_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.timestampMsec_ = timestampMsec_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.starRating_ = starRating_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.title_ = title_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.comment_ = comment_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.commentId_ = commentId_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.deviceName_ = deviceName_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.replyText_ = replyText_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        result.replyTimestampMsec_ = replyTimestampMsec_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        if (authorBuilder_ == null) {
          result.author_ = author_;
        } else {
          result.author_ = authorBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Review) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Review)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Review other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Review.getDefaultInstance()) return this;
        if (other.hasAuthorName()) {
          bitField0_ |= 0x00000001;
          authorName_ = other.authorName_;
          onChanged();
        }
        if (other.hasUrl()) {
          bitField0_ |= 0x00000002;
          url_ = other.url_;
          onChanged();
        }
        if (other.hasSource()) {
          bitField0_ |= 0x00000004;
          source_ = other.source_;
          onChanged();
        }
        if (other.hasDocumentVersion()) {
          bitField0_ |= 0x00000008;
          documentVersion_ = other.documentVersion_;
          onChanged();
        }
        if (other.hasTimestampMsec()) {
          setTimestampMsec(other.getTimestampMsec());
        }
        if (other.hasStarRating()) {
          setStarRating(other.getStarRating());
        }
        if (other.hasTitle()) {
          bitField0_ |= 0x00000040;
          title_ = other.title_;
          onChanged();
        }
        if (other.hasComment()) {
          bitField0_ |= 0x00000080;
          comment_ = other.comment_;
          onChanged();
        }
        if (other.hasCommentId()) {
          bitField0_ |= 0x00000100;
          commentId_ = other.commentId_;
          onChanged();
        }
        if (other.hasDeviceName()) {
          bitField0_ |= 0x00000200;
          deviceName_ = other.deviceName_;
          onChanged();
        }
        if (other.hasReplyText()) {
          bitField0_ |= 0x00000400;
          replyText_ = other.replyText_;
          onChanged();
        }
        if (other.hasReplyTimestampMsec()) {
          setReplyTimestampMsec(other.getReplyTimestampMsec());
        }
        if (other.hasAuthor()) {
          mergeAuthor(other.getAuthor());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.Review parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.Review) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string authorName = 1;
      private java.lang.Object authorName_ = "";
      /**
       * <code>optional string authorName = 1;</code>
       */
      public boolean hasAuthorName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string authorName = 1;</code>
       */
      public java.lang.String getAuthorName() {
        java.lang.Object ref = authorName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          authorName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string authorName = 1;</code>
       */
      public com.google.protobuf.ByteString
          getAuthorNameBytes() {
        java.lang.Object ref = authorName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          authorName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string authorName = 1;</code>
       */
      public Builder setAuthorName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        authorName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string authorName = 1;</code>
       */
      public Builder clearAuthorName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        authorName_ = getDefaultInstance().getAuthorName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string authorName = 1;</code>
       */
      public Builder setAuthorNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        authorName_ = value;
        onChanged();
        return this;
      }

      // optional string url = 2;
      private java.lang.Object url_ = "";
      /**
       * <code>optional string url = 2;</code>
       */
      public boolean hasUrl() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string url = 2;</code>
       */
      public java.lang.String getUrl() {
        java.lang.Object ref = url_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          url_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string url = 2;</code>
       */
      public com.google.protobuf.ByteString
          getUrlBytes() {
        java.lang.Object ref = url_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          url_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string url = 2;</code>
       */
      public Builder setUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        url_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string url = 2;</code>
       */
      public Builder clearUrl() {
        bitField0_ = (bitField0_ & ~0x00000002);
        url_ = getDefaultInstance().getUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string url = 2;</code>
       */
      public Builder setUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        url_ = value;
        onChanged();
        return this;
      }

      // optional string source = 3;
      private java.lang.Object source_ = "";
      /**
       * <code>optional string source = 3;</code>
       */
      public boolean hasSource() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string source = 3;</code>
       */
      public java.lang.String getSource() {
        java.lang.Object ref = source_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          source_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string source = 3;</code>
       */
      public com.google.protobuf.ByteString
          getSourceBytes() {
        java.lang.Object ref = source_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          source_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string source = 3;</code>
       */
      public Builder setSource(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        source_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string source = 3;</code>
       */
      public Builder clearSource() {
        bitField0_ = (bitField0_ & ~0x00000004);
        source_ = getDefaultInstance().getSource();
        onChanged();
        return this;
      }
      /**
       * <code>optional string source = 3;</code>
       */
      public Builder setSourceBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        source_ = value;
        onChanged();
        return this;
      }

      // optional string documentVersion = 4;
      private java.lang.Object documentVersion_ = "";
      /**
       * <code>optional string documentVersion = 4;</code>
       */
      public boolean hasDocumentVersion() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string documentVersion = 4;</code>
       */
      public java.lang.String getDocumentVersion() {
        java.lang.Object ref = documentVersion_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          documentVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string documentVersion = 4;</code>
       */
      public com.google.protobuf.ByteString
          getDocumentVersionBytes() {
        java.lang.Object ref = documentVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          documentVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string documentVersion = 4;</code>
       */
      public Builder setDocumentVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        documentVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string documentVersion = 4;</code>
       */
      public Builder clearDocumentVersion() {
        bitField0_ = (bitField0_ & ~0x00000008);
        documentVersion_ = getDefaultInstance().getDocumentVersion();
        onChanged();
        return this;
      }
      /**
       * <code>optional string documentVersion = 4;</code>
       */
      public Builder setDocumentVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        documentVersion_ = value;
        onChanged();
        return this;
      }

      // optional int64 timestampMsec = 5;
      private long timestampMsec_ ;
      /**
       * <code>optional int64 timestampMsec = 5;</code>
       */
      public boolean hasTimestampMsec() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional int64 timestampMsec = 5;</code>
       */
      public long getTimestampMsec() {
        return timestampMsec_;
      }
      /**
       * <code>optional int64 timestampMsec = 5;</code>
       */
      public Builder setTimestampMsec(long value) {
        bitField0_ |= 0x00000010;
        timestampMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 timestampMsec = 5;</code>
       */
      public Builder clearTimestampMsec() {
        bitField0_ = (bitField0_ & ~0x00000010);
        timestampMsec_ = 0L;
        onChanged();
        return this;
      }

      // optional int32 starRating = 6;
      private int starRating_ ;
      /**
       * <code>optional int32 starRating = 6;</code>
       */
      public boolean hasStarRating() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional int32 starRating = 6;</code>
       */
      public int getStarRating() {
        return starRating_;
      }
      /**
       * <code>optional int32 starRating = 6;</code>
       */
      public Builder setStarRating(int value) {
        bitField0_ |= 0x00000020;
        starRating_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 starRating = 6;</code>
       */
      public Builder clearStarRating() {
        bitField0_ = (bitField0_ & ~0x00000020);
        starRating_ = 0;
        onChanged();
        return this;
      }

      // optional string title = 7;
      private java.lang.Object title_ = "";
      /**
       * <code>optional string title = 7;</code>
       */
      public boolean hasTitle() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string title = 7;</code>
       */
      public java.lang.String getTitle() {
        java.lang.Object ref = title_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          title_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string title = 7;</code>
       */
      public com.google.protobuf.ByteString
          getTitleBytes() {
        java.lang.Object ref = title_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          title_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string title = 7;</code>
       */
      public Builder setTitle(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        title_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 7;</code>
       */
      public Builder clearTitle() {
        bitField0_ = (bitField0_ & ~0x00000040);
        title_ = getDefaultInstance().getTitle();
        onChanged();
        return this;
      }
      /**
       * <code>optional string title = 7;</code>
       */
      public Builder setTitleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        title_ = value;
        onChanged();
        return this;
      }

      // optional string comment = 8;
      private java.lang.Object comment_ = "";
      /**
       * <code>optional string comment = 8;</code>
       */
      public boolean hasComment() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string comment = 8;</code>
       */
      public java.lang.String getComment() {
        java.lang.Object ref = comment_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          comment_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string comment = 8;</code>
       */
      public com.google.protobuf.ByteString
          getCommentBytes() {
        java.lang.Object ref = comment_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          comment_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string comment = 8;</code>
       */
      public Builder setComment(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        comment_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string comment = 8;</code>
       */
      public Builder clearComment() {
        bitField0_ = (bitField0_ & ~0x00000080);
        comment_ = getDefaultInstance().getComment();
        onChanged();
        return this;
      }
      /**
       * <code>optional string comment = 8;</code>
       */
      public Builder setCommentBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        comment_ = value;
        onChanged();
        return this;
      }

      // optional string commentId = 9;
      private java.lang.Object commentId_ = "";
      /**
       * <code>optional string commentId = 9;</code>
       */
      public boolean hasCommentId() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional string commentId = 9;</code>
       */
      public java.lang.String getCommentId() {
        java.lang.Object ref = commentId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          commentId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string commentId = 9;</code>
       */
      public com.google.protobuf.ByteString
          getCommentIdBytes() {
        java.lang.Object ref = commentId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          commentId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string commentId = 9;</code>
       */
      public Builder setCommentId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        commentId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string commentId = 9;</code>
       */
      public Builder clearCommentId() {
        bitField0_ = (bitField0_ & ~0x00000100);
        commentId_ = getDefaultInstance().getCommentId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string commentId = 9;</code>
       */
      public Builder setCommentIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        commentId_ = value;
        onChanged();
        return this;
      }

      // optional string deviceName = 19;
      private java.lang.Object deviceName_ = "";
      /**
       * <code>optional string deviceName = 19;</code>
       */
      public boolean hasDeviceName() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional string deviceName = 19;</code>
       */
      public java.lang.String getDeviceName() {
        java.lang.Object ref = deviceName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          deviceName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string deviceName = 19;</code>
       */
      public com.google.protobuf.ByteString
          getDeviceNameBytes() {
        java.lang.Object ref = deviceName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          deviceName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string deviceName = 19;</code>
       */
      public Builder setDeviceName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        deviceName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string deviceName = 19;</code>
       */
      public Builder clearDeviceName() {
        bitField0_ = (bitField0_ & ~0x00000200);
        deviceName_ = getDefaultInstance().getDeviceName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string deviceName = 19;</code>
       */
      public Builder setDeviceNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        deviceName_ = value;
        onChanged();
        return this;
      }

      // optional string replyText = 29;
      private java.lang.Object replyText_ = "";
      /**
       * <code>optional string replyText = 29;</code>
       */
      public boolean hasReplyText() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional string replyText = 29;</code>
       */
      public java.lang.String getReplyText() {
        java.lang.Object ref = replyText_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          replyText_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string replyText = 29;</code>
       */
      public com.google.protobuf.ByteString
          getReplyTextBytes() {
        java.lang.Object ref = replyText_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          replyText_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string replyText = 29;</code>
       */
      public Builder setReplyText(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        replyText_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string replyText = 29;</code>
       */
      public Builder clearReplyText() {
        bitField0_ = (bitField0_ & ~0x00000400);
        replyText_ = getDefaultInstance().getReplyText();
        onChanged();
        return this;
      }
      /**
       * <code>optional string replyText = 29;</code>
       */
      public Builder setReplyTextBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        replyText_ = value;
        onChanged();
        return this;
      }

      // optional int64 replyTimestampMsec = 30;
      private long replyTimestampMsec_ ;
      /**
       * <code>optional int64 replyTimestampMsec = 30;</code>
       */
      public boolean hasReplyTimestampMsec() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional int64 replyTimestampMsec = 30;</code>
       */
      public long getReplyTimestampMsec() {
        return replyTimestampMsec_;
      }
      /**
       * <code>optional int64 replyTimestampMsec = 30;</code>
       */
      public Builder setReplyTimestampMsec(long value) {
        bitField0_ |= 0x00000800;
        replyTimestampMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 replyTimestampMsec = 30;</code>
       */
      public Builder clearReplyTimestampMsec() {
        bitField0_ = (bitField0_ & ~0x00000800);
        replyTimestampMsec_ = 0L;
        onChanged();
        return this;
      }

      // optional .Author author = 31;
      private com.akdeniz.googleplaycrawler.GooglePlay.Author author_ = com.akdeniz.googleplaycrawler.GooglePlay.Author.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Author, com.akdeniz.googleplaycrawler.GooglePlay.Author.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AuthorOrBuilder> authorBuilder_;
      /**
       * <code>optional .Author author = 31;</code>
       */
      public boolean hasAuthor() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional .Author author = 31;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Author getAuthor() {
        if (authorBuilder_ == null) {
          return author_;
        } else {
          return authorBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Author author = 31;</code>
       */
      public Builder setAuthor(com.akdeniz.googleplaycrawler.GooglePlay.Author value) {
        if (authorBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          author_ = value;
          onChanged();
        } else {
          authorBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       * <code>optional .Author author = 31;</code>
       */
      public Builder setAuthor(
          com.akdeniz.googleplaycrawler.GooglePlay.Author.Builder builderForValue) {
        if (authorBuilder_ == null) {
          author_ = builderForValue.build();
          onChanged();
        } else {
          authorBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       * <code>optional .Author author = 31;</code>
       */
      public Builder mergeAuthor(com.akdeniz.googleplaycrawler.GooglePlay.Author value) {
        if (authorBuilder_ == null) {
          if (((bitField0_ & 0x00001000) == 0x00001000) &&
              author_ != com.akdeniz.googleplaycrawler.GooglePlay.Author.getDefaultInstance()) {
            author_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Author.newBuilder(author_).mergeFrom(value).buildPartial();
          } else {
            author_ = value;
          }
          onChanged();
        } else {
          authorBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00001000;
        return this;
      }
      /**
       * <code>optional .Author author = 31;</code>
       */
      public Builder clearAuthor() {
        if (authorBuilder_ == null) {
          author_ = com.akdeniz.googleplaycrawler.GooglePlay.Author.getDefaultInstance();
          onChanged();
        } else {
          authorBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00001000);
        return this;
      }
      /**
       * <code>optional .Author author = 31;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Author.Builder getAuthorBuilder() {
        bitField0_ |= 0x00001000;
        onChanged();
        return getAuthorFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Author author = 31;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AuthorOrBuilder getAuthorOrBuilder() {
        if (authorBuilder_ != null) {
          return authorBuilder_.getMessageOrBuilder();
        } else {
          return author_;
        }
      }
      /**
       * <code>optional .Author author = 31;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Author, com.akdeniz.googleplaycrawler.GooglePlay.Author.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AuthorOrBuilder> 
          getAuthorFieldBuilder() {
        if (authorBuilder_ == null) {
          authorBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Author, com.akdeniz.googleplaycrawler.GooglePlay.Author.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AuthorOrBuilder>(
                  author_,
                  getParentForChildren(),
                  isClean());
          author_ = null;
        }
        return authorBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Review)
    }

    static {
      defaultInstance = new Review(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Review)
  }

  public interface AuthorOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string name = 2;
    /**
     * <code>optional string name = 2;</code>
     */
    boolean hasName();
    /**
     * <code>optional string name = 2;</code>
     */
    java.lang.String getName();
    /**
     * <code>optional string name = 2;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    // optional .Avatar urls = 5;
    /**
     * <code>optional .Avatar urls = 5;</code>
     */
    boolean hasUrls();
    /**
     * <code>optional .Avatar urls = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Avatar getUrls();
    /**
     * <code>optional .Avatar urls = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AvatarOrBuilder getUrlsOrBuilder();
  }
  /**
   * Protobuf type {@code Author}
   */
  public static final class Author extends
      com.google.protobuf.GeneratedMessage
      implements AuthorOrBuilder {
    // Use Author.newBuilder() to construct.
    private Author(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Author(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Author defaultInstance;
    public static Author getDefaultInstance() {
      return defaultInstance;
    }

    public Author getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Author(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 18: {
              bitField0_ |= 0x00000001;
              name_ = input.readBytes();
              break;
            }
            case 42: {
              com.akdeniz.googleplaycrawler.GooglePlay.Avatar.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = urls_.toBuilder();
              }
              urls_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Avatar.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(urls_);
                urls_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Author_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Author_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Author.class, com.akdeniz.googleplaycrawler.GooglePlay.Author.Builder.class);
    }

    public static com.google.protobuf.Parser<Author> PARSER =
        new com.google.protobuf.AbstractParser<Author>() {
      public Author parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Author(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Author> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string name = 2;
    public static final int NAME_FIELD_NUMBER = 2;
    private java.lang.Object name_;
    /**
     * <code>optional string name = 2;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string name = 2;</code>
     */
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          name_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string name = 2;</code>
     */
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .Avatar urls = 5;
    public static final int URLS_FIELD_NUMBER = 5;
    private com.akdeniz.googleplaycrawler.GooglePlay.Avatar urls_;
    /**
     * <code>optional .Avatar urls = 5;</code>
     */
    public boolean hasUrls() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional .Avatar urls = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Avatar getUrls() {
      return urls_;
    }
    /**
     * <code>optional .Avatar urls = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AvatarOrBuilder getUrlsOrBuilder() {
      return urls_;
    }

    private void initFields() {
      name_ = "";
      urls_ = com.akdeniz.googleplaycrawler.GooglePlay.Avatar.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(2, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(5, urls_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, urls_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.Author parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Author parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Author parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Author parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Author parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Author parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Author parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Author parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Author parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Author parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Author prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Author}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AuthorOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Author_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Author_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Author.class, com.akdeniz.googleplaycrawler.GooglePlay.Author.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Author.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getUrlsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        if (urlsBuilder_ == null) {
          urls_ = com.akdeniz.googleplaycrawler.GooglePlay.Avatar.getDefaultInstance();
        } else {
          urlsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Author_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Author getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Author.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Author build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Author result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Author buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Author result = new com.akdeniz.googleplaycrawler.GooglePlay.Author(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (urlsBuilder_ == null) {
          result.urls_ = urls_;
        } else {
          result.urls_ = urlsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Author) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Author)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Author other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Author.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasUrls()) {
          mergeUrls(other.getUrls());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.Author parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.Author) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string name = 2;
      private java.lang.Object name_ = "";
      /**
       * <code>optional string name = 2;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 2;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string name = 2;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string name = 2;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string name = 2;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }

      // optional .Avatar urls = 5;
      private com.akdeniz.googleplaycrawler.GooglePlay.Avatar urls_ = com.akdeniz.googleplaycrawler.GooglePlay.Avatar.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Avatar, com.akdeniz.googleplaycrawler.GooglePlay.Avatar.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AvatarOrBuilder> urlsBuilder_;
      /**
       * <code>optional .Avatar urls = 5;</code>
       */
      public boolean hasUrls() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional .Avatar urls = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Avatar getUrls() {
        if (urlsBuilder_ == null) {
          return urls_;
        } else {
          return urlsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .Avatar urls = 5;</code>
       */
      public Builder setUrls(com.akdeniz.googleplaycrawler.GooglePlay.Avatar value) {
        if (urlsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          urls_ = value;
          onChanged();
        } else {
          urlsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .Avatar urls = 5;</code>
       */
      public Builder setUrls(
          com.akdeniz.googleplaycrawler.GooglePlay.Avatar.Builder builderForValue) {
        if (urlsBuilder_ == null) {
          urls_ = builderForValue.build();
          onChanged();
        } else {
          urlsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .Avatar urls = 5;</code>
       */
      public Builder mergeUrls(com.akdeniz.googleplaycrawler.GooglePlay.Avatar value) {
        if (urlsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              urls_ != com.akdeniz.googleplaycrawler.GooglePlay.Avatar.getDefaultInstance()) {
            urls_ =
              com.akdeniz.googleplaycrawler.GooglePlay.Avatar.newBuilder(urls_).mergeFrom(value).buildPartial();
          } else {
            urls_ = value;
          }
          onChanged();
        } else {
          urlsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <code>optional .Avatar urls = 5;</code>
       */
      public Builder clearUrls() {
        if (urlsBuilder_ == null) {
          urls_ = com.akdeniz.googleplaycrawler.GooglePlay.Avatar.getDefaultInstance();
          onChanged();
        } else {
          urlsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <code>optional .Avatar urls = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Avatar.Builder getUrlsBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getUrlsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .Avatar urls = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AvatarOrBuilder getUrlsOrBuilder() {
        if (urlsBuilder_ != null) {
          return urlsBuilder_.getMessageOrBuilder();
        } else {
          return urls_;
        }
      }
      /**
       * <code>optional .Avatar urls = 5;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Avatar, com.akdeniz.googleplaycrawler.GooglePlay.Avatar.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AvatarOrBuilder> 
          getUrlsFieldBuilder() {
        if (urlsBuilder_ == null) {
          urlsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Avatar, com.akdeniz.googleplaycrawler.GooglePlay.Avatar.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AvatarOrBuilder>(
                  urls_,
                  getParentForChildren(),
                  isClean());
          urls_ = null;
        }
        return urlsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:Author)
    }

    static {
      defaultInstance = new Author(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Author)
  }

  public interface AvatarOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool unknown1 = 1;
    /**
     * <code>optional bool unknown1 = 1;</code>
     */
    boolean hasUnknown1();
    /**
     * <code>optional bool unknown1 = 1;</code>
     */
    boolean getUnknown1();

    // optional string url = 5;
    /**
     * <code>optional string url = 5;</code>
     */
    boolean hasUrl();
    /**
     * <code>optional string url = 5;</code>
     */
    java.lang.String getUrl();
    /**
     * <code>optional string url = 5;</code>
     */
    com.google.protobuf.ByteString
        getUrlBytes();

    // optional string secureUrl = 7;
    /**
     * <code>optional string secureUrl = 7;</code>
     */
    boolean hasSecureUrl();
    /**
     * <code>optional string secureUrl = 7;</code>
     */
    java.lang.String getSecureUrl();
    /**
     * <code>optional string secureUrl = 7;</code>
     */
    com.google.protobuf.ByteString
        getSecureUrlBytes();

    // optional bool unknown2 = 9;
    /**
     * <code>optional bool unknown2 = 9;</code>
     */
    boolean hasUnknown2();
    /**
     * <code>optional bool unknown2 = 9;</code>
     */
    boolean getUnknown2();
  }
  /**
   * Protobuf type {@code Avatar}
   */
  public static final class Avatar extends
      com.google.protobuf.GeneratedMessage
      implements AvatarOrBuilder {
    // Use Avatar.newBuilder() to construct.
    private Avatar(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private Avatar(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final Avatar defaultInstance;
    public static Avatar getDefaultInstance() {
      return defaultInstance;
    }

    public Avatar getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private Avatar(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              unknown1_ = input.readBool();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000002;
              url_ = input.readBytes();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000004;
              secureUrl_ = input.readBytes();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000008;
              unknown2_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Avatar_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Avatar_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.Avatar.class, com.akdeniz.googleplaycrawler.GooglePlay.Avatar.Builder.class);
    }

    public static com.google.protobuf.Parser<Avatar> PARSER =
        new com.google.protobuf.AbstractParser<Avatar>() {
      public Avatar parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Avatar(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<Avatar> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool unknown1 = 1;
    public static final int UNKNOWN1_FIELD_NUMBER = 1;
    private boolean unknown1_;
    /**
     * <code>optional bool unknown1 = 1;</code>
     */
    public boolean hasUnknown1() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool unknown1 = 1;</code>
     */
    public boolean getUnknown1() {
      return unknown1_;
    }

    // optional string url = 5;
    public static final int URL_FIELD_NUMBER = 5;
    private java.lang.Object url_;
    /**
     * <code>optional string url = 5;</code>
     */
    public boolean hasUrl() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string url = 5;</code>
     */
    public java.lang.String getUrl() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          url_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string url = 5;</code>
     */
    public com.google.protobuf.ByteString
        getUrlBytes() {
      java.lang.Object ref = url_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        url_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string secureUrl = 7;
    public static final int SECUREURL_FIELD_NUMBER = 7;
    private java.lang.Object secureUrl_;
    /**
     * <code>optional string secureUrl = 7;</code>
     */
    public boolean hasSecureUrl() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string secureUrl = 7;</code>
     */
    public java.lang.String getSecureUrl() {
      java.lang.Object ref = secureUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          secureUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string secureUrl = 7;</code>
     */
    public com.google.protobuf.ByteString
        getSecureUrlBytes() {
      java.lang.Object ref = secureUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        secureUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool unknown2 = 9;
    public static final int UNKNOWN2_FIELD_NUMBER = 9;
    private boolean unknown2_;
    /**
     * <code>optional bool unknown2 = 9;</code>
     */
    public boolean hasUnknown2() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool unknown2 = 9;</code>
     */
    public boolean getUnknown2() {
      return unknown2_;
    }

    private void initFields() {
      unknown1_ = false;
      url_ = "";
      secureUrl_ = "";
      unknown2_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, unknown1_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(5, getUrlBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(7, getSecureUrlBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(9, unknown2_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, unknown1_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getUrlBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getSecureUrlBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(9, unknown2_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.Avatar parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Avatar parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Avatar parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Avatar parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Avatar parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Avatar parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Avatar parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Avatar parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Avatar parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.Avatar parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.Avatar prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code Avatar}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AvatarOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Avatar_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Avatar_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.Avatar.class, com.akdeniz.googleplaycrawler.GooglePlay.Avatar.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.Avatar.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        unknown1_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        url_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        secureUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        unknown2_ = false;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_Avatar_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Avatar getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.Avatar.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Avatar build() {
        com.akdeniz.googleplaycrawler.GooglePlay.Avatar result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.Avatar buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.Avatar result = new com.akdeniz.googleplaycrawler.GooglePlay.Avatar(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.unknown1_ = unknown1_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.url_ = url_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.secureUrl_ = secureUrl_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.unknown2_ = unknown2_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.Avatar) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.Avatar)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.Avatar other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.Avatar.getDefaultInstance()) return this;
        if (other.hasUnknown1()) {
          setUnknown1(other.getUnknown1());
        }
        if (other.hasUrl()) {
          bitField0_ |= 0x00000002;
          url_ = other.url_;
          onChanged();
        }
        if (other.hasSecureUrl()) {
          bitField0_ |= 0x00000004;
          secureUrl_ = other.secureUrl_;
          onChanged();
        }
        if (other.hasUnknown2()) {
          setUnknown2(other.getUnknown2());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.Avatar parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.Avatar) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool unknown1 = 1;
      private boolean unknown1_ ;
      /**
       * <code>optional bool unknown1 = 1;</code>
       */
      public boolean hasUnknown1() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bool unknown1 = 1;</code>
       */
      public boolean getUnknown1() {
        return unknown1_;
      }
      /**
       * <code>optional bool unknown1 = 1;</code>
       */
      public Builder setUnknown1(boolean value) {
        bitField0_ |= 0x00000001;
        unknown1_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool unknown1 = 1;</code>
       */
      public Builder clearUnknown1() {
        bitField0_ = (bitField0_ & ~0x00000001);
        unknown1_ = false;
        onChanged();
        return this;
      }

      // optional string url = 5;
      private java.lang.Object url_ = "";
      /**
       * <code>optional string url = 5;</code>
       */
      public boolean hasUrl() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string url = 5;</code>
       */
      public java.lang.String getUrl() {
        java.lang.Object ref = url_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          url_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string url = 5;</code>
       */
      public com.google.protobuf.ByteString
          getUrlBytes() {
        java.lang.Object ref = url_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          url_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string url = 5;</code>
       */
      public Builder setUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        url_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string url = 5;</code>
       */
      public Builder clearUrl() {
        bitField0_ = (bitField0_ & ~0x00000002);
        url_ = getDefaultInstance().getUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string url = 5;</code>
       */
      public Builder setUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        url_ = value;
        onChanged();
        return this;
      }

      // optional string secureUrl = 7;
      private java.lang.Object secureUrl_ = "";
      /**
       * <code>optional string secureUrl = 7;</code>
       */
      public boolean hasSecureUrl() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string secureUrl = 7;</code>
       */
      public java.lang.String getSecureUrl() {
        java.lang.Object ref = secureUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          secureUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string secureUrl = 7;</code>
       */
      public com.google.protobuf.ByteString
          getSecureUrlBytes() {
        java.lang.Object ref = secureUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          secureUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string secureUrl = 7;</code>
       */
      public Builder setSecureUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        secureUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string secureUrl = 7;</code>
       */
      public Builder clearSecureUrl() {
        bitField0_ = (bitField0_ & ~0x00000004);
        secureUrl_ = getDefaultInstance().getSecureUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string secureUrl = 7;</code>
       */
      public Builder setSecureUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        secureUrl_ = value;
        onChanged();
        return this;
      }

      // optional bool unknown2 = 9;
      private boolean unknown2_ ;
      /**
       * <code>optional bool unknown2 = 9;</code>
       */
      public boolean hasUnknown2() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional bool unknown2 = 9;</code>
       */
      public boolean getUnknown2() {
        return unknown2_;
      }
      /**
       * <code>optional bool unknown2 = 9;</code>
       */
      public Builder setUnknown2(boolean value) {
        bitField0_ |= 0x00000008;
        unknown2_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool unknown2 = 9;</code>
       */
      public Builder clearUnknown2() {
        bitField0_ = (bitField0_ & ~0x00000008);
        unknown2_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:Avatar)
    }

    static {
      defaultInstance = new Avatar(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:Avatar)
  }

  public interface ReviewResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .GetReviewsResponse getResponse = 1;
    /**
     * <code>optional .GetReviewsResponse getResponse = 1;</code>
     */
    boolean hasGetResponse();
    /**
     * <code>optional .GetReviewsResponse getResponse = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse getGetResponse();
    /**
     * <code>optional .GetReviewsResponse getResponse = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponseOrBuilder getGetResponseOrBuilder();

    // optional string nextPageUrl = 2;
    /**
     * <code>optional string nextPageUrl = 2;</code>
     */
    boolean hasNextPageUrl();
    /**
     * <code>optional string nextPageUrl = 2;</code>
     */
    java.lang.String getNextPageUrl();
    /**
     * <code>optional string nextPageUrl = 2;</code>
     */
    com.google.protobuf.ByteString
        getNextPageUrlBytes();
  }
  /**
   * Protobuf type {@code ReviewResponse}
   */
  public static final class ReviewResponse extends
      com.google.protobuf.GeneratedMessage
      implements ReviewResponseOrBuilder {
    // Use ReviewResponse.newBuilder() to construct.
    private ReviewResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ReviewResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ReviewResponse defaultInstance;
    public static ReviewResponse getDefaultInstance() {
      return defaultInstance;
    }

    public ReviewResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ReviewResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = getResponse_.toBuilder();
              }
              getResponse_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(getResponse_);
                getResponse_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              nextPageUrl_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ReviewResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ReviewResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.Builder.class);
    }

    public static com.google.protobuf.Parser<ReviewResponse> PARSER =
        new com.google.protobuf.AbstractParser<ReviewResponse>() {
      public ReviewResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ReviewResponse(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ReviewResponse> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .GetReviewsResponse getResponse = 1;
    public static final int GETRESPONSE_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse getResponse_;
    /**
     * <code>optional .GetReviewsResponse getResponse = 1;</code>
     */
    public boolean hasGetResponse() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .GetReviewsResponse getResponse = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse getGetResponse() {
      return getResponse_;
    }
    /**
     * <code>optional .GetReviewsResponse getResponse = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponseOrBuilder getGetResponseOrBuilder() {
      return getResponse_;
    }

    // optional string nextPageUrl = 2;
    public static final int NEXTPAGEURL_FIELD_NUMBER = 2;
    private java.lang.Object nextPageUrl_;
    /**
     * <code>optional string nextPageUrl = 2;</code>
     */
    public boolean hasNextPageUrl() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string nextPageUrl = 2;</code>
     */
    public java.lang.String getNextPageUrl() {
      java.lang.Object ref = nextPageUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          nextPageUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string nextPageUrl = 2;</code>
     */
    public com.google.protobuf.ByteString
        getNextPageUrlBytes() {
      java.lang.Object ref = nextPageUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        nextPageUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      getResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.getDefaultInstance();
      nextPageUrl_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, getResponse_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getNextPageUrlBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getResponse_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getNextPageUrlBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code ReviewResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ReviewResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ReviewResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getGetResponseFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (getResponseBuilder_ == null) {
          getResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.getDefaultInstance();
        } else {
          getResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        nextPageUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ReviewResponse_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse build() {
        com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse result = new com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (getResponseBuilder_ == null) {
          result.getResponse_ = getResponse_;
        } else {
          result.getResponse_ = getResponseBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.nextPageUrl_ = nextPageUrl_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse.getDefaultInstance()) return this;
        if (other.hasGetResponse()) {
          mergeGetResponse(other.getGetResponse());
        }
        if (other.hasNextPageUrl()) {
          bitField0_ |= 0x00000002;
          nextPageUrl_ = other.nextPageUrl_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.ReviewResponse) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .GetReviewsResponse getResponse = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse getResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse, com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponseOrBuilder> getResponseBuilder_;
      /**
       * <code>optional .GetReviewsResponse getResponse = 1;</code>
       */
      public boolean hasGetResponse() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .GetReviewsResponse getResponse = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse getGetResponse() {
        if (getResponseBuilder_ == null) {
          return getResponse_;
        } else {
          return getResponseBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .GetReviewsResponse getResponse = 1;</code>
       */
      public Builder setGetResponse(com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse value) {
        if (getResponseBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          getResponse_ = value;
          onChanged();
        } else {
          getResponseBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .GetReviewsResponse getResponse = 1;</code>
       */
      public Builder setGetResponse(
          com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.Builder builderForValue) {
        if (getResponseBuilder_ == null) {
          getResponse_ = builderForValue.build();
          onChanged();
        } else {
          getResponseBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .GetReviewsResponse getResponse = 1;</code>
       */
      public Builder mergeGetResponse(com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse value) {
        if (getResponseBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              getResponse_ != com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.getDefaultInstance()) {
            getResponse_ =
              com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.newBuilder(getResponse_).mergeFrom(value).buildPartial();
          } else {
            getResponse_ = value;
          }
          onChanged();
        } else {
          getResponseBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .GetReviewsResponse getResponse = 1;</code>
       */
      public Builder clearGetResponse() {
        if (getResponseBuilder_ == null) {
          getResponse_ = com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.getDefaultInstance();
          onChanged();
        } else {
          getResponseBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .GetReviewsResponse getResponse = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.Builder getGetResponseBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getGetResponseFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .GetReviewsResponse getResponse = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponseOrBuilder getGetResponseOrBuilder() {
        if (getResponseBuilder_ != null) {
          return getResponseBuilder_.getMessageOrBuilder();
        } else {
          return getResponse_;
        }
      }
      /**
       * <code>optional .GetReviewsResponse getResponse = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse, com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponseOrBuilder> 
          getGetResponseFieldBuilder() {
        if (getResponseBuilder_ == null) {
          getResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse, com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponse.Builder, com.akdeniz.googleplaycrawler.GooglePlay.GetReviewsResponseOrBuilder>(
                  getResponse_,
                  getParentForChildren(),
                  isClean());
          getResponse_ = null;
        }
        return getResponseBuilder_;
      }

      // optional string nextPageUrl = 2;
      private java.lang.Object nextPageUrl_ = "";
      /**
       * <code>optional string nextPageUrl = 2;</code>
       */
      public boolean hasNextPageUrl() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string nextPageUrl = 2;</code>
       */
      public java.lang.String getNextPageUrl() {
        java.lang.Object ref = nextPageUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          nextPageUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string nextPageUrl = 2;</code>
       */
      public com.google.protobuf.ByteString
          getNextPageUrlBytes() {
        java.lang.Object ref = nextPageUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          nextPageUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string nextPageUrl = 2;</code>
       */
      public Builder setNextPageUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        nextPageUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string nextPageUrl = 2;</code>
       */
      public Builder clearNextPageUrl() {
        bitField0_ = (bitField0_ & ~0x00000002);
        nextPageUrl_ = getDefaultInstance().getNextPageUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string nextPageUrl = 2;</code>
       */
      public Builder setNextPageUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        nextPageUrl_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:ReviewResponse)
    }

    static {
      defaultInstance = new ReviewResponse(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:ReviewResponse)
  }

  public interface RelatedSearchOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string searchUrl = 1;
    /**
     * <code>optional string searchUrl = 1;</code>
     */
    boolean hasSearchUrl();
    /**
     * <code>optional string searchUrl = 1;</code>
     */
    java.lang.String getSearchUrl();
    /**
     * <code>optional string searchUrl = 1;</code>
     */
    com.google.protobuf.ByteString
        getSearchUrlBytes();

    // optional string header = 2;
    /**
     * <code>optional string header = 2;</code>
     */
    boolean hasHeader();
    /**
     * <code>optional string header = 2;</code>
     */
    java.lang.String getHeader();
    /**
     * <code>optional string header = 2;</code>
     */
    com.google.protobuf.ByteString
        getHeaderBytes();

    // optional int32 backendId = 3;
    /**
     * <code>optional int32 backendId = 3;</code>
     */
    boolean hasBackendId();
    /**
     * <code>optional int32 backendId = 3;</code>
     */
    int getBackendId();

    // optional int32 docType = 4;
    /**
     * <code>optional int32 docType = 4;</code>
     */
    boolean hasDocType();
    /**
     * <code>optional int32 docType = 4;</code>
     */
    int getDocType();

    // optional bool current = 5;
    /**
     * <code>optional bool current = 5;</code>
     */
    boolean hasCurrent();
    /**
     * <code>optional bool current = 5;</code>
     */
    boolean getCurrent();
  }
  /**
   * Protobuf type {@code RelatedSearch}
   */
  public static final class RelatedSearch extends
      com.google.protobuf.GeneratedMessage
      implements RelatedSearchOrBuilder {
    // Use RelatedSearch.newBuilder() to construct.
    private RelatedSearch(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private RelatedSearch(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final RelatedSearch defaultInstance;
    public static RelatedSearch getDefaultInstance() {
      return defaultInstance;
    }

    public RelatedSearch getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private RelatedSearch(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              searchUrl_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              header_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              backendId_ = input.readInt32();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              docType_ = input.readInt32();
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              current_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_RelatedSearch_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_RelatedSearch_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.class, com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.Builder.class);
    }

    public static com.google.protobuf.Parser<RelatedSearch> PARSER =
        new com.google.protobuf.AbstractParser<RelatedSearch>() {
      public RelatedSearch parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RelatedSearch(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<RelatedSearch> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string searchUrl = 1;
    public static final int SEARCHURL_FIELD_NUMBER = 1;
    private java.lang.Object searchUrl_;
    /**
     * <code>optional string searchUrl = 1;</code>
     */
    public boolean hasSearchUrl() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string searchUrl = 1;</code>
     */
    public java.lang.String getSearchUrl() {
      java.lang.Object ref = searchUrl_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          searchUrl_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string searchUrl = 1;</code>
     */
    public com.google.protobuf.ByteString
        getSearchUrlBytes() {
      java.lang.Object ref = searchUrl_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        searchUrl_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string header = 2;
    public static final int HEADER_FIELD_NUMBER = 2;
    private java.lang.Object header_;
    /**
     * <code>optional string header = 2;</code>
     */
    public boolean hasHeader() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string header = 2;</code>
     */
    public java.lang.String getHeader() {
      java.lang.Object ref = header_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          header_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string header = 2;</code>
     */
    public com.google.protobuf.ByteString
        getHeaderBytes() {
      java.lang.Object ref = header_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        header_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 backendId = 3;
    public static final int BACKENDID_FIELD_NUMBER = 3;
    private int backendId_;
    /**
     * <code>optional int32 backendId = 3;</code>
     */
    public boolean hasBackendId() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int32 backendId = 3;</code>
     */
    public int getBackendId() {
      return backendId_;
    }

    // optional int32 docType = 4;
    public static final int DOCTYPE_FIELD_NUMBER = 4;
    private int docType_;
    /**
     * <code>optional int32 docType = 4;</code>
     */
    public boolean hasDocType() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int32 docType = 4;</code>
     */
    public int getDocType() {
      return docType_;
    }

    // optional bool current = 5;
    public static final int CURRENT_FIELD_NUMBER = 5;
    private boolean current_;
    /**
     * <code>optional bool current = 5;</code>
     */
    public boolean hasCurrent() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional bool current = 5;</code>
     */
    public boolean getCurrent() {
      return current_;
    }

    private void initFields() {
      searchUrl_ = "";
      header_ = "";
      backendId_ = 0;
      docType_ = 0;
      current_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getSearchUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getHeaderBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt32(3, backendId_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, docType_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBool(5, current_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getSearchUrlBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getHeaderBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, backendId_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, docType_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(5, current_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code RelatedSearch}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearchOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_RelatedSearch_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_RelatedSearch_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.class, com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        searchUrl_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        header_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        backendId_ = 0;
        bitField0_ = (bitField0_ & ~0x00000004);
        docType_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        current_ = false;
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_RelatedSearch_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch build() {
        com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch result = new com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.searchUrl_ = searchUrl_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.header_ = header_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.backendId_ = backendId_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.docType_ = docType_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.current_ = current_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.getDefaultInstance()) return this;
        if (other.hasSearchUrl()) {
          bitField0_ |= 0x00000001;
          searchUrl_ = other.searchUrl_;
          onChanged();
        }
        if (other.hasHeader()) {
          bitField0_ |= 0x00000002;
          header_ = other.header_;
          onChanged();
        }
        if (other.hasBackendId()) {
          setBackendId(other.getBackendId());
        }
        if (other.hasDocType()) {
          setDocType(other.getDocType());
        }
        if (other.hasCurrent()) {
          setCurrent(other.getCurrent());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string searchUrl = 1;
      private java.lang.Object searchUrl_ = "";
      /**
       * <code>optional string searchUrl = 1;</code>
       */
      public boolean hasSearchUrl() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string searchUrl = 1;</code>
       */
      public java.lang.String getSearchUrl() {
        java.lang.Object ref = searchUrl_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          searchUrl_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string searchUrl = 1;</code>
       */
      public com.google.protobuf.ByteString
          getSearchUrlBytes() {
        java.lang.Object ref = searchUrl_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          searchUrl_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string searchUrl = 1;</code>
       */
      public Builder setSearchUrl(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        searchUrl_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string searchUrl = 1;</code>
       */
      public Builder clearSearchUrl() {
        bitField0_ = (bitField0_ & ~0x00000001);
        searchUrl_ = getDefaultInstance().getSearchUrl();
        onChanged();
        return this;
      }
      /**
       * <code>optional string searchUrl = 1;</code>
       */
      public Builder setSearchUrlBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        searchUrl_ = value;
        onChanged();
        return this;
      }

      // optional string header = 2;
      private java.lang.Object header_ = "";
      /**
       * <code>optional string header = 2;</code>
       */
      public boolean hasHeader() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string header = 2;</code>
       */
      public java.lang.String getHeader() {
        java.lang.Object ref = header_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          header_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string header = 2;</code>
       */
      public com.google.protobuf.ByteString
          getHeaderBytes() {
        java.lang.Object ref = header_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          header_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string header = 2;</code>
       */
      public Builder setHeader(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        header_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string header = 2;</code>
       */
      public Builder clearHeader() {
        bitField0_ = (bitField0_ & ~0x00000002);
        header_ = getDefaultInstance().getHeader();
        onChanged();
        return this;
      }
      /**
       * <code>optional string header = 2;</code>
       */
      public Builder setHeaderBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        header_ = value;
        onChanged();
        return this;
      }

      // optional int32 backendId = 3;
      private int backendId_ ;
      /**
       * <code>optional int32 backendId = 3;</code>
       */
      public boolean hasBackendId() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int32 backendId = 3;</code>
       */
      public int getBackendId() {
        return backendId_;
      }
      /**
       * <code>optional int32 backendId = 3;</code>
       */
      public Builder setBackendId(int value) {
        bitField0_ |= 0x00000004;
        backendId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 backendId = 3;</code>
       */
      public Builder clearBackendId() {
        bitField0_ = (bitField0_ & ~0x00000004);
        backendId_ = 0;
        onChanged();
        return this;
      }

      // optional int32 docType = 4;
      private int docType_ ;
      /**
       * <code>optional int32 docType = 4;</code>
       */
      public boolean hasDocType() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int32 docType = 4;</code>
       */
      public int getDocType() {
        return docType_;
      }
      /**
       * <code>optional int32 docType = 4;</code>
       */
      public Builder setDocType(int value) {
        bitField0_ |= 0x00000008;
        docType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 docType = 4;</code>
       */
      public Builder clearDocType() {
        bitField0_ = (bitField0_ & ~0x00000008);
        docType_ = 0;
        onChanged();
        return this;
      }

      // optional bool current = 5;
      private boolean current_ ;
      /**
       * <code>optional bool current = 5;</code>
       */
      public boolean hasCurrent() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional bool current = 5;</code>
       */
      public boolean getCurrent() {
        return current_;
      }
      /**
       * <code>optional bool current = 5;</code>
       */
      public Builder setCurrent(boolean value) {
        bitField0_ |= 0x00000010;
        current_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool current = 5;</code>
       */
      public Builder clearCurrent() {
        bitField0_ = (bitField0_ & ~0x00000010);
        current_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:RelatedSearch)
    }

    static {
      defaultInstance = new RelatedSearch(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:RelatedSearch)
  }

  public interface SearchResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string originalQuery = 1;
    /**
     * <code>optional string originalQuery = 1;</code>
     */
    boolean hasOriginalQuery();
    /**
     * <code>optional string originalQuery = 1;</code>
     */
    java.lang.String getOriginalQuery();
    /**
     * <code>optional string originalQuery = 1;</code>
     */
    com.google.protobuf.ByteString
        getOriginalQueryBytes();

    // optional string suggestedQuery = 2;
    /**
     * <code>optional string suggestedQuery = 2;</code>
     */
    boolean hasSuggestedQuery();
    /**
     * <code>optional string suggestedQuery = 2;</code>
     */
    java.lang.String getSuggestedQuery();
    /**
     * <code>optional string suggestedQuery = 2;</code>
     */
    com.google.protobuf.ByteString
        getSuggestedQueryBytes();

    // optional bool aggregateQuery = 3;
    /**
     * <code>optional bool aggregateQuery = 3;</code>
     */
    boolean hasAggregateQuery();
    /**
     * <code>optional bool aggregateQuery = 3;</code>
     */
    boolean getAggregateQuery();

    // repeated .Bucket bucket = 4;
    /**
     * <code>repeated .Bucket bucket = 4;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Bucket> 
        getBucketList();
    /**
     * <code>repeated .Bucket bucket = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.Bucket getBucket(int index);
    /**
     * <code>repeated .Bucket bucket = 4;</code>
     */
    int getBucketCount();
    /**
     * <code>repeated .Bucket bucket = 4;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder> 
        getBucketOrBuilderList();
    /**
     * <code>repeated .Bucket bucket = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder getBucketOrBuilder(
        int index);

    // repeated .DocV2 doc = 5;
    /**
     * <code>repeated .DocV2 doc = 5;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> 
        getDocList();
    /**
     * <code>repeated .DocV2 doc = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getDoc(int index);
    /**
     * <code>repeated .DocV2 doc = 5;</code>
     */
    int getDocCount();
    /**
     * <code>repeated .DocV2 doc = 5;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> 
        getDocOrBuilderList();
    /**
     * <code>repeated .DocV2 doc = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getDocOrBuilder(
        int index);

    // repeated .RelatedSearch relatedSearch = 6;
    /**
     * <code>repeated .RelatedSearch relatedSearch = 6;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch> 
        getRelatedSearchList();
    /**
     * <code>repeated .RelatedSearch relatedSearch = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch getRelatedSearch(int index);
    /**
     * <code>repeated .RelatedSearch relatedSearch = 6;</code>
     */
    int getRelatedSearchCount();
    /**
     * <code>repeated .RelatedSearch relatedSearch = 6;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearchOrBuilder> 
        getRelatedSearchOrBuilderList();
    /**
     * <code>repeated .RelatedSearch relatedSearch = 6;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearchOrBuilder getRelatedSearchOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code SearchResponse}
   */
  public static final class SearchResponse extends
      com.google.protobuf.GeneratedMessage
      implements SearchResponseOrBuilder {
    // Use SearchResponse.newBuilder() to construct.
    private SearchResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private SearchResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final SearchResponse defaultInstance;
    public static SearchResponse getDefaultInstance() {
      return defaultInstance;
    }

    public SearchResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private SearchResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              originalQuery_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              suggestedQuery_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              aggregateQuery_ = input.readBool();
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                bucket_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Bucket>();
                mutable_bitField0_ |= 0x00000008;
              }
              bucket_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.Bucket.PARSER, extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                doc_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.DocV2>();
                mutable_bitField0_ |= 0x00000010;
              }
              doc_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.DocV2.PARSER, extensionRegistry));
              break;
            }
            case 50: {
              if (!((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
                relatedSearch_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch>();
                mutable_bitField0_ |= 0x00000020;
              }
              relatedSearch_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          bucket_ = java.util.Collections.unmodifiableList(bucket_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          doc_ = java.util.Collections.unmodifiableList(doc_);
        }
        if (((mutable_bitField0_ & 0x00000020) == 0x00000020)) {
          relatedSearch_ = java.util.Collections.unmodifiableList(relatedSearch_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SearchResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SearchResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.Builder.class);
    }

    public static com.google.protobuf.Parser<SearchResponse> PARSER =
        new com.google.protobuf.AbstractParser<SearchResponse>() {
      public SearchResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SearchResponse(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<SearchResponse> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string originalQuery = 1;
    public static final int ORIGINALQUERY_FIELD_NUMBER = 1;
    private java.lang.Object originalQuery_;
    /**
     * <code>optional string originalQuery = 1;</code>
     */
    public boolean hasOriginalQuery() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string originalQuery = 1;</code>
     */
    public java.lang.String getOriginalQuery() {
      java.lang.Object ref = originalQuery_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          originalQuery_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string originalQuery = 1;</code>
     */
    public com.google.protobuf.ByteString
        getOriginalQueryBytes() {
      java.lang.Object ref = originalQuery_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        originalQuery_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string suggestedQuery = 2;
    public static final int SUGGESTEDQUERY_FIELD_NUMBER = 2;
    private java.lang.Object suggestedQuery_;
    /**
     * <code>optional string suggestedQuery = 2;</code>
     */
    public boolean hasSuggestedQuery() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string suggestedQuery = 2;</code>
     */
    public java.lang.String getSuggestedQuery() {
      java.lang.Object ref = suggestedQuery_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          suggestedQuery_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string suggestedQuery = 2;</code>
     */
    public com.google.protobuf.ByteString
        getSuggestedQueryBytes() {
      java.lang.Object ref = suggestedQuery_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        suggestedQuery_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool aggregateQuery = 3;
    public static final int AGGREGATEQUERY_FIELD_NUMBER = 3;
    private boolean aggregateQuery_;
    /**
     * <code>optional bool aggregateQuery = 3;</code>
     */
    public boolean hasAggregateQuery() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional bool aggregateQuery = 3;</code>
     */
    public boolean getAggregateQuery() {
      return aggregateQuery_;
    }

    // repeated .Bucket bucket = 4;
    public static final int BUCKET_FIELD_NUMBER = 4;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Bucket> bucket_;
    /**
     * <code>repeated .Bucket bucket = 4;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Bucket> getBucketList() {
      return bucket_;
    }
    /**
     * <code>repeated .Bucket bucket = 4;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder> 
        getBucketOrBuilderList() {
      return bucket_;
    }
    /**
     * <code>repeated .Bucket bucket = 4;</code>
     */
    public int getBucketCount() {
      return bucket_.size();
    }
    /**
     * <code>repeated .Bucket bucket = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.Bucket getBucket(int index) {
      return bucket_.get(index);
    }
    /**
     * <code>repeated .Bucket bucket = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder getBucketOrBuilder(
        int index) {
      return bucket_.get(index);
    }

    // repeated .DocV2 doc = 5;
    public static final int DOC_FIELD_NUMBER = 5;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> doc_;
    /**
     * <code>repeated .DocV2 doc = 5;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> getDocList() {
      return doc_;
    }
    /**
     * <code>repeated .DocV2 doc = 5;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> 
        getDocOrBuilderList() {
      return doc_;
    }
    /**
     * <code>repeated .DocV2 doc = 5;</code>
     */
    public int getDocCount() {
      return doc_.size();
    }
    /**
     * <code>repeated .DocV2 doc = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getDoc(int index) {
      return doc_.get(index);
    }
    /**
     * <code>repeated .DocV2 doc = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getDocOrBuilder(
        int index) {
      return doc_.get(index);
    }

    // repeated .RelatedSearch relatedSearch = 6;
    public static final int RELATEDSEARCH_FIELD_NUMBER = 6;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch> relatedSearch_;
    /**
     * <code>repeated .RelatedSearch relatedSearch = 6;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch> getRelatedSearchList() {
      return relatedSearch_;
    }
    /**
     * <code>repeated .RelatedSearch relatedSearch = 6;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearchOrBuilder> 
        getRelatedSearchOrBuilderList() {
      return relatedSearch_;
    }
    /**
     * <code>repeated .RelatedSearch relatedSearch = 6;</code>
     */
    public int getRelatedSearchCount() {
      return relatedSearch_.size();
    }
    /**
     * <code>repeated .RelatedSearch relatedSearch = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch getRelatedSearch(int index) {
      return relatedSearch_.get(index);
    }
    /**
     * <code>repeated .RelatedSearch relatedSearch = 6;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearchOrBuilder getRelatedSearchOrBuilder(
        int index) {
      return relatedSearch_.get(index);
    }

    private void initFields() {
      originalQuery_ = "";
      suggestedQuery_ = "";
      aggregateQuery_ = false;
      bucket_ = java.util.Collections.emptyList();
      doc_ = java.util.Collections.emptyList();
      relatedSearch_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getOriginalQueryBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getSuggestedQueryBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBool(3, aggregateQuery_);
      }
      for (int i = 0; i < bucket_.size(); i++) {
        output.writeMessage(4, bucket_.get(i));
      }
      for (int i = 0; i < doc_.size(); i++) {
        output.writeMessage(5, doc_.get(i));
      }
      for (int i = 0; i < relatedSearch_.size(); i++) {
        output.writeMessage(6, relatedSearch_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getOriginalQueryBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getSuggestedQueryBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(3, aggregateQuery_);
      }
      for (int i = 0; i < bucket_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, bucket_.get(i));
      }
      for (int i = 0; i < doc_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, doc_.get(i));
      }
      for (int i = 0; i < relatedSearch_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, relatedSearch_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code SearchResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.SearchResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SearchResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SearchResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getBucketFieldBuilder();
          getDocFieldBuilder();
          getRelatedSearchFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        originalQuery_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        suggestedQuery_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        aggregateQuery_ = false;
        bitField0_ = (bitField0_ & ~0x00000004);
        if (bucketBuilder_ == null) {
          bucket_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          bucketBuilder_.clear();
        }
        if (docBuilder_ == null) {
          doc_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          docBuilder_.clear();
        }
        if (relatedSearchBuilder_ == null) {
          relatedSearch_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
        } else {
          relatedSearchBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_SearchResponse_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse build() {
        com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse result = new com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.originalQuery_ = originalQuery_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.suggestedQuery_ = suggestedQuery_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.aggregateQuery_ = aggregateQuery_;
        if (bucketBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            bucket_ = java.util.Collections.unmodifiableList(bucket_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.bucket_ = bucket_;
        } else {
          result.bucket_ = bucketBuilder_.build();
        }
        if (docBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            doc_ = java.util.Collections.unmodifiableList(doc_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.doc_ = doc_;
        } else {
          result.doc_ = docBuilder_.build();
        }
        if (relatedSearchBuilder_ == null) {
          if (((bitField0_ & 0x00000020) == 0x00000020)) {
            relatedSearch_ = java.util.Collections.unmodifiableList(relatedSearch_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.relatedSearch_ = relatedSearch_;
        } else {
          result.relatedSearch_ = relatedSearchBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse.getDefaultInstance()) return this;
        if (other.hasOriginalQuery()) {
          bitField0_ |= 0x00000001;
          originalQuery_ = other.originalQuery_;
          onChanged();
        }
        if (other.hasSuggestedQuery()) {
          bitField0_ |= 0x00000002;
          suggestedQuery_ = other.suggestedQuery_;
          onChanged();
        }
        if (other.hasAggregateQuery()) {
          setAggregateQuery(other.getAggregateQuery());
        }
        if (bucketBuilder_ == null) {
          if (!other.bucket_.isEmpty()) {
            if (bucket_.isEmpty()) {
              bucket_ = other.bucket_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureBucketIsMutable();
              bucket_.addAll(other.bucket_);
            }
            onChanged();
          }
        } else {
          if (!other.bucket_.isEmpty()) {
            if (bucketBuilder_.isEmpty()) {
              bucketBuilder_.dispose();
              bucketBuilder_ = null;
              bucket_ = other.bucket_;
              bitField0_ = (bitField0_ & ~0x00000008);
              bucketBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getBucketFieldBuilder() : null;
            } else {
              bucketBuilder_.addAllMessages(other.bucket_);
            }
          }
        }
        if (docBuilder_ == null) {
          if (!other.doc_.isEmpty()) {
            if (doc_.isEmpty()) {
              doc_ = other.doc_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureDocIsMutable();
              doc_.addAll(other.doc_);
            }
            onChanged();
          }
        } else {
          if (!other.doc_.isEmpty()) {
            if (docBuilder_.isEmpty()) {
              docBuilder_.dispose();
              docBuilder_ = null;
              doc_ = other.doc_;
              bitField0_ = (bitField0_ & ~0x00000010);
              docBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getDocFieldBuilder() : null;
            } else {
              docBuilder_.addAllMessages(other.doc_);
            }
          }
        }
        if (relatedSearchBuilder_ == null) {
          if (!other.relatedSearch_.isEmpty()) {
            if (relatedSearch_.isEmpty()) {
              relatedSearch_ = other.relatedSearch_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureRelatedSearchIsMutable();
              relatedSearch_.addAll(other.relatedSearch_);
            }
            onChanged();
          }
        } else {
          if (!other.relatedSearch_.isEmpty()) {
            if (relatedSearchBuilder_.isEmpty()) {
              relatedSearchBuilder_.dispose();
              relatedSearchBuilder_ = null;
              relatedSearch_ = other.relatedSearch_;
              bitField0_ = (bitField0_ & ~0x00000020);
              relatedSearchBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getRelatedSearchFieldBuilder() : null;
            } else {
              relatedSearchBuilder_.addAllMessages(other.relatedSearch_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.SearchResponse) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string originalQuery = 1;
      private java.lang.Object originalQuery_ = "";
      /**
       * <code>optional string originalQuery = 1;</code>
       */
      public boolean hasOriginalQuery() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string originalQuery = 1;</code>
       */
      public java.lang.String getOriginalQuery() {
        java.lang.Object ref = originalQuery_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          originalQuery_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string originalQuery = 1;</code>
       */
      public com.google.protobuf.ByteString
          getOriginalQueryBytes() {
        java.lang.Object ref = originalQuery_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          originalQuery_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string originalQuery = 1;</code>
       */
      public Builder setOriginalQuery(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        originalQuery_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string originalQuery = 1;</code>
       */
      public Builder clearOriginalQuery() {
        bitField0_ = (bitField0_ & ~0x00000001);
        originalQuery_ = getDefaultInstance().getOriginalQuery();
        onChanged();
        return this;
      }
      /**
       * <code>optional string originalQuery = 1;</code>
       */
      public Builder setOriginalQueryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        originalQuery_ = value;
        onChanged();
        return this;
      }

      // optional string suggestedQuery = 2;
      private java.lang.Object suggestedQuery_ = "";
      /**
       * <code>optional string suggestedQuery = 2;</code>
       */
      public boolean hasSuggestedQuery() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string suggestedQuery = 2;</code>
       */
      public java.lang.String getSuggestedQuery() {
        java.lang.Object ref = suggestedQuery_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          suggestedQuery_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string suggestedQuery = 2;</code>
       */
      public com.google.protobuf.ByteString
          getSuggestedQueryBytes() {
        java.lang.Object ref = suggestedQuery_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          suggestedQuery_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string suggestedQuery = 2;</code>
       */
      public Builder setSuggestedQuery(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        suggestedQuery_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string suggestedQuery = 2;</code>
       */
      public Builder clearSuggestedQuery() {
        bitField0_ = (bitField0_ & ~0x00000002);
        suggestedQuery_ = getDefaultInstance().getSuggestedQuery();
        onChanged();
        return this;
      }
      /**
       * <code>optional string suggestedQuery = 2;</code>
       */
      public Builder setSuggestedQueryBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        suggestedQuery_ = value;
        onChanged();
        return this;
      }

      // optional bool aggregateQuery = 3;
      private boolean aggregateQuery_ ;
      /**
       * <code>optional bool aggregateQuery = 3;</code>
       */
      public boolean hasAggregateQuery() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional bool aggregateQuery = 3;</code>
       */
      public boolean getAggregateQuery() {
        return aggregateQuery_;
      }
      /**
       * <code>optional bool aggregateQuery = 3;</code>
       */
      public Builder setAggregateQuery(boolean value) {
        bitField0_ |= 0x00000004;
        aggregateQuery_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool aggregateQuery = 3;</code>
       */
      public Builder clearAggregateQuery() {
        bitField0_ = (bitField0_ & ~0x00000004);
        aggregateQuery_ = false;
        onChanged();
        return this;
      }

      // repeated .Bucket bucket = 4;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Bucket> bucket_ =
        java.util.Collections.emptyList();
      private void ensureBucketIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          bucket_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.Bucket>(bucket_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Bucket, com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder> bucketBuilder_;

      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Bucket> getBucketList() {
        if (bucketBuilder_ == null) {
          return java.util.Collections.unmodifiableList(bucket_);
        } else {
          return bucketBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public int getBucketCount() {
        if (bucketBuilder_ == null) {
          return bucket_.size();
        } else {
          return bucketBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Bucket getBucket(int index) {
        if (bucketBuilder_ == null) {
          return bucket_.get(index);
        } else {
          return bucketBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public Builder setBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Bucket value) {
        if (bucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBucketIsMutable();
          bucket_.set(index, value);
          onChanged();
        } else {
          bucketBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public Builder setBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder builderForValue) {
        if (bucketBuilder_ == null) {
          ensureBucketIsMutable();
          bucket_.set(index, builderForValue.build());
          onChanged();
        } else {
          bucketBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public Builder addBucket(com.akdeniz.googleplaycrawler.GooglePlay.Bucket value) {
        if (bucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBucketIsMutable();
          bucket_.add(value);
          onChanged();
        } else {
          bucketBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public Builder addBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Bucket value) {
        if (bucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureBucketIsMutable();
          bucket_.add(index, value);
          onChanged();
        } else {
          bucketBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public Builder addBucket(
          com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder builderForValue) {
        if (bucketBuilder_ == null) {
          ensureBucketIsMutable();
          bucket_.add(builderForValue.build());
          onChanged();
        } else {
          bucketBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public Builder addBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder builderForValue) {
        if (bucketBuilder_ == null) {
          ensureBucketIsMutable();
          bucket_.add(index, builderForValue.build());
          onChanged();
        } else {
          bucketBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public Builder addAllBucket(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.Bucket> values) {
        if (bucketBuilder_ == null) {
          ensureBucketIsMutable();
          super.addAll(values, bucket_);
          onChanged();
        } else {
          bucketBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public Builder clearBucket() {
        if (bucketBuilder_ == null) {
          bucket_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          bucketBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public Builder removeBucket(int index) {
        if (bucketBuilder_ == null) {
          ensureBucketIsMutable();
          bucket_.remove(index);
          onChanged();
        } else {
          bucketBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder getBucketBuilder(
          int index) {
        return getBucketFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder getBucketOrBuilder(
          int index) {
        if (bucketBuilder_ == null) {
          return bucket_.get(index);  } else {
          return bucketBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder> 
           getBucketOrBuilderList() {
        if (bucketBuilder_ != null) {
          return bucketBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(bucket_);
        }
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder addBucketBuilder() {
        return getBucketFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.Bucket.getDefaultInstance());
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder addBucketBuilder(
          int index) {
        return getBucketFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.Bucket.getDefaultInstance());
      }
      /**
       * <code>repeated .Bucket bucket = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder> 
           getBucketBuilderList() {
        return getBucketFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.Bucket, com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder> 
          getBucketFieldBuilder() {
        if (bucketBuilder_ == null) {
          bucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.Bucket, com.akdeniz.googleplaycrawler.GooglePlay.Bucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.BucketOrBuilder>(
                  bucket_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          bucket_ = null;
        }
        return bucketBuilder_;
      }

      // repeated .DocV2 doc = 5;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> doc_ =
        java.util.Collections.emptyList();
      private void ensureDocIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          doc_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.DocV2>(doc_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> docBuilder_;

      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2> getDocList() {
        if (docBuilder_ == null) {
          return java.util.Collections.unmodifiableList(doc_);
        } else {
          return docBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public int getDocCount() {
        if (docBuilder_ == null) {
          return doc_.size();
        } else {
          return docBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2 getDoc(int index) {
        if (docBuilder_ == null) {
          return doc_.get(index);
        } else {
          return docBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public Builder setDoc(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2 value) {
        if (docBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocIsMutable();
          doc_.set(index, value);
          onChanged();
        } else {
          docBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public Builder setDoc(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder builderForValue) {
        if (docBuilder_ == null) {
          ensureDocIsMutable();
          doc_.set(index, builderForValue.build());
          onChanged();
        } else {
          docBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public Builder addDoc(com.akdeniz.googleplaycrawler.GooglePlay.DocV2 value) {
        if (docBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocIsMutable();
          doc_.add(value);
          onChanged();
        } else {
          docBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public Builder addDoc(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2 value) {
        if (docBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureDocIsMutable();
          doc_.add(index, value);
          onChanged();
        } else {
          docBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public Builder addDoc(
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder builderForValue) {
        if (docBuilder_ == null) {
          ensureDocIsMutable();
          doc_.add(builderForValue.build());
          onChanged();
        } else {
          docBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public Builder addDoc(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder builderForValue) {
        if (docBuilder_ == null) {
          ensureDocIsMutable();
          doc_.add(index, builderForValue.build());
          onChanged();
        } else {
          docBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public Builder addAllDoc(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV2> values) {
        if (docBuilder_ == null) {
          ensureDocIsMutable();
          super.addAll(values, doc_);
          onChanged();
        } else {
          docBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public Builder clearDoc() {
        if (docBuilder_ == null) {
          doc_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          docBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public Builder removeDoc(int index) {
        if (docBuilder_ == null) {
          ensureDocIsMutable();
          doc_.remove(index);
          onChanged();
        } else {
          docBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder getDocBuilder(
          int index) {
        return getDocFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder getDocOrBuilder(
          int index) {
        if (docBuilder_ == null) {
          return doc_.get(index);  } else {
          return docBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> 
           getDocOrBuilderList() {
        if (docBuilder_ != null) {
          return docBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(doc_);
        }
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder addDocBuilder() {
        return getDocFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance());
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder addDocBuilder(
          int index) {
        return getDocFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.getDefaultInstance());
      }
      /**
       * <code>repeated .DocV2 doc = 5;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder> 
           getDocBuilderList() {
        return getDocFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder> 
          getDocFieldBuilder() {
        if (docBuilder_ == null) {
          docBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DocV2, com.akdeniz.googleplaycrawler.GooglePlay.DocV2.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DocV2OrBuilder>(
                  doc_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          doc_ = null;
        }
        return docBuilder_;
      }

      // repeated .RelatedSearch relatedSearch = 6;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch> relatedSearch_ =
        java.util.Collections.emptyList();
      private void ensureRelatedSearchIsMutable() {
        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
          relatedSearch_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch>(relatedSearch_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch, com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearchOrBuilder> relatedSearchBuilder_;

      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch> getRelatedSearchList() {
        if (relatedSearchBuilder_ == null) {
          return java.util.Collections.unmodifiableList(relatedSearch_);
        } else {
          return relatedSearchBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public int getRelatedSearchCount() {
        if (relatedSearchBuilder_ == null) {
          return relatedSearch_.size();
        } else {
          return relatedSearchBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch getRelatedSearch(int index) {
        if (relatedSearchBuilder_ == null) {
          return relatedSearch_.get(index);
        } else {
          return relatedSearchBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public Builder setRelatedSearch(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch value) {
        if (relatedSearchBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRelatedSearchIsMutable();
          relatedSearch_.set(index, value);
          onChanged();
        } else {
          relatedSearchBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public Builder setRelatedSearch(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.Builder builderForValue) {
        if (relatedSearchBuilder_ == null) {
          ensureRelatedSearchIsMutable();
          relatedSearch_.set(index, builderForValue.build());
          onChanged();
        } else {
          relatedSearchBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public Builder addRelatedSearch(com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch value) {
        if (relatedSearchBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRelatedSearchIsMutable();
          relatedSearch_.add(value);
          onChanged();
        } else {
          relatedSearchBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public Builder addRelatedSearch(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch value) {
        if (relatedSearchBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureRelatedSearchIsMutable();
          relatedSearch_.add(index, value);
          onChanged();
        } else {
          relatedSearchBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public Builder addRelatedSearch(
          com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.Builder builderForValue) {
        if (relatedSearchBuilder_ == null) {
          ensureRelatedSearchIsMutable();
          relatedSearch_.add(builderForValue.build());
          onChanged();
        } else {
          relatedSearchBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public Builder addRelatedSearch(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.Builder builderForValue) {
        if (relatedSearchBuilder_ == null) {
          ensureRelatedSearchIsMutable();
          relatedSearch_.add(index, builderForValue.build());
          onChanged();
        } else {
          relatedSearchBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public Builder addAllRelatedSearch(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch> values) {
        if (relatedSearchBuilder_ == null) {
          ensureRelatedSearchIsMutable();
          super.addAll(values, relatedSearch_);
          onChanged();
        } else {
          relatedSearchBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public Builder clearRelatedSearch() {
        if (relatedSearchBuilder_ == null) {
          relatedSearch_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          relatedSearchBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public Builder removeRelatedSearch(int index) {
        if (relatedSearchBuilder_ == null) {
          ensureRelatedSearchIsMutable();
          relatedSearch_.remove(index);
          onChanged();
        } else {
          relatedSearchBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.Builder getRelatedSearchBuilder(
          int index) {
        return getRelatedSearchFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearchOrBuilder getRelatedSearchOrBuilder(
          int index) {
        if (relatedSearchBuilder_ == null) {
          return relatedSearch_.get(index);  } else {
          return relatedSearchBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearchOrBuilder> 
           getRelatedSearchOrBuilderList() {
        if (relatedSearchBuilder_ != null) {
          return relatedSearchBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(relatedSearch_);
        }
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.Builder addRelatedSearchBuilder() {
        return getRelatedSearchFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.getDefaultInstance());
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.Builder addRelatedSearchBuilder(
          int index) {
        return getRelatedSearchFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.getDefaultInstance());
      }
      /**
       * <code>repeated .RelatedSearch relatedSearch = 6;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.Builder> 
           getRelatedSearchBuilderList() {
        return getRelatedSearchFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch, com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearchOrBuilder> 
          getRelatedSearchFieldBuilder() {
        if (relatedSearchBuilder_ == null) {
          relatedSearchBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch, com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearch.Builder, com.akdeniz.googleplaycrawler.GooglePlay.RelatedSearchOrBuilder>(
                  relatedSearch_,
                  ((bitField0_ & 0x00000020) == 0x00000020),
                  getParentForChildren(),
                  isClean());
          relatedSearch_ = null;
        }
        return relatedSearchBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:SearchResponse)
    }

    static {
      defaultInstance = new SearchResponse(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:SearchResponse)
  }

  public interface UploadDeviceConfigRequestOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .DeviceConfigurationProto deviceConfiguration = 1;
    /**
     * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
     */
    boolean hasDeviceConfiguration();
    /**
     * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto getDeviceConfiguration();
    /**
     * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProtoOrBuilder getDeviceConfigurationOrBuilder();

    // optional string manufacturer = 2;
    /**
     * <code>optional string manufacturer = 2;</code>
     */
    boolean hasManufacturer();
    /**
     * <code>optional string manufacturer = 2;</code>
     */
    java.lang.String getManufacturer();
    /**
     * <code>optional string manufacturer = 2;</code>
     */
    com.google.protobuf.ByteString
        getManufacturerBytes();

    // optional string gcmRegistrationId = 3;
    /**
     * <code>optional string gcmRegistrationId = 3;</code>
     */
    boolean hasGcmRegistrationId();
    /**
     * <code>optional string gcmRegistrationId = 3;</code>
     */
    java.lang.String getGcmRegistrationId();
    /**
     * <code>optional string gcmRegistrationId = 3;</code>
     */
    com.google.protobuf.ByteString
        getGcmRegistrationIdBytes();
  }
  /**
   * Protobuf type {@code UploadDeviceConfigRequest}
   */
  public static final class UploadDeviceConfigRequest extends
      com.google.protobuf.GeneratedMessage
      implements UploadDeviceConfigRequestOrBuilder {
    // Use UploadDeviceConfigRequest.newBuilder() to construct.
    private UploadDeviceConfigRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private UploadDeviceConfigRequest(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final UploadDeviceConfigRequest defaultInstance;
    public static UploadDeviceConfigRequest getDefaultInstance() {
      return defaultInstance;
    }

    public UploadDeviceConfigRequest getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private UploadDeviceConfigRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = deviceConfiguration_.toBuilder();
              }
              deviceConfiguration_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(deviceConfiguration_);
                deviceConfiguration_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              manufacturer_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              gcmRegistrationId_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UploadDeviceConfigRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UploadDeviceConfigRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest.class, com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest.Builder.class);
    }

    public static com.google.protobuf.Parser<UploadDeviceConfigRequest> PARSER =
        new com.google.protobuf.AbstractParser<UploadDeviceConfigRequest>() {
      public UploadDeviceConfigRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UploadDeviceConfigRequest(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<UploadDeviceConfigRequest> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .DeviceConfigurationProto deviceConfiguration = 1;
    public static final int DEVICECONFIGURATION_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto deviceConfiguration_;
    /**
     * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
     */
    public boolean hasDeviceConfiguration() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto getDeviceConfiguration() {
      return deviceConfiguration_;
    }
    /**
     * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProtoOrBuilder getDeviceConfigurationOrBuilder() {
      return deviceConfiguration_;
    }

    // optional string manufacturer = 2;
    public static final int MANUFACTURER_FIELD_NUMBER = 2;
    private java.lang.Object manufacturer_;
    /**
     * <code>optional string manufacturer = 2;</code>
     */
    public boolean hasManufacturer() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string manufacturer = 2;</code>
     */
    public java.lang.String getManufacturer() {
      java.lang.Object ref = manufacturer_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          manufacturer_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string manufacturer = 2;</code>
     */
    public com.google.protobuf.ByteString
        getManufacturerBytes() {
      java.lang.Object ref = manufacturer_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        manufacturer_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string gcmRegistrationId = 3;
    public static final int GCMREGISTRATIONID_FIELD_NUMBER = 3;
    private java.lang.Object gcmRegistrationId_;
    /**
     * <code>optional string gcmRegistrationId = 3;</code>
     */
    public boolean hasGcmRegistrationId() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string gcmRegistrationId = 3;</code>
     */
    public java.lang.String getGcmRegistrationId() {
      java.lang.Object ref = gcmRegistrationId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          gcmRegistrationId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string gcmRegistrationId = 3;</code>
     */
    public com.google.protobuf.ByteString
        getGcmRegistrationIdBytes() {
      java.lang.Object ref = gcmRegistrationId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        gcmRegistrationId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      deviceConfiguration_ = com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.getDefaultInstance();
      manufacturer_ = "";
      gcmRegistrationId_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, deviceConfiguration_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getManufacturerBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getGcmRegistrationIdBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, deviceConfiguration_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getManufacturerBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getGcmRegistrationIdBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code UploadDeviceConfigRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UploadDeviceConfigRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UploadDeviceConfigRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest.class, com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getDeviceConfigurationFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (deviceConfigurationBuilder_ == null) {
          deviceConfiguration_ = com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.getDefaultInstance();
        } else {
          deviceConfigurationBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        manufacturer_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        gcmRegistrationId_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UploadDeviceConfigRequest_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest build() {
        com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest result = new com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (deviceConfigurationBuilder_ == null) {
          result.deviceConfiguration_ = deviceConfiguration_;
        } else {
          result.deviceConfiguration_ = deviceConfigurationBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.manufacturer_ = manufacturer_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.gcmRegistrationId_ = gcmRegistrationId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest.getDefaultInstance()) return this;
        if (other.hasDeviceConfiguration()) {
          mergeDeviceConfiguration(other.getDeviceConfiguration());
        }
        if (other.hasManufacturer()) {
          bitField0_ |= 0x00000002;
          manufacturer_ = other.manufacturer_;
          onChanged();
        }
        if (other.hasGcmRegistrationId()) {
          bitField0_ |= 0x00000004;
          gcmRegistrationId_ = other.gcmRegistrationId_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigRequest) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .DeviceConfigurationProto deviceConfiguration = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto deviceConfiguration_ = com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto, com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProtoOrBuilder> deviceConfigurationBuilder_;
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
       */
      public boolean hasDeviceConfiguration() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto getDeviceConfiguration() {
        if (deviceConfigurationBuilder_ == null) {
          return deviceConfiguration_;
        } else {
          return deviceConfigurationBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
       */
      public Builder setDeviceConfiguration(com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto value) {
        if (deviceConfigurationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          deviceConfiguration_ = value;
          onChanged();
        } else {
          deviceConfigurationBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
       */
      public Builder setDeviceConfiguration(
          com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.Builder builderForValue) {
        if (deviceConfigurationBuilder_ == null) {
          deviceConfiguration_ = builderForValue.build();
          onChanged();
        } else {
          deviceConfigurationBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
       */
      public Builder mergeDeviceConfiguration(com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto value) {
        if (deviceConfigurationBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              deviceConfiguration_ != com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.getDefaultInstance()) {
            deviceConfiguration_ =
              com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.newBuilder(deviceConfiguration_).mergeFrom(value).buildPartial();
          } else {
            deviceConfiguration_ = value;
          }
          onChanged();
        } else {
          deviceConfigurationBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
       */
      public Builder clearDeviceConfiguration() {
        if (deviceConfigurationBuilder_ == null) {
          deviceConfiguration_ = com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.getDefaultInstance();
          onChanged();
        } else {
          deviceConfigurationBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.Builder getDeviceConfigurationBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getDeviceConfigurationFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProtoOrBuilder getDeviceConfigurationOrBuilder() {
        if (deviceConfigurationBuilder_ != null) {
          return deviceConfigurationBuilder_.getMessageOrBuilder();
        } else {
          return deviceConfiguration_;
        }
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto, com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProtoOrBuilder> 
          getDeviceConfigurationFieldBuilder() {
        if (deviceConfigurationBuilder_ == null) {
          deviceConfigurationBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto, com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProtoOrBuilder>(
                  deviceConfiguration_,
                  getParentForChildren(),
                  isClean());
          deviceConfiguration_ = null;
        }
        return deviceConfigurationBuilder_;
      }

      // optional string manufacturer = 2;
      private java.lang.Object manufacturer_ = "";
      /**
       * <code>optional string manufacturer = 2;</code>
       */
      public boolean hasManufacturer() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string manufacturer = 2;</code>
       */
      public java.lang.String getManufacturer() {
        java.lang.Object ref = manufacturer_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          manufacturer_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string manufacturer = 2;</code>
       */
      public com.google.protobuf.ByteString
          getManufacturerBytes() {
        java.lang.Object ref = manufacturer_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          manufacturer_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string manufacturer = 2;</code>
       */
      public Builder setManufacturer(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        manufacturer_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string manufacturer = 2;</code>
       */
      public Builder clearManufacturer() {
        bitField0_ = (bitField0_ & ~0x00000002);
        manufacturer_ = getDefaultInstance().getManufacturer();
        onChanged();
        return this;
      }
      /**
       * <code>optional string manufacturer = 2;</code>
       */
      public Builder setManufacturerBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        manufacturer_ = value;
        onChanged();
        return this;
      }

      // optional string gcmRegistrationId = 3;
      private java.lang.Object gcmRegistrationId_ = "";
      /**
       * <code>optional string gcmRegistrationId = 3;</code>
       */
      public boolean hasGcmRegistrationId() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string gcmRegistrationId = 3;</code>
       */
      public java.lang.String getGcmRegistrationId() {
        java.lang.Object ref = gcmRegistrationId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          gcmRegistrationId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string gcmRegistrationId = 3;</code>
       */
      public com.google.protobuf.ByteString
          getGcmRegistrationIdBytes() {
        java.lang.Object ref = gcmRegistrationId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          gcmRegistrationId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string gcmRegistrationId = 3;</code>
       */
      public Builder setGcmRegistrationId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        gcmRegistrationId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string gcmRegistrationId = 3;</code>
       */
      public Builder clearGcmRegistrationId() {
        bitField0_ = (bitField0_ & ~0x00000004);
        gcmRegistrationId_ = getDefaultInstance().getGcmRegistrationId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string gcmRegistrationId = 3;</code>
       */
      public Builder setGcmRegistrationIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        gcmRegistrationId_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:UploadDeviceConfigRequest)
    }

    static {
      defaultInstance = new UploadDeviceConfigRequest(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:UploadDeviceConfigRequest)
  }

  public interface UploadDeviceConfigResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string uploadDeviceConfigToken = 1;
    /**
     * <code>optional string uploadDeviceConfigToken = 1;</code>
     */
    boolean hasUploadDeviceConfigToken();
    /**
     * <code>optional string uploadDeviceConfigToken = 1;</code>
     */
    java.lang.String getUploadDeviceConfigToken();
    /**
     * <code>optional string uploadDeviceConfigToken = 1;</code>
     */
    com.google.protobuf.ByteString
        getUploadDeviceConfigTokenBytes();
  }
  /**
   * Protobuf type {@code UploadDeviceConfigResponse}
   */
  public static final class UploadDeviceConfigResponse extends
      com.google.protobuf.GeneratedMessage
      implements UploadDeviceConfigResponseOrBuilder {
    // Use UploadDeviceConfigResponse.newBuilder() to construct.
    private UploadDeviceConfigResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private UploadDeviceConfigResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final UploadDeviceConfigResponse defaultInstance;
    public static UploadDeviceConfigResponse getDefaultInstance() {
      return defaultInstance;
    }

    public UploadDeviceConfigResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private UploadDeviceConfigResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              uploadDeviceConfigToken_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UploadDeviceConfigResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UploadDeviceConfigResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.Builder.class);
    }

    public static com.google.protobuf.Parser<UploadDeviceConfigResponse> PARSER =
        new com.google.protobuf.AbstractParser<UploadDeviceConfigResponse>() {
      public UploadDeviceConfigResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UploadDeviceConfigResponse(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<UploadDeviceConfigResponse> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string uploadDeviceConfigToken = 1;
    public static final int UPLOADDEVICECONFIGTOKEN_FIELD_NUMBER = 1;
    private java.lang.Object uploadDeviceConfigToken_;
    /**
     * <code>optional string uploadDeviceConfigToken = 1;</code>
     */
    public boolean hasUploadDeviceConfigToken() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string uploadDeviceConfigToken = 1;</code>
     */
    public java.lang.String getUploadDeviceConfigToken() {
      java.lang.Object ref = uploadDeviceConfigToken_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          uploadDeviceConfigToken_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string uploadDeviceConfigToken = 1;</code>
     */
    public com.google.protobuf.ByteString
        getUploadDeviceConfigTokenBytes() {
      java.lang.Object ref = uploadDeviceConfigToken_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        uploadDeviceConfigToken_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      uploadDeviceConfigToken_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getUploadDeviceConfigTokenBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getUploadDeviceConfigTokenBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code UploadDeviceConfigResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UploadDeviceConfigResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UploadDeviceConfigResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        uploadDeviceConfigToken_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UploadDeviceConfigResponse_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse build() {
        com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse result = new com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.uploadDeviceConfigToken_ = uploadDeviceConfigToken_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse.getDefaultInstance()) return this;
        if (other.hasUploadDeviceConfigToken()) {
          bitField0_ |= 0x00000001;
          uploadDeviceConfigToken_ = other.uploadDeviceConfigToken_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.UploadDeviceConfigResponse) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string uploadDeviceConfigToken = 1;
      private java.lang.Object uploadDeviceConfigToken_ = "";
      /**
       * <code>optional string uploadDeviceConfigToken = 1;</code>
       */
      public boolean hasUploadDeviceConfigToken() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string uploadDeviceConfigToken = 1;</code>
       */
      public java.lang.String getUploadDeviceConfigToken() {
        java.lang.Object ref = uploadDeviceConfigToken_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          uploadDeviceConfigToken_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string uploadDeviceConfigToken = 1;</code>
       */
      public com.google.protobuf.ByteString
          getUploadDeviceConfigTokenBytes() {
        java.lang.Object ref = uploadDeviceConfigToken_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          uploadDeviceConfigToken_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string uploadDeviceConfigToken = 1;</code>
       */
      public Builder setUploadDeviceConfigToken(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        uploadDeviceConfigToken_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string uploadDeviceConfigToken = 1;</code>
       */
      public Builder clearUploadDeviceConfigToken() {
        bitField0_ = (bitField0_ & ~0x00000001);
        uploadDeviceConfigToken_ = getDefaultInstance().getUploadDeviceConfigToken();
        onChanged();
        return this;
      }
      /**
       * <code>optional string uploadDeviceConfigToken = 1;</code>
       */
      public Builder setUploadDeviceConfigTokenBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        uploadDeviceConfigToken_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:UploadDeviceConfigResponse)
    }

    static {
      defaultInstance = new UploadDeviceConfigResponse(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:UploadDeviceConfigResponse)
  }

  public interface AndroidCheckinRequestOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string imei = 1;
    /**
     * <code>optional string imei = 1;</code>
     */
    boolean hasImei();
    /**
     * <code>optional string imei = 1;</code>
     */
    java.lang.String getImei();
    /**
     * <code>optional string imei = 1;</code>
     */
    com.google.protobuf.ByteString
        getImeiBytes();

    // optional int64 id = 2;
    /**
     * <code>optional int64 id = 2;</code>
     */
    boolean hasId();
    /**
     * <code>optional int64 id = 2;</code>
     */
    long getId();

    // optional string digest = 3;
    /**
     * <code>optional string digest = 3;</code>
     */
    boolean hasDigest();
    /**
     * <code>optional string digest = 3;</code>
     */
    java.lang.String getDigest();
    /**
     * <code>optional string digest = 3;</code>
     */
    com.google.protobuf.ByteString
        getDigestBytes();

    // optional .AndroidCheckinProto checkin = 4;
    /**
     * <code>optional .AndroidCheckinProto checkin = 4;</code>
     */
    boolean hasCheckin();
    /**
     * <code>optional .AndroidCheckinProto checkin = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto getCheckin();
    /**
     * <code>optional .AndroidCheckinProto checkin = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProtoOrBuilder getCheckinOrBuilder();

    // optional string desiredBuild = 5;
    /**
     * <code>optional string desiredBuild = 5;</code>
     */
    boolean hasDesiredBuild();
    /**
     * <code>optional string desiredBuild = 5;</code>
     */
    java.lang.String getDesiredBuild();
    /**
     * <code>optional string desiredBuild = 5;</code>
     */
    com.google.protobuf.ByteString
        getDesiredBuildBytes();

    // optional string locale = 6;
    /**
     * <code>optional string locale = 6;</code>
     */
    boolean hasLocale();
    /**
     * <code>optional string locale = 6;</code>
     */
    java.lang.String getLocale();
    /**
     * <code>optional string locale = 6;</code>
     */
    com.google.protobuf.ByteString
        getLocaleBytes();

    // optional int64 loggingId = 7;
    /**
     * <code>optional int64 loggingId = 7;</code>
     */
    boolean hasLoggingId();
    /**
     * <code>optional int64 loggingId = 7;</code>
     */
    long getLoggingId();

    // optional string marketCheckin = 8;
    /**
     * <code>optional string marketCheckin = 8;</code>
     */
    boolean hasMarketCheckin();
    /**
     * <code>optional string marketCheckin = 8;</code>
     */
    java.lang.String getMarketCheckin();
    /**
     * <code>optional string marketCheckin = 8;</code>
     */
    com.google.protobuf.ByteString
        getMarketCheckinBytes();

    // repeated string macAddr = 9;
    /**
     * <code>repeated string macAddr = 9;</code>
     */
    java.util.List<java.lang.String>
    getMacAddrList();
    /**
     * <code>repeated string macAddr = 9;</code>
     */
    int getMacAddrCount();
    /**
     * <code>repeated string macAddr = 9;</code>
     */
    java.lang.String getMacAddr(int index);
    /**
     * <code>repeated string macAddr = 9;</code>
     */
    com.google.protobuf.ByteString
        getMacAddrBytes(int index);

    // optional string meid = 10;
    /**
     * <code>optional string meid = 10;</code>
     */
    boolean hasMeid();
    /**
     * <code>optional string meid = 10;</code>
     */
    java.lang.String getMeid();
    /**
     * <code>optional string meid = 10;</code>
     */
    com.google.protobuf.ByteString
        getMeidBytes();

    // repeated string accountCookie = 11;
    /**
     * <code>repeated string accountCookie = 11;</code>
     */
    java.util.List<java.lang.String>
    getAccountCookieList();
    /**
     * <code>repeated string accountCookie = 11;</code>
     */
    int getAccountCookieCount();
    /**
     * <code>repeated string accountCookie = 11;</code>
     */
    java.lang.String getAccountCookie(int index);
    /**
     * <code>repeated string accountCookie = 11;</code>
     */
    com.google.protobuf.ByteString
        getAccountCookieBytes(int index);

    // optional string timeZone = 12;
    /**
     * <code>optional string timeZone = 12;</code>
     */
    boolean hasTimeZone();
    /**
     * <code>optional string timeZone = 12;</code>
     */
    java.lang.String getTimeZone();
    /**
     * <code>optional string timeZone = 12;</code>
     */
    com.google.protobuf.ByteString
        getTimeZoneBytes();

    // optional fixed64 securityToken = 13;
    /**
     * <code>optional fixed64 securityToken = 13;</code>
     */
    boolean hasSecurityToken();
    /**
     * <code>optional fixed64 securityToken = 13;</code>
     */
    long getSecurityToken();

    // optional int32 version = 14;
    /**
     * <code>optional int32 version = 14;</code>
     */
    boolean hasVersion();
    /**
     * <code>optional int32 version = 14;</code>
     */
    int getVersion();

    // repeated string otaCert = 15;
    /**
     * <code>repeated string otaCert = 15;</code>
     */
    java.util.List<java.lang.String>
    getOtaCertList();
    /**
     * <code>repeated string otaCert = 15;</code>
     */
    int getOtaCertCount();
    /**
     * <code>repeated string otaCert = 15;</code>
     */
    java.lang.String getOtaCert(int index);
    /**
     * <code>repeated string otaCert = 15;</code>
     */
    com.google.protobuf.ByteString
        getOtaCertBytes(int index);

    // optional string serialNumber = 16;
    /**
     * <code>optional string serialNumber = 16;</code>
     */
    boolean hasSerialNumber();
    /**
     * <code>optional string serialNumber = 16;</code>
     */
    java.lang.String getSerialNumber();
    /**
     * <code>optional string serialNumber = 16;</code>
     */
    com.google.protobuf.ByteString
        getSerialNumberBytes();

    // optional string esn = 17;
    /**
     * <code>optional string esn = 17;</code>
     */
    boolean hasEsn();
    /**
     * <code>optional string esn = 17;</code>
     */
    java.lang.String getEsn();
    /**
     * <code>optional string esn = 17;</code>
     */
    com.google.protobuf.ByteString
        getEsnBytes();

    // optional .DeviceConfigurationProto deviceConfiguration = 18;
    /**
     * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
     */
    boolean hasDeviceConfiguration();
    /**
     * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto getDeviceConfiguration();
    /**
     * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProtoOrBuilder getDeviceConfigurationOrBuilder();

    // repeated string macAddrType = 19;
    /**
     * <code>repeated string macAddrType = 19;</code>
     */
    java.util.List<java.lang.String>
    getMacAddrTypeList();
    /**
     * <code>repeated string macAddrType = 19;</code>
     */
    int getMacAddrTypeCount();
    /**
     * <code>repeated string macAddrType = 19;</code>
     */
    java.lang.String getMacAddrType(int index);
    /**
     * <code>repeated string macAddrType = 19;</code>
     */
    com.google.protobuf.ByteString
        getMacAddrTypeBytes(int index);

    // optional int32 fragment = 20;
    /**
     * <code>optional int32 fragment = 20;</code>
     */
    boolean hasFragment();
    /**
     * <code>optional int32 fragment = 20;</code>
     */
    int getFragment();

    // optional string userName = 21;
    /**
     * <code>optional string userName = 21;</code>
     */
    boolean hasUserName();
    /**
     * <code>optional string userName = 21;</code>
     */
    java.lang.String getUserName();
    /**
     * <code>optional string userName = 21;</code>
     */
    com.google.protobuf.ByteString
        getUserNameBytes();

    // optional int32 userSerialNumber = 22;
    /**
     * <code>optional int32 userSerialNumber = 22;</code>
     */
    boolean hasUserSerialNumber();
    /**
     * <code>optional int32 userSerialNumber = 22;</code>
     */
    int getUserSerialNumber();
  }
  /**
   * Protobuf type {@code AndroidCheckinRequest}
   */
  public static final class AndroidCheckinRequest extends
      com.google.protobuf.GeneratedMessage
      implements AndroidCheckinRequestOrBuilder {
    // Use AndroidCheckinRequest.newBuilder() to construct.
    private AndroidCheckinRequest(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AndroidCheckinRequest(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AndroidCheckinRequest defaultInstance;
    public static AndroidCheckinRequest getDefaultInstance() {
      return defaultInstance;
    }

    public AndroidCheckinRequest getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AndroidCheckinRequest(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              imei_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              id_ = input.readInt64();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              digest_ = input.readBytes();
              break;
            }
            case 34: {
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.Builder subBuilder = null;
              if (((bitField0_ & 0x00000008) == 0x00000008)) {
                subBuilder = checkin_.toBuilder();
              }
              checkin_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(checkin_);
                checkin_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000008;
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              desiredBuild_ = input.readBytes();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000020;
              locale_ = input.readBytes();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              loggingId_ = input.readInt64();
              break;
            }
            case 66: {
              bitField0_ |= 0x00000080;
              marketCheckin_ = input.readBytes();
              break;
            }
            case 74: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                macAddr_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000100;
              }
              macAddr_.add(input.readBytes());
              break;
            }
            case 82: {
              bitField0_ |= 0x00000100;
              meid_ = input.readBytes();
              break;
            }
            case 90: {
              if (!((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
                accountCookie_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000400;
              }
              accountCookie_.add(input.readBytes());
              break;
            }
            case 98: {
              bitField0_ |= 0x00000200;
              timeZone_ = input.readBytes();
              break;
            }
            case 105: {
              bitField0_ |= 0x00000400;
              securityToken_ = input.readFixed64();
              break;
            }
            case 112: {
              bitField0_ |= 0x00000800;
              version_ = input.readInt32();
              break;
            }
            case 122: {
              if (!((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
                otaCert_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00004000;
              }
              otaCert_.add(input.readBytes());
              break;
            }
            case 130: {
              bitField0_ |= 0x00001000;
              serialNumber_ = input.readBytes();
              break;
            }
            case 138: {
              bitField0_ |= 0x00002000;
              esn_ = input.readBytes();
              break;
            }
            case 146: {
              com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.Builder subBuilder = null;
              if (((bitField0_ & 0x00004000) == 0x00004000)) {
                subBuilder = deviceConfiguration_.toBuilder();
              }
              deviceConfiguration_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(deviceConfiguration_);
                deviceConfiguration_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00004000;
              break;
            }
            case 154: {
              if (!((mutable_bitField0_ & 0x00040000) == 0x00040000)) {
                macAddrType_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00040000;
              }
              macAddrType_.add(input.readBytes());
              break;
            }
            case 160: {
              bitField0_ |= 0x00008000;
              fragment_ = input.readInt32();
              break;
            }
            case 170: {
              bitField0_ |= 0x00010000;
              userName_ = input.readBytes();
              break;
            }
            case 176: {
              bitField0_ |= 0x00020000;
              userSerialNumber_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          macAddr_ = new com.google.protobuf.UnmodifiableLazyStringList(macAddr_);
        }
        if (((mutable_bitField0_ & 0x00000400) == 0x00000400)) {
          accountCookie_ = new com.google.protobuf.UnmodifiableLazyStringList(accountCookie_);
        }
        if (((mutable_bitField0_ & 0x00004000) == 0x00004000)) {
          otaCert_ = new com.google.protobuf.UnmodifiableLazyStringList(otaCert_);
        }
        if (((mutable_bitField0_ & 0x00040000) == 0x00040000)) {
          macAddrType_ = new com.google.protobuf.UnmodifiableLazyStringList(macAddrType_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinRequest_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinRequest_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest.Builder.class);
    }

    public static com.google.protobuf.Parser<AndroidCheckinRequest> PARSER =
        new com.google.protobuf.AbstractParser<AndroidCheckinRequest>() {
      public AndroidCheckinRequest parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AndroidCheckinRequest(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AndroidCheckinRequest> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string imei = 1;
    public static final int IMEI_FIELD_NUMBER = 1;
    private java.lang.Object imei_;
    /**
     * <code>optional string imei = 1;</code>
     */
    public boolean hasImei() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string imei = 1;</code>
     */
    public java.lang.String getImei() {
      java.lang.Object ref = imei_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          imei_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string imei = 1;</code>
     */
    public com.google.protobuf.ByteString
        getImeiBytes() {
      java.lang.Object ref = imei_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        imei_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 id = 2;
    public static final int ID_FIELD_NUMBER = 2;
    private long id_;
    /**
     * <code>optional int64 id = 2;</code>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 id = 2;</code>
     */
    public long getId() {
      return id_;
    }

    // optional string digest = 3;
    public static final int DIGEST_FIELD_NUMBER = 3;
    private java.lang.Object digest_;
    /**
     * <code>optional string digest = 3;</code>
     */
    public boolean hasDigest() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string digest = 3;</code>
     */
    public java.lang.String getDigest() {
      java.lang.Object ref = digest_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          digest_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string digest = 3;</code>
     */
    public com.google.protobuf.ByteString
        getDigestBytes() {
      java.lang.Object ref = digest_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        digest_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .AndroidCheckinProto checkin = 4;
    public static final int CHECKIN_FIELD_NUMBER = 4;
    private com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto checkin_;
    /**
     * <code>optional .AndroidCheckinProto checkin = 4;</code>
     */
    public boolean hasCheckin() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional .AndroidCheckinProto checkin = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto getCheckin() {
      return checkin_;
    }
    /**
     * <code>optional .AndroidCheckinProto checkin = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProtoOrBuilder getCheckinOrBuilder() {
      return checkin_;
    }

    // optional string desiredBuild = 5;
    public static final int DESIREDBUILD_FIELD_NUMBER = 5;
    private java.lang.Object desiredBuild_;
    /**
     * <code>optional string desiredBuild = 5;</code>
     */
    public boolean hasDesiredBuild() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string desiredBuild = 5;</code>
     */
    public java.lang.String getDesiredBuild() {
      java.lang.Object ref = desiredBuild_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          desiredBuild_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string desiredBuild = 5;</code>
     */
    public com.google.protobuf.ByteString
        getDesiredBuildBytes() {
      java.lang.Object ref = desiredBuild_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        desiredBuild_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string locale = 6;
    public static final int LOCALE_FIELD_NUMBER = 6;
    private java.lang.Object locale_;
    /**
     * <code>optional string locale = 6;</code>
     */
    public boolean hasLocale() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string locale = 6;</code>
     */
    public java.lang.String getLocale() {
      java.lang.Object ref = locale_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          locale_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string locale = 6;</code>
     */
    public com.google.protobuf.ByteString
        getLocaleBytes() {
      java.lang.Object ref = locale_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        locale_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 loggingId = 7;
    public static final int LOGGINGID_FIELD_NUMBER = 7;
    private long loggingId_;
    /**
     * <code>optional int64 loggingId = 7;</code>
     */
    public boolean hasLoggingId() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional int64 loggingId = 7;</code>
     */
    public long getLoggingId() {
      return loggingId_;
    }

    // optional string marketCheckin = 8;
    public static final int MARKETCHECKIN_FIELD_NUMBER = 8;
    private java.lang.Object marketCheckin_;
    /**
     * <code>optional string marketCheckin = 8;</code>
     */
    public boolean hasMarketCheckin() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional string marketCheckin = 8;</code>
     */
    public java.lang.String getMarketCheckin() {
      java.lang.Object ref = marketCheckin_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          marketCheckin_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string marketCheckin = 8;</code>
     */
    public com.google.protobuf.ByteString
        getMarketCheckinBytes() {
      java.lang.Object ref = marketCheckin_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        marketCheckin_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated string macAddr = 9;
    public static final int MACADDR_FIELD_NUMBER = 9;
    private com.google.protobuf.LazyStringList macAddr_;
    /**
     * <code>repeated string macAddr = 9;</code>
     */
    public java.util.List<java.lang.String>
        getMacAddrList() {
      return macAddr_;
    }
    /**
     * <code>repeated string macAddr = 9;</code>
     */
    public int getMacAddrCount() {
      return macAddr_.size();
    }
    /**
     * <code>repeated string macAddr = 9;</code>
     */
    public java.lang.String getMacAddr(int index) {
      return macAddr_.get(index);
    }
    /**
     * <code>repeated string macAddr = 9;</code>
     */
    public com.google.protobuf.ByteString
        getMacAddrBytes(int index) {
      return macAddr_.getByteString(index);
    }

    // optional string meid = 10;
    public static final int MEID_FIELD_NUMBER = 10;
    private java.lang.Object meid_;
    /**
     * <code>optional string meid = 10;</code>
     */
    public boolean hasMeid() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional string meid = 10;</code>
     */
    public java.lang.String getMeid() {
      java.lang.Object ref = meid_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          meid_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string meid = 10;</code>
     */
    public com.google.protobuf.ByteString
        getMeidBytes() {
      java.lang.Object ref = meid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        meid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated string accountCookie = 11;
    public static final int ACCOUNTCOOKIE_FIELD_NUMBER = 11;
    private com.google.protobuf.LazyStringList accountCookie_;
    /**
     * <code>repeated string accountCookie = 11;</code>
     */
    public java.util.List<java.lang.String>
        getAccountCookieList() {
      return accountCookie_;
    }
    /**
     * <code>repeated string accountCookie = 11;</code>
     */
    public int getAccountCookieCount() {
      return accountCookie_.size();
    }
    /**
     * <code>repeated string accountCookie = 11;</code>
     */
    public java.lang.String getAccountCookie(int index) {
      return accountCookie_.get(index);
    }
    /**
     * <code>repeated string accountCookie = 11;</code>
     */
    public com.google.protobuf.ByteString
        getAccountCookieBytes(int index) {
      return accountCookie_.getByteString(index);
    }

    // optional string timeZone = 12;
    public static final int TIMEZONE_FIELD_NUMBER = 12;
    private java.lang.Object timeZone_;
    /**
     * <code>optional string timeZone = 12;</code>
     */
    public boolean hasTimeZone() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional string timeZone = 12;</code>
     */
    public java.lang.String getTimeZone() {
      java.lang.Object ref = timeZone_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          timeZone_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string timeZone = 12;</code>
     */
    public com.google.protobuf.ByteString
        getTimeZoneBytes() {
      java.lang.Object ref = timeZone_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        timeZone_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional fixed64 securityToken = 13;
    public static final int SECURITYTOKEN_FIELD_NUMBER = 13;
    private long securityToken_;
    /**
     * <code>optional fixed64 securityToken = 13;</code>
     */
    public boolean hasSecurityToken() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional fixed64 securityToken = 13;</code>
     */
    public long getSecurityToken() {
      return securityToken_;
    }

    // optional int32 version = 14;
    public static final int VERSION_FIELD_NUMBER = 14;
    private int version_;
    /**
     * <code>optional int32 version = 14;</code>
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional int32 version = 14;</code>
     */
    public int getVersion() {
      return version_;
    }

    // repeated string otaCert = 15;
    public static final int OTACERT_FIELD_NUMBER = 15;
    private com.google.protobuf.LazyStringList otaCert_;
    /**
     * <code>repeated string otaCert = 15;</code>
     */
    public java.util.List<java.lang.String>
        getOtaCertList() {
      return otaCert_;
    }
    /**
     * <code>repeated string otaCert = 15;</code>
     */
    public int getOtaCertCount() {
      return otaCert_.size();
    }
    /**
     * <code>repeated string otaCert = 15;</code>
     */
    public java.lang.String getOtaCert(int index) {
      return otaCert_.get(index);
    }
    /**
     * <code>repeated string otaCert = 15;</code>
     */
    public com.google.protobuf.ByteString
        getOtaCertBytes(int index) {
      return otaCert_.getByteString(index);
    }

    // optional string serialNumber = 16;
    public static final int SERIALNUMBER_FIELD_NUMBER = 16;
    private java.lang.Object serialNumber_;
    /**
     * <code>optional string serialNumber = 16;</code>
     */
    public boolean hasSerialNumber() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <code>optional string serialNumber = 16;</code>
     */
    public java.lang.String getSerialNumber() {
      java.lang.Object ref = serialNumber_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          serialNumber_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string serialNumber = 16;</code>
     */
    public com.google.protobuf.ByteString
        getSerialNumberBytes() {
      java.lang.Object ref = serialNumber_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        serialNumber_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string esn = 17;
    public static final int ESN_FIELD_NUMBER = 17;
    private java.lang.Object esn_;
    /**
     * <code>optional string esn = 17;</code>
     */
    public boolean hasEsn() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     * <code>optional string esn = 17;</code>
     */
    public java.lang.String getEsn() {
      java.lang.Object ref = esn_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          esn_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string esn = 17;</code>
     */
    public com.google.protobuf.ByteString
        getEsnBytes() {
      java.lang.Object ref = esn_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        esn_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional .DeviceConfigurationProto deviceConfiguration = 18;
    public static final int DEVICECONFIGURATION_FIELD_NUMBER = 18;
    private com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto deviceConfiguration_;
    /**
     * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
     */
    public boolean hasDeviceConfiguration() {
      return ((bitField0_ & 0x00004000) == 0x00004000);
    }
    /**
     * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto getDeviceConfiguration() {
      return deviceConfiguration_;
    }
    /**
     * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProtoOrBuilder getDeviceConfigurationOrBuilder() {
      return deviceConfiguration_;
    }

    // repeated string macAddrType = 19;
    public static final int MACADDRTYPE_FIELD_NUMBER = 19;
    private com.google.protobuf.LazyStringList macAddrType_;
    /**
     * <code>repeated string macAddrType = 19;</code>
     */
    public java.util.List<java.lang.String>
        getMacAddrTypeList() {
      return macAddrType_;
    }
    /**
     * <code>repeated string macAddrType = 19;</code>
     */
    public int getMacAddrTypeCount() {
      return macAddrType_.size();
    }
    /**
     * <code>repeated string macAddrType = 19;</code>
     */
    public java.lang.String getMacAddrType(int index) {
      return macAddrType_.get(index);
    }
    /**
     * <code>repeated string macAddrType = 19;</code>
     */
    public com.google.protobuf.ByteString
        getMacAddrTypeBytes(int index) {
      return macAddrType_.getByteString(index);
    }

    // optional int32 fragment = 20;
    public static final int FRAGMENT_FIELD_NUMBER = 20;
    private int fragment_;
    /**
     * <code>optional int32 fragment = 20;</code>
     */
    public boolean hasFragment() {
      return ((bitField0_ & 0x00008000) == 0x00008000);
    }
    /**
     * <code>optional int32 fragment = 20;</code>
     */
    public int getFragment() {
      return fragment_;
    }

    // optional string userName = 21;
    public static final int USERNAME_FIELD_NUMBER = 21;
    private java.lang.Object userName_;
    /**
     * <code>optional string userName = 21;</code>
     */
    public boolean hasUserName() {
      return ((bitField0_ & 0x00010000) == 0x00010000);
    }
    /**
     * <code>optional string userName = 21;</code>
     */
    public java.lang.String getUserName() {
      java.lang.Object ref = userName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          userName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string userName = 21;</code>
     */
    public com.google.protobuf.ByteString
        getUserNameBytes() {
      java.lang.Object ref = userName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        userName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 userSerialNumber = 22;
    public static final int USERSERIALNUMBER_FIELD_NUMBER = 22;
    private int userSerialNumber_;
    /**
     * <code>optional int32 userSerialNumber = 22;</code>
     */
    public boolean hasUserSerialNumber() {
      return ((bitField0_ & 0x00020000) == 0x00020000);
    }
    /**
     * <code>optional int32 userSerialNumber = 22;</code>
     */
    public int getUserSerialNumber() {
      return userSerialNumber_;
    }

    private void initFields() {
      imei_ = "";
      id_ = 0L;
      digest_ = "";
      checkin_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.getDefaultInstance();
      desiredBuild_ = "";
      locale_ = "";
      loggingId_ = 0L;
      marketCheckin_ = "";
      macAddr_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      meid_ = "";
      accountCookie_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      timeZone_ = "";
      securityToken_ = 0L;
      version_ = 0;
      otaCert_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      serialNumber_ = "";
      esn_ = "";
      deviceConfiguration_ = com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.getDefaultInstance();
      macAddrType_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      fragment_ = 0;
      userName_ = "";
      userSerialNumber_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getImeiBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, id_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getDigestBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeMessage(4, checkin_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getDesiredBuildBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(6, getLocaleBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt64(7, loggingId_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeBytes(8, getMarketCheckinBytes());
      }
      for (int i = 0; i < macAddr_.size(); i++) {
        output.writeBytes(9, macAddr_.getByteString(i));
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBytes(10, getMeidBytes());
      }
      for (int i = 0; i < accountCookie_.size(); i++) {
        output.writeBytes(11, accountCookie_.getByteString(i));
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeBytes(12, getTimeZoneBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeFixed64(13, securityToken_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeInt32(14, version_);
      }
      for (int i = 0; i < otaCert_.size(); i++) {
        output.writeBytes(15, otaCert_.getByteString(i));
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeBytes(16, getSerialNumberBytes());
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeBytes(17, getEsnBytes());
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        output.writeMessage(18, deviceConfiguration_);
      }
      for (int i = 0; i < macAddrType_.size(); i++) {
        output.writeBytes(19, macAddrType_.getByteString(i));
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        output.writeInt32(20, fragment_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        output.writeBytes(21, getUserNameBytes());
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        output.writeInt32(22, userSerialNumber_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getImeiBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, id_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getDigestBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, checkin_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getDesiredBuildBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getLocaleBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(7, loggingId_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getMarketCheckinBytes());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < macAddr_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(macAddr_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getMacAddrList().size();
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(10, getMeidBytes());
      }
      {
        int dataSize = 0;
        for (int i = 0; i < accountCookie_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(accountCookie_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getAccountCookieList().size();
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(12, getTimeZoneBytes());
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed64Size(13, securityToken_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(14, version_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < otaCert_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(otaCert_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getOtaCertList().size();
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(16, getSerialNumberBytes());
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(17, getEsnBytes());
      }
      if (((bitField0_ & 0x00004000) == 0x00004000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(18, deviceConfiguration_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < macAddrType_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(macAddrType_.getByteString(i));
        }
        size += dataSize;
        size += 2 * getMacAddrTypeList().size();
      }
      if (((bitField0_ & 0x00008000) == 0x00008000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(20, fragment_);
      }
      if (((bitField0_ & 0x00010000) == 0x00010000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(21, getUserNameBytes());
      }
      if (((bitField0_ & 0x00020000) == 0x00020000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(22, userSerialNumber_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AndroidCheckinRequest}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequestOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinRequest_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinRequest_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getCheckinFieldBuilder();
          getDeviceConfigurationFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        imei_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        digest_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        if (checkinBuilder_ == null) {
          checkin_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.getDefaultInstance();
        } else {
          checkinBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        desiredBuild_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        locale_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        loggingId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        marketCheckin_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        macAddr_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        meid_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        accountCookie_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000400);
        timeZone_ = "";
        bitField0_ = (bitField0_ & ~0x00000800);
        securityToken_ = 0L;
        bitField0_ = (bitField0_ & ~0x00001000);
        version_ = 0;
        bitField0_ = (bitField0_ & ~0x00002000);
        otaCert_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00004000);
        serialNumber_ = "";
        bitField0_ = (bitField0_ & ~0x00008000);
        esn_ = "";
        bitField0_ = (bitField0_ & ~0x00010000);
        if (deviceConfigurationBuilder_ == null) {
          deviceConfiguration_ = com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.getDefaultInstance();
        } else {
          deviceConfigurationBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00020000);
        macAddrType_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00040000);
        fragment_ = 0;
        bitField0_ = (bitField0_ & ~0x00080000);
        userName_ = "";
        bitField0_ = (bitField0_ & ~0x00100000);
        userSerialNumber_ = 0;
        bitField0_ = (bitField0_ & ~0x00200000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinRequest_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest result = new com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.imei_ = imei_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.digest_ = digest_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        if (checkinBuilder_ == null) {
          result.checkin_ = checkin_;
        } else {
          result.checkin_ = checkinBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.desiredBuild_ = desiredBuild_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.locale_ = locale_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.loggingId_ = loggingId_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.marketCheckin_ = marketCheckin_;
        if (((bitField0_ & 0x00000100) == 0x00000100)) {
          macAddr_ = new com.google.protobuf.UnmodifiableLazyStringList(
              macAddr_);
          bitField0_ = (bitField0_ & ~0x00000100);
        }
        result.macAddr_ = macAddr_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000100;
        }
        result.meid_ = meid_;
        if (((bitField0_ & 0x00000400) == 0x00000400)) {
          accountCookie_ = new com.google.protobuf.UnmodifiableLazyStringList(
              accountCookie_);
          bitField0_ = (bitField0_ & ~0x00000400);
        }
        result.accountCookie_ = accountCookie_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000200;
        }
        result.timeZone_ = timeZone_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00000400;
        }
        result.securityToken_ = securityToken_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00000800;
        }
        result.version_ = version_;
        if (((bitField0_ & 0x00004000) == 0x00004000)) {
          otaCert_ = new com.google.protobuf.UnmodifiableLazyStringList(
              otaCert_);
          bitField0_ = (bitField0_ & ~0x00004000);
        }
        result.otaCert_ = otaCert_;
        if (((from_bitField0_ & 0x00008000) == 0x00008000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.serialNumber_ = serialNumber_;
        if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
          to_bitField0_ |= 0x00002000;
        }
        result.esn_ = esn_;
        if (((from_bitField0_ & 0x00020000) == 0x00020000)) {
          to_bitField0_ |= 0x00004000;
        }
        if (deviceConfigurationBuilder_ == null) {
          result.deviceConfiguration_ = deviceConfiguration_;
        } else {
          result.deviceConfiguration_ = deviceConfigurationBuilder_.build();
        }
        if (((bitField0_ & 0x00040000) == 0x00040000)) {
          macAddrType_ = new com.google.protobuf.UnmodifiableLazyStringList(
              macAddrType_);
          bitField0_ = (bitField0_ & ~0x00040000);
        }
        result.macAddrType_ = macAddrType_;
        if (((from_bitField0_ & 0x00080000) == 0x00080000)) {
          to_bitField0_ |= 0x00008000;
        }
        result.fragment_ = fragment_;
        if (((from_bitField0_ & 0x00100000) == 0x00100000)) {
          to_bitField0_ |= 0x00010000;
        }
        result.userName_ = userName_;
        if (((from_bitField0_ & 0x00200000) == 0x00200000)) {
          to_bitField0_ |= 0x00020000;
        }
        result.userSerialNumber_ = userSerialNumber_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest.getDefaultInstance()) return this;
        if (other.hasImei()) {
          bitField0_ |= 0x00000001;
          imei_ = other.imei_;
          onChanged();
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasDigest()) {
          bitField0_ |= 0x00000004;
          digest_ = other.digest_;
          onChanged();
        }
        if (other.hasCheckin()) {
          mergeCheckin(other.getCheckin());
        }
        if (other.hasDesiredBuild()) {
          bitField0_ |= 0x00000010;
          desiredBuild_ = other.desiredBuild_;
          onChanged();
        }
        if (other.hasLocale()) {
          bitField0_ |= 0x00000020;
          locale_ = other.locale_;
          onChanged();
        }
        if (other.hasLoggingId()) {
          setLoggingId(other.getLoggingId());
        }
        if (other.hasMarketCheckin()) {
          bitField0_ |= 0x00000080;
          marketCheckin_ = other.marketCheckin_;
          onChanged();
        }
        if (!other.macAddr_.isEmpty()) {
          if (macAddr_.isEmpty()) {
            macAddr_ = other.macAddr_;
            bitField0_ = (bitField0_ & ~0x00000100);
          } else {
            ensureMacAddrIsMutable();
            macAddr_.addAll(other.macAddr_);
          }
          onChanged();
        }
        if (other.hasMeid()) {
          bitField0_ |= 0x00000200;
          meid_ = other.meid_;
          onChanged();
        }
        if (!other.accountCookie_.isEmpty()) {
          if (accountCookie_.isEmpty()) {
            accountCookie_ = other.accountCookie_;
            bitField0_ = (bitField0_ & ~0x00000400);
          } else {
            ensureAccountCookieIsMutable();
            accountCookie_.addAll(other.accountCookie_);
          }
          onChanged();
        }
        if (other.hasTimeZone()) {
          bitField0_ |= 0x00000800;
          timeZone_ = other.timeZone_;
          onChanged();
        }
        if (other.hasSecurityToken()) {
          setSecurityToken(other.getSecurityToken());
        }
        if (other.hasVersion()) {
          setVersion(other.getVersion());
        }
        if (!other.otaCert_.isEmpty()) {
          if (otaCert_.isEmpty()) {
            otaCert_ = other.otaCert_;
            bitField0_ = (bitField0_ & ~0x00004000);
          } else {
            ensureOtaCertIsMutable();
            otaCert_.addAll(other.otaCert_);
          }
          onChanged();
        }
        if (other.hasSerialNumber()) {
          bitField0_ |= 0x00008000;
          serialNumber_ = other.serialNumber_;
          onChanged();
        }
        if (other.hasEsn()) {
          bitField0_ |= 0x00010000;
          esn_ = other.esn_;
          onChanged();
        }
        if (other.hasDeviceConfiguration()) {
          mergeDeviceConfiguration(other.getDeviceConfiguration());
        }
        if (!other.macAddrType_.isEmpty()) {
          if (macAddrType_.isEmpty()) {
            macAddrType_ = other.macAddrType_;
            bitField0_ = (bitField0_ & ~0x00040000);
          } else {
            ensureMacAddrTypeIsMutable();
            macAddrType_.addAll(other.macAddrType_);
          }
          onChanged();
        }
        if (other.hasFragment()) {
          setFragment(other.getFragment());
        }
        if (other.hasUserName()) {
          bitField0_ |= 0x00100000;
          userName_ = other.userName_;
          onChanged();
        }
        if (other.hasUserSerialNumber()) {
          setUserSerialNumber(other.getUserSerialNumber());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinRequest) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string imei = 1;
      private java.lang.Object imei_ = "";
      /**
       * <code>optional string imei = 1;</code>
       */
      public boolean hasImei() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string imei = 1;</code>
       */
      public java.lang.String getImei() {
        java.lang.Object ref = imei_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          imei_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string imei = 1;</code>
       */
      public com.google.protobuf.ByteString
          getImeiBytes() {
        java.lang.Object ref = imei_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          imei_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string imei = 1;</code>
       */
      public Builder setImei(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        imei_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string imei = 1;</code>
       */
      public Builder clearImei() {
        bitField0_ = (bitField0_ & ~0x00000001);
        imei_ = getDefaultInstance().getImei();
        onChanged();
        return this;
      }
      /**
       * <code>optional string imei = 1;</code>
       */
      public Builder setImeiBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        imei_ = value;
        onChanged();
        return this;
      }

      // optional int64 id = 2;
      private long id_ ;
      /**
       * <code>optional int64 id = 2;</code>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 id = 2;</code>
       */
      public long getId() {
        return id_;
      }
      /**
       * <code>optional int64 id = 2;</code>
       */
      public Builder setId(long value) {
        bitField0_ |= 0x00000002;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 id = 2;</code>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        id_ = 0L;
        onChanged();
        return this;
      }

      // optional string digest = 3;
      private java.lang.Object digest_ = "";
      /**
       * <code>optional string digest = 3;</code>
       */
      public boolean hasDigest() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string digest = 3;</code>
       */
      public java.lang.String getDigest() {
        java.lang.Object ref = digest_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          digest_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string digest = 3;</code>
       */
      public com.google.protobuf.ByteString
          getDigestBytes() {
        java.lang.Object ref = digest_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          digest_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string digest = 3;</code>
       */
      public Builder setDigest(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        digest_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string digest = 3;</code>
       */
      public Builder clearDigest() {
        bitField0_ = (bitField0_ & ~0x00000004);
        digest_ = getDefaultInstance().getDigest();
        onChanged();
        return this;
      }
      /**
       * <code>optional string digest = 3;</code>
       */
      public Builder setDigestBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        digest_ = value;
        onChanged();
        return this;
      }

      // optional .AndroidCheckinProto checkin = 4;
      private com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto checkin_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProtoOrBuilder> checkinBuilder_;
      /**
       * <code>optional .AndroidCheckinProto checkin = 4;</code>
       */
      public boolean hasCheckin() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional .AndroidCheckinProto checkin = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto getCheckin() {
        if (checkinBuilder_ == null) {
          return checkin_;
        } else {
          return checkinBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AndroidCheckinProto checkin = 4;</code>
       */
      public Builder setCheckin(com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto value) {
        if (checkinBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          checkin_ = value;
          onChanged();
        } else {
          checkinBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .AndroidCheckinProto checkin = 4;</code>
       */
      public Builder setCheckin(
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.Builder builderForValue) {
        if (checkinBuilder_ == null) {
          checkin_ = builderForValue.build();
          onChanged();
        } else {
          checkinBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .AndroidCheckinProto checkin = 4;</code>
       */
      public Builder mergeCheckin(com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto value) {
        if (checkinBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008) &&
              checkin_ != com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.getDefaultInstance()) {
            checkin_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.newBuilder(checkin_).mergeFrom(value).buildPartial();
          } else {
            checkin_ = value;
          }
          onChanged();
        } else {
          checkinBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000008;
        return this;
      }
      /**
       * <code>optional .AndroidCheckinProto checkin = 4;</code>
       */
      public Builder clearCheckin() {
        if (checkinBuilder_ == null) {
          checkin_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.getDefaultInstance();
          onChanged();
        } else {
          checkinBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }
      /**
       * <code>optional .AndroidCheckinProto checkin = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.Builder getCheckinBuilder() {
        bitField0_ |= 0x00000008;
        onChanged();
        return getCheckinFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AndroidCheckinProto checkin = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProtoOrBuilder getCheckinOrBuilder() {
        if (checkinBuilder_ != null) {
          return checkinBuilder_.getMessageOrBuilder();
        } else {
          return checkin_;
        }
      }
      /**
       * <code>optional .AndroidCheckinProto checkin = 4;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProtoOrBuilder> 
          getCheckinFieldBuilder() {
        if (checkinBuilder_ == null) {
          checkinBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProtoOrBuilder>(
                  checkin_,
                  getParentForChildren(),
                  isClean());
          checkin_ = null;
        }
        return checkinBuilder_;
      }

      // optional string desiredBuild = 5;
      private java.lang.Object desiredBuild_ = "";
      /**
       * <code>optional string desiredBuild = 5;</code>
       */
      public boolean hasDesiredBuild() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string desiredBuild = 5;</code>
       */
      public java.lang.String getDesiredBuild() {
        java.lang.Object ref = desiredBuild_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          desiredBuild_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string desiredBuild = 5;</code>
       */
      public com.google.protobuf.ByteString
          getDesiredBuildBytes() {
        java.lang.Object ref = desiredBuild_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          desiredBuild_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string desiredBuild = 5;</code>
       */
      public Builder setDesiredBuild(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        desiredBuild_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string desiredBuild = 5;</code>
       */
      public Builder clearDesiredBuild() {
        bitField0_ = (bitField0_ & ~0x00000010);
        desiredBuild_ = getDefaultInstance().getDesiredBuild();
        onChanged();
        return this;
      }
      /**
       * <code>optional string desiredBuild = 5;</code>
       */
      public Builder setDesiredBuildBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        desiredBuild_ = value;
        onChanged();
        return this;
      }

      // optional string locale = 6;
      private java.lang.Object locale_ = "";
      /**
       * <code>optional string locale = 6;</code>
       */
      public boolean hasLocale() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional string locale = 6;</code>
       */
      public java.lang.String getLocale() {
        java.lang.Object ref = locale_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          locale_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string locale = 6;</code>
       */
      public com.google.protobuf.ByteString
          getLocaleBytes() {
        java.lang.Object ref = locale_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          locale_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string locale = 6;</code>
       */
      public Builder setLocale(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        locale_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string locale = 6;</code>
       */
      public Builder clearLocale() {
        bitField0_ = (bitField0_ & ~0x00000020);
        locale_ = getDefaultInstance().getLocale();
        onChanged();
        return this;
      }
      /**
       * <code>optional string locale = 6;</code>
       */
      public Builder setLocaleBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        locale_ = value;
        onChanged();
        return this;
      }

      // optional int64 loggingId = 7;
      private long loggingId_ ;
      /**
       * <code>optional int64 loggingId = 7;</code>
       */
      public boolean hasLoggingId() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional int64 loggingId = 7;</code>
       */
      public long getLoggingId() {
        return loggingId_;
      }
      /**
       * <code>optional int64 loggingId = 7;</code>
       */
      public Builder setLoggingId(long value) {
        bitField0_ |= 0x00000040;
        loggingId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 loggingId = 7;</code>
       */
      public Builder clearLoggingId() {
        bitField0_ = (bitField0_ & ~0x00000040);
        loggingId_ = 0L;
        onChanged();
        return this;
      }

      // optional string marketCheckin = 8;
      private java.lang.Object marketCheckin_ = "";
      /**
       * <code>optional string marketCheckin = 8;</code>
       */
      public boolean hasMarketCheckin() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string marketCheckin = 8;</code>
       */
      public java.lang.String getMarketCheckin() {
        java.lang.Object ref = marketCheckin_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          marketCheckin_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string marketCheckin = 8;</code>
       */
      public com.google.protobuf.ByteString
          getMarketCheckinBytes() {
        java.lang.Object ref = marketCheckin_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          marketCheckin_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string marketCheckin = 8;</code>
       */
      public Builder setMarketCheckin(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        marketCheckin_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string marketCheckin = 8;</code>
       */
      public Builder clearMarketCheckin() {
        bitField0_ = (bitField0_ & ~0x00000080);
        marketCheckin_ = getDefaultInstance().getMarketCheckin();
        onChanged();
        return this;
      }
      /**
       * <code>optional string marketCheckin = 8;</code>
       */
      public Builder setMarketCheckinBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        marketCheckin_ = value;
        onChanged();
        return this;
      }

      // repeated string macAddr = 9;
      private com.google.protobuf.LazyStringList macAddr_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureMacAddrIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          macAddr_ = new com.google.protobuf.LazyStringArrayList(macAddr_);
          bitField0_ |= 0x00000100;
         }
      }
      /**
       * <code>repeated string macAddr = 9;</code>
       */
      public java.util.List<java.lang.String>
          getMacAddrList() {
        return java.util.Collections.unmodifiableList(macAddr_);
      }
      /**
       * <code>repeated string macAddr = 9;</code>
       */
      public int getMacAddrCount() {
        return macAddr_.size();
      }
      /**
       * <code>repeated string macAddr = 9;</code>
       */
      public java.lang.String getMacAddr(int index) {
        return macAddr_.get(index);
      }
      /**
       * <code>repeated string macAddr = 9;</code>
       */
      public com.google.protobuf.ByteString
          getMacAddrBytes(int index) {
        return macAddr_.getByteString(index);
      }
      /**
       * <code>repeated string macAddr = 9;</code>
       */
      public Builder setMacAddr(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMacAddrIsMutable();
        macAddr_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string macAddr = 9;</code>
       */
      public Builder addMacAddr(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMacAddrIsMutable();
        macAddr_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string macAddr = 9;</code>
       */
      public Builder addAllMacAddr(
          java.lang.Iterable<java.lang.String> values) {
        ensureMacAddrIsMutable();
        super.addAll(values, macAddr_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string macAddr = 9;</code>
       */
      public Builder clearMacAddr() {
        macAddr_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000100);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string macAddr = 9;</code>
       */
      public Builder addMacAddrBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMacAddrIsMutable();
        macAddr_.add(value);
        onChanged();
        return this;
      }

      // optional string meid = 10;
      private java.lang.Object meid_ = "";
      /**
       * <code>optional string meid = 10;</code>
       */
      public boolean hasMeid() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional string meid = 10;</code>
       */
      public java.lang.String getMeid() {
        java.lang.Object ref = meid_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          meid_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string meid = 10;</code>
       */
      public com.google.protobuf.ByteString
          getMeidBytes() {
        java.lang.Object ref = meid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          meid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string meid = 10;</code>
       */
      public Builder setMeid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        meid_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string meid = 10;</code>
       */
      public Builder clearMeid() {
        bitField0_ = (bitField0_ & ~0x00000200);
        meid_ = getDefaultInstance().getMeid();
        onChanged();
        return this;
      }
      /**
       * <code>optional string meid = 10;</code>
       */
      public Builder setMeidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        meid_ = value;
        onChanged();
        return this;
      }

      // repeated string accountCookie = 11;
      private com.google.protobuf.LazyStringList accountCookie_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureAccountCookieIsMutable() {
        if (!((bitField0_ & 0x00000400) == 0x00000400)) {
          accountCookie_ = new com.google.protobuf.LazyStringArrayList(accountCookie_);
          bitField0_ |= 0x00000400;
         }
      }
      /**
       * <code>repeated string accountCookie = 11;</code>
       */
      public java.util.List<java.lang.String>
          getAccountCookieList() {
        return java.util.Collections.unmodifiableList(accountCookie_);
      }
      /**
       * <code>repeated string accountCookie = 11;</code>
       */
      public int getAccountCookieCount() {
        return accountCookie_.size();
      }
      /**
       * <code>repeated string accountCookie = 11;</code>
       */
      public java.lang.String getAccountCookie(int index) {
        return accountCookie_.get(index);
      }
      /**
       * <code>repeated string accountCookie = 11;</code>
       */
      public com.google.protobuf.ByteString
          getAccountCookieBytes(int index) {
        return accountCookie_.getByteString(index);
      }
      /**
       * <code>repeated string accountCookie = 11;</code>
       */
      public Builder setAccountCookie(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAccountCookieIsMutable();
        accountCookie_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string accountCookie = 11;</code>
       */
      public Builder addAccountCookie(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAccountCookieIsMutable();
        accountCookie_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string accountCookie = 11;</code>
       */
      public Builder addAllAccountCookie(
          java.lang.Iterable<java.lang.String> values) {
        ensureAccountCookieIsMutable();
        super.addAll(values, accountCookie_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string accountCookie = 11;</code>
       */
      public Builder clearAccountCookie() {
        accountCookie_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000400);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string accountCookie = 11;</code>
       */
      public Builder addAccountCookieBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureAccountCookieIsMutable();
        accountCookie_.add(value);
        onChanged();
        return this;
      }

      // optional string timeZone = 12;
      private java.lang.Object timeZone_ = "";
      /**
       * <code>optional string timeZone = 12;</code>
       */
      public boolean hasTimeZone() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional string timeZone = 12;</code>
       */
      public java.lang.String getTimeZone() {
        java.lang.Object ref = timeZone_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          timeZone_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string timeZone = 12;</code>
       */
      public com.google.protobuf.ByteString
          getTimeZoneBytes() {
        java.lang.Object ref = timeZone_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          timeZone_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string timeZone = 12;</code>
       */
      public Builder setTimeZone(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        timeZone_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string timeZone = 12;</code>
       */
      public Builder clearTimeZone() {
        bitField0_ = (bitField0_ & ~0x00000800);
        timeZone_ = getDefaultInstance().getTimeZone();
        onChanged();
        return this;
      }
      /**
       * <code>optional string timeZone = 12;</code>
       */
      public Builder setTimeZoneBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        timeZone_ = value;
        onChanged();
        return this;
      }

      // optional fixed64 securityToken = 13;
      private long securityToken_ ;
      /**
       * <code>optional fixed64 securityToken = 13;</code>
       */
      public boolean hasSecurityToken() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional fixed64 securityToken = 13;</code>
       */
      public long getSecurityToken() {
        return securityToken_;
      }
      /**
       * <code>optional fixed64 securityToken = 13;</code>
       */
      public Builder setSecurityToken(long value) {
        bitField0_ |= 0x00001000;
        securityToken_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed64 securityToken = 13;</code>
       */
      public Builder clearSecurityToken() {
        bitField0_ = (bitField0_ & ~0x00001000);
        securityToken_ = 0L;
        onChanged();
        return this;
      }

      // optional int32 version = 14;
      private int version_ ;
      /**
       * <code>optional int32 version = 14;</code>
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <code>optional int32 version = 14;</code>
       */
      public int getVersion() {
        return version_;
      }
      /**
       * <code>optional int32 version = 14;</code>
       */
      public Builder setVersion(int value) {
        bitField0_ |= 0x00002000;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 version = 14;</code>
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00002000);
        version_ = 0;
        onChanged();
        return this;
      }

      // repeated string otaCert = 15;
      private com.google.protobuf.LazyStringList otaCert_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureOtaCertIsMutable() {
        if (!((bitField0_ & 0x00004000) == 0x00004000)) {
          otaCert_ = new com.google.protobuf.LazyStringArrayList(otaCert_);
          bitField0_ |= 0x00004000;
         }
      }
      /**
       * <code>repeated string otaCert = 15;</code>
       */
      public java.util.List<java.lang.String>
          getOtaCertList() {
        return java.util.Collections.unmodifiableList(otaCert_);
      }
      /**
       * <code>repeated string otaCert = 15;</code>
       */
      public int getOtaCertCount() {
        return otaCert_.size();
      }
      /**
       * <code>repeated string otaCert = 15;</code>
       */
      public java.lang.String getOtaCert(int index) {
        return otaCert_.get(index);
      }
      /**
       * <code>repeated string otaCert = 15;</code>
       */
      public com.google.protobuf.ByteString
          getOtaCertBytes(int index) {
        return otaCert_.getByteString(index);
      }
      /**
       * <code>repeated string otaCert = 15;</code>
       */
      public Builder setOtaCert(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOtaCertIsMutable();
        otaCert_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string otaCert = 15;</code>
       */
      public Builder addOtaCert(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOtaCertIsMutable();
        otaCert_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string otaCert = 15;</code>
       */
      public Builder addAllOtaCert(
          java.lang.Iterable<java.lang.String> values) {
        ensureOtaCertIsMutable();
        super.addAll(values, otaCert_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string otaCert = 15;</code>
       */
      public Builder clearOtaCert() {
        otaCert_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00004000);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string otaCert = 15;</code>
       */
      public Builder addOtaCertBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureOtaCertIsMutable();
        otaCert_.add(value);
        onChanged();
        return this;
      }

      // optional string serialNumber = 16;
      private java.lang.Object serialNumber_ = "";
      /**
       * <code>optional string serialNumber = 16;</code>
       */
      public boolean hasSerialNumber() {
        return ((bitField0_ & 0x00008000) == 0x00008000);
      }
      /**
       * <code>optional string serialNumber = 16;</code>
       */
      public java.lang.String getSerialNumber() {
        java.lang.Object ref = serialNumber_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          serialNumber_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string serialNumber = 16;</code>
       */
      public com.google.protobuf.ByteString
          getSerialNumberBytes() {
        java.lang.Object ref = serialNumber_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          serialNumber_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string serialNumber = 16;</code>
       */
      public Builder setSerialNumber(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00008000;
        serialNumber_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string serialNumber = 16;</code>
       */
      public Builder clearSerialNumber() {
        bitField0_ = (bitField0_ & ~0x00008000);
        serialNumber_ = getDefaultInstance().getSerialNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional string serialNumber = 16;</code>
       */
      public Builder setSerialNumberBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00008000;
        serialNumber_ = value;
        onChanged();
        return this;
      }

      // optional string esn = 17;
      private java.lang.Object esn_ = "";
      /**
       * <code>optional string esn = 17;</code>
       */
      public boolean hasEsn() {
        return ((bitField0_ & 0x00010000) == 0x00010000);
      }
      /**
       * <code>optional string esn = 17;</code>
       */
      public java.lang.String getEsn() {
        java.lang.Object ref = esn_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          esn_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string esn = 17;</code>
       */
      public com.google.protobuf.ByteString
          getEsnBytes() {
        java.lang.Object ref = esn_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          esn_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string esn = 17;</code>
       */
      public Builder setEsn(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00010000;
        esn_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string esn = 17;</code>
       */
      public Builder clearEsn() {
        bitField0_ = (bitField0_ & ~0x00010000);
        esn_ = getDefaultInstance().getEsn();
        onChanged();
        return this;
      }
      /**
       * <code>optional string esn = 17;</code>
       */
      public Builder setEsnBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00010000;
        esn_ = value;
        onChanged();
        return this;
      }

      // optional .DeviceConfigurationProto deviceConfiguration = 18;
      private com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto deviceConfiguration_ = com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto, com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProtoOrBuilder> deviceConfigurationBuilder_;
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
       */
      public boolean hasDeviceConfiguration() {
        return ((bitField0_ & 0x00020000) == 0x00020000);
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto getDeviceConfiguration() {
        if (deviceConfigurationBuilder_ == null) {
          return deviceConfiguration_;
        } else {
          return deviceConfigurationBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
       */
      public Builder setDeviceConfiguration(com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto value) {
        if (deviceConfigurationBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          deviceConfiguration_ = value;
          onChanged();
        } else {
          deviceConfigurationBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00020000;
        return this;
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
       */
      public Builder setDeviceConfiguration(
          com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.Builder builderForValue) {
        if (deviceConfigurationBuilder_ == null) {
          deviceConfiguration_ = builderForValue.build();
          onChanged();
        } else {
          deviceConfigurationBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00020000;
        return this;
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
       */
      public Builder mergeDeviceConfiguration(com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto value) {
        if (deviceConfigurationBuilder_ == null) {
          if (((bitField0_ & 0x00020000) == 0x00020000) &&
              deviceConfiguration_ != com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.getDefaultInstance()) {
            deviceConfiguration_ =
              com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.newBuilder(deviceConfiguration_).mergeFrom(value).buildPartial();
          } else {
            deviceConfiguration_ = value;
          }
          onChanged();
        } else {
          deviceConfigurationBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00020000;
        return this;
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
       */
      public Builder clearDeviceConfiguration() {
        if (deviceConfigurationBuilder_ == null) {
          deviceConfiguration_ = com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.getDefaultInstance();
          onChanged();
        } else {
          deviceConfigurationBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00020000);
        return this;
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.Builder getDeviceConfigurationBuilder() {
        bitField0_ |= 0x00020000;
        onChanged();
        return getDeviceConfigurationFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProtoOrBuilder getDeviceConfigurationOrBuilder() {
        if (deviceConfigurationBuilder_ != null) {
          return deviceConfigurationBuilder_.getMessageOrBuilder();
        } else {
          return deviceConfiguration_;
        }
      }
      /**
       * <code>optional .DeviceConfigurationProto deviceConfiguration = 18;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto, com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProtoOrBuilder> 
          getDeviceConfigurationFieldBuilder() {
        if (deviceConfigurationBuilder_ == null) {
          deviceConfigurationBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto, com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.DeviceConfigurationProtoOrBuilder>(
                  deviceConfiguration_,
                  getParentForChildren(),
                  isClean());
          deviceConfiguration_ = null;
        }
        return deviceConfigurationBuilder_;
      }

      // repeated string macAddrType = 19;
      private com.google.protobuf.LazyStringList macAddrType_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureMacAddrTypeIsMutable() {
        if (!((bitField0_ & 0x00040000) == 0x00040000)) {
          macAddrType_ = new com.google.protobuf.LazyStringArrayList(macAddrType_);
          bitField0_ |= 0x00040000;
         }
      }
      /**
       * <code>repeated string macAddrType = 19;</code>
       */
      public java.util.List<java.lang.String>
          getMacAddrTypeList() {
        return java.util.Collections.unmodifiableList(macAddrType_);
      }
      /**
       * <code>repeated string macAddrType = 19;</code>
       */
      public int getMacAddrTypeCount() {
        return macAddrType_.size();
      }
      /**
       * <code>repeated string macAddrType = 19;</code>
       */
      public java.lang.String getMacAddrType(int index) {
        return macAddrType_.get(index);
      }
      /**
       * <code>repeated string macAddrType = 19;</code>
       */
      public com.google.protobuf.ByteString
          getMacAddrTypeBytes(int index) {
        return macAddrType_.getByteString(index);
      }
      /**
       * <code>repeated string macAddrType = 19;</code>
       */
      public Builder setMacAddrType(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMacAddrTypeIsMutable();
        macAddrType_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string macAddrType = 19;</code>
       */
      public Builder addMacAddrType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMacAddrTypeIsMutable();
        macAddrType_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string macAddrType = 19;</code>
       */
      public Builder addAllMacAddrType(
          java.lang.Iterable<java.lang.String> values) {
        ensureMacAddrTypeIsMutable();
        super.addAll(values, macAddrType_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string macAddrType = 19;</code>
       */
      public Builder clearMacAddrType() {
        macAddrType_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00040000);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string macAddrType = 19;</code>
       */
      public Builder addMacAddrTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureMacAddrTypeIsMutable();
        macAddrType_.add(value);
        onChanged();
        return this;
      }

      // optional int32 fragment = 20;
      private int fragment_ ;
      /**
       * <code>optional int32 fragment = 20;</code>
       */
      public boolean hasFragment() {
        return ((bitField0_ & 0x00080000) == 0x00080000);
      }
      /**
       * <code>optional int32 fragment = 20;</code>
       */
      public int getFragment() {
        return fragment_;
      }
      /**
       * <code>optional int32 fragment = 20;</code>
       */
      public Builder setFragment(int value) {
        bitField0_ |= 0x00080000;
        fragment_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 fragment = 20;</code>
       */
      public Builder clearFragment() {
        bitField0_ = (bitField0_ & ~0x00080000);
        fragment_ = 0;
        onChanged();
        return this;
      }

      // optional string userName = 21;
      private java.lang.Object userName_ = "";
      /**
       * <code>optional string userName = 21;</code>
       */
      public boolean hasUserName() {
        return ((bitField0_ & 0x00100000) == 0x00100000);
      }
      /**
       * <code>optional string userName = 21;</code>
       */
      public java.lang.String getUserName() {
        java.lang.Object ref = userName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          userName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string userName = 21;</code>
       */
      public com.google.protobuf.ByteString
          getUserNameBytes() {
        java.lang.Object ref = userName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          userName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string userName = 21;</code>
       */
      public Builder setUserName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00100000;
        userName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string userName = 21;</code>
       */
      public Builder clearUserName() {
        bitField0_ = (bitField0_ & ~0x00100000);
        userName_ = getDefaultInstance().getUserName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string userName = 21;</code>
       */
      public Builder setUserNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00100000;
        userName_ = value;
        onChanged();
        return this;
      }

      // optional int32 userSerialNumber = 22;
      private int userSerialNumber_ ;
      /**
       * <code>optional int32 userSerialNumber = 22;</code>
       */
      public boolean hasUserSerialNumber() {
        return ((bitField0_ & 0x00200000) == 0x00200000);
      }
      /**
       * <code>optional int32 userSerialNumber = 22;</code>
       */
      public int getUserSerialNumber() {
        return userSerialNumber_;
      }
      /**
       * <code>optional int32 userSerialNumber = 22;</code>
       */
      public Builder setUserSerialNumber(int value) {
        bitField0_ |= 0x00200000;
        userSerialNumber_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 userSerialNumber = 22;</code>
       */
      public Builder clearUserSerialNumber() {
        bitField0_ = (bitField0_ & ~0x00200000);
        userSerialNumber_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:AndroidCheckinRequest)
    }

    static {
      defaultInstance = new AndroidCheckinRequest(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:AndroidCheckinRequest)
  }

  public interface AndroidCheckinResponseOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bool statsOk = 1;
    /**
     * <code>optional bool statsOk = 1;</code>
     */
    boolean hasStatsOk();
    /**
     * <code>optional bool statsOk = 1;</code>
     */
    boolean getStatsOk();

    // repeated .AndroidIntentProto intent = 2;
    /**
     * <code>repeated .AndroidIntentProto intent = 2;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto> 
        getIntentList();
    /**
     * <code>repeated .AndroidIntentProto intent = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto getIntent(int index);
    /**
     * <code>repeated .AndroidIntentProto intent = 2;</code>
     */
    int getIntentCount();
    /**
     * <code>repeated .AndroidIntentProto intent = 2;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProtoOrBuilder> 
        getIntentOrBuilderList();
    /**
     * <code>repeated .AndroidIntentProto intent = 2;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProtoOrBuilder getIntentOrBuilder(
        int index);

    // optional int64 timeMsec = 3;
    /**
     * <code>optional int64 timeMsec = 3;</code>
     */
    boolean hasTimeMsec();
    /**
     * <code>optional int64 timeMsec = 3;</code>
     */
    long getTimeMsec();

    // optional string digest = 4;
    /**
     * <code>optional string digest = 4;</code>
     */
    boolean hasDigest();
    /**
     * <code>optional string digest = 4;</code>
     */
    java.lang.String getDigest();
    /**
     * <code>optional string digest = 4;</code>
     */
    com.google.protobuf.ByteString
        getDigestBytes();

    // repeated .GservicesSetting setting = 5;
    /**
     * <code>repeated .GservicesSetting setting = 5;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting> 
        getSettingList();
    /**
     * <code>repeated .GservicesSetting setting = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting getSetting(int index);
    /**
     * <code>repeated .GservicesSetting setting = 5;</code>
     */
    int getSettingCount();
    /**
     * <code>repeated .GservicesSetting setting = 5;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.GservicesSettingOrBuilder> 
        getSettingOrBuilderList();
    /**
     * <code>repeated .GservicesSetting setting = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.GservicesSettingOrBuilder getSettingOrBuilder(
        int index);

    // optional bool marketOk = 6;
    /**
     * <code>optional bool marketOk = 6;</code>
     */
    boolean hasMarketOk();
    /**
     * <code>optional bool marketOk = 6;</code>
     */
    boolean getMarketOk();

    // optional fixed64 androidId = 7;
    /**
     * <code>optional fixed64 androidId = 7;</code>
     */
    boolean hasAndroidId();
    /**
     * <code>optional fixed64 androidId = 7;</code>
     */
    long getAndroidId();

    // optional fixed64 securityToken = 8;
    /**
     * <code>optional fixed64 securityToken = 8;</code>
     */
    boolean hasSecurityToken();
    /**
     * <code>optional fixed64 securityToken = 8;</code>
     */
    long getSecurityToken();

    // optional bool settingsDiff = 9;
    /**
     * <code>optional bool settingsDiff = 9;</code>
     */
    boolean hasSettingsDiff();
    /**
     * <code>optional bool settingsDiff = 9;</code>
     */
    boolean getSettingsDiff();

    // repeated string deleteSetting = 10;
    /**
     * <code>repeated string deleteSetting = 10;</code>
     */
    java.util.List<java.lang.String>
    getDeleteSettingList();
    /**
     * <code>repeated string deleteSetting = 10;</code>
     */
    int getDeleteSettingCount();
    /**
     * <code>repeated string deleteSetting = 10;</code>
     */
    java.lang.String getDeleteSetting(int index);
    /**
     * <code>repeated string deleteSetting = 10;</code>
     */
    com.google.protobuf.ByteString
        getDeleteSettingBytes(int index);
  }
  /**
   * Protobuf type {@code AndroidCheckinResponse}
   */
  public static final class AndroidCheckinResponse extends
      com.google.protobuf.GeneratedMessage
      implements AndroidCheckinResponseOrBuilder {
    // Use AndroidCheckinResponse.newBuilder() to construct.
    private AndroidCheckinResponse(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AndroidCheckinResponse(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AndroidCheckinResponse defaultInstance;
    public static AndroidCheckinResponse getDefaultInstance() {
      return defaultInstance;
    }

    public AndroidCheckinResponse getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AndroidCheckinResponse(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              statsOk_ = input.readBool();
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                intent_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto>();
                mutable_bitField0_ |= 0x00000002;
              }
              intent_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.PARSER, extensionRegistry));
              break;
            }
            case 24: {
              bitField0_ |= 0x00000002;
              timeMsec_ = input.readInt64();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000004;
              digest_ = input.readBytes();
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                setting_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting>();
                mutable_bitField0_ |= 0x00000010;
              }
              setting_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.PARSER, extensionRegistry));
              break;
            }
            case 48: {
              bitField0_ |= 0x00000008;
              marketOk_ = input.readBool();
              break;
            }
            case 57: {
              bitField0_ |= 0x00000010;
              androidId_ = input.readFixed64();
              break;
            }
            case 65: {
              bitField0_ |= 0x00000020;
              securityToken_ = input.readFixed64();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000040;
              settingsDiff_ = input.readBool();
              break;
            }
            case 82: {
              if (!((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
                deleteSetting_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000200;
              }
              deleteSetting_.add(input.readBytes());
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          intent_ = java.util.Collections.unmodifiableList(intent_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          setting_ = java.util.Collections.unmodifiableList(setting_);
        }
        if (((mutable_bitField0_ & 0x00000200) == 0x00000200)) {
          deleteSetting_ = new com.google.protobuf.UnmodifiableLazyStringList(deleteSetting_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinResponse_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.Builder.class);
    }

    public static com.google.protobuf.Parser<AndroidCheckinResponse> PARSER =
        new com.google.protobuf.AbstractParser<AndroidCheckinResponse>() {
      public AndroidCheckinResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AndroidCheckinResponse(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AndroidCheckinResponse> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bool statsOk = 1;
    public static final int STATSOK_FIELD_NUMBER = 1;
    private boolean statsOk_;
    /**
     * <code>optional bool statsOk = 1;</code>
     */
    public boolean hasStatsOk() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bool statsOk = 1;</code>
     */
    public boolean getStatsOk() {
      return statsOk_;
    }

    // repeated .AndroidIntentProto intent = 2;
    public static final int INTENT_FIELD_NUMBER = 2;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto> intent_;
    /**
     * <code>repeated .AndroidIntentProto intent = 2;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto> getIntentList() {
      return intent_;
    }
    /**
     * <code>repeated .AndroidIntentProto intent = 2;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProtoOrBuilder> 
        getIntentOrBuilderList() {
      return intent_;
    }
    /**
     * <code>repeated .AndroidIntentProto intent = 2;</code>
     */
    public int getIntentCount() {
      return intent_.size();
    }
    /**
     * <code>repeated .AndroidIntentProto intent = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto getIntent(int index) {
      return intent_.get(index);
    }
    /**
     * <code>repeated .AndroidIntentProto intent = 2;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProtoOrBuilder getIntentOrBuilder(
        int index) {
      return intent_.get(index);
    }

    // optional int64 timeMsec = 3;
    public static final int TIMEMSEC_FIELD_NUMBER = 3;
    private long timeMsec_;
    /**
     * <code>optional int64 timeMsec = 3;</code>
     */
    public boolean hasTimeMsec() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 timeMsec = 3;</code>
     */
    public long getTimeMsec() {
      return timeMsec_;
    }

    // optional string digest = 4;
    public static final int DIGEST_FIELD_NUMBER = 4;
    private java.lang.Object digest_;
    /**
     * <code>optional string digest = 4;</code>
     */
    public boolean hasDigest() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string digest = 4;</code>
     */
    public java.lang.String getDigest() {
      java.lang.Object ref = digest_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          digest_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string digest = 4;</code>
     */
    public com.google.protobuf.ByteString
        getDigestBytes() {
      java.lang.Object ref = digest_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        digest_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated .GservicesSetting setting = 5;
    public static final int SETTING_FIELD_NUMBER = 5;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting> setting_;
    /**
     * <code>repeated .GservicesSetting setting = 5;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting> getSettingList() {
      return setting_;
    }
    /**
     * <code>repeated .GservicesSetting setting = 5;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.GservicesSettingOrBuilder> 
        getSettingOrBuilderList() {
      return setting_;
    }
    /**
     * <code>repeated .GservicesSetting setting = 5;</code>
     */
    public int getSettingCount() {
      return setting_.size();
    }
    /**
     * <code>repeated .GservicesSetting setting = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting getSetting(int index) {
      return setting_.get(index);
    }
    /**
     * <code>repeated .GservicesSetting setting = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.GservicesSettingOrBuilder getSettingOrBuilder(
        int index) {
      return setting_.get(index);
    }

    // optional bool marketOk = 6;
    public static final int MARKETOK_FIELD_NUMBER = 6;
    private boolean marketOk_;
    /**
     * <code>optional bool marketOk = 6;</code>
     */
    public boolean hasMarketOk() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional bool marketOk = 6;</code>
     */
    public boolean getMarketOk() {
      return marketOk_;
    }

    // optional fixed64 androidId = 7;
    public static final int ANDROIDID_FIELD_NUMBER = 7;
    private long androidId_;
    /**
     * <code>optional fixed64 androidId = 7;</code>
     */
    public boolean hasAndroidId() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional fixed64 androidId = 7;</code>
     */
    public long getAndroidId() {
      return androidId_;
    }

    // optional fixed64 securityToken = 8;
    public static final int SECURITYTOKEN_FIELD_NUMBER = 8;
    private long securityToken_;
    /**
     * <code>optional fixed64 securityToken = 8;</code>
     */
    public boolean hasSecurityToken() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional fixed64 securityToken = 8;</code>
     */
    public long getSecurityToken() {
      return securityToken_;
    }

    // optional bool settingsDiff = 9;
    public static final int SETTINGSDIFF_FIELD_NUMBER = 9;
    private boolean settingsDiff_;
    /**
     * <code>optional bool settingsDiff = 9;</code>
     */
    public boolean hasSettingsDiff() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional bool settingsDiff = 9;</code>
     */
    public boolean getSettingsDiff() {
      return settingsDiff_;
    }

    // repeated string deleteSetting = 10;
    public static final int DELETESETTING_FIELD_NUMBER = 10;
    private com.google.protobuf.LazyStringList deleteSetting_;
    /**
     * <code>repeated string deleteSetting = 10;</code>
     */
    public java.util.List<java.lang.String>
        getDeleteSettingList() {
      return deleteSetting_;
    }
    /**
     * <code>repeated string deleteSetting = 10;</code>
     */
    public int getDeleteSettingCount() {
      return deleteSetting_.size();
    }
    /**
     * <code>repeated string deleteSetting = 10;</code>
     */
    public java.lang.String getDeleteSetting(int index) {
      return deleteSetting_.get(index);
    }
    /**
     * <code>repeated string deleteSetting = 10;</code>
     */
    public com.google.protobuf.ByteString
        getDeleteSettingBytes(int index) {
      return deleteSetting_.getByteString(index);
    }

    private void initFields() {
      statsOk_ = false;
      intent_ = java.util.Collections.emptyList();
      timeMsec_ = 0L;
      digest_ = "";
      setting_ = java.util.Collections.emptyList();
      marketOk_ = false;
      androidId_ = 0L;
      securityToken_ = 0L;
      settingsDiff_ = false;
      deleteSetting_ = com.google.protobuf.LazyStringArrayList.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBool(1, statsOk_);
      }
      for (int i = 0; i < intent_.size(); i++) {
        output.writeMessage(2, intent_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(3, timeMsec_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(4, getDigestBytes());
      }
      for (int i = 0; i < setting_.size(); i++) {
        output.writeMessage(5, setting_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBool(6, marketOk_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeFixed64(7, androidId_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeFixed64(8, securityToken_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeBool(9, settingsDiff_);
      }
      for (int i = 0; i < deleteSetting_.size(); i++) {
        output.writeBytes(10, deleteSetting_.getByteString(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(1, statsOk_);
      }
      for (int i = 0; i < intent_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, intent_.get(i));
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, timeMsec_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getDigestBytes());
      }
      for (int i = 0; i < setting_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, setting_.get(i));
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(6, marketOk_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed64Size(7, androidId_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed64Size(8, securityToken_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(9, settingsDiff_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < deleteSetting_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(deleteSetting_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getDeleteSettingList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AndroidCheckinResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinResponse_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getIntentFieldBuilder();
          getSettingFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        statsOk_ = false;
        bitField0_ = (bitField0_ & ~0x00000001);
        if (intentBuilder_ == null) {
          intent_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          intentBuilder_.clear();
        }
        timeMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        digest_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        if (settingBuilder_ == null) {
          setting_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          settingBuilder_.clear();
        }
        marketOk_ = false;
        bitField0_ = (bitField0_ & ~0x00000020);
        androidId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        securityToken_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000080);
        settingsDiff_ = false;
        bitField0_ = (bitField0_ & ~0x00000100);
        deleteSetting_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinResponse_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse result = new com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.statsOk_ = statsOk_;
        if (intentBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            intent_ = java.util.Collections.unmodifiableList(intent_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.intent_ = intent_;
        } else {
          result.intent_ = intentBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000002;
        }
        result.timeMsec_ = timeMsec_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.digest_ = digest_;
        if (settingBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            setting_ = java.util.Collections.unmodifiableList(setting_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.setting_ = setting_;
        } else {
          result.setting_ = settingBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000008;
        }
        result.marketOk_ = marketOk_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000010;
        }
        result.androidId_ = androidId_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000020;
        }
        result.securityToken_ = securityToken_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000040;
        }
        result.settingsDiff_ = settingsDiff_;
        if (((bitField0_ & 0x00000200) == 0x00000200)) {
          deleteSetting_ = new com.google.protobuf.UnmodifiableLazyStringList(
              deleteSetting_);
          bitField0_ = (bitField0_ & ~0x00000200);
        }
        result.deleteSetting_ = deleteSetting_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse.getDefaultInstance()) return this;
        if (other.hasStatsOk()) {
          setStatsOk(other.getStatsOk());
        }
        if (intentBuilder_ == null) {
          if (!other.intent_.isEmpty()) {
            if (intent_.isEmpty()) {
              intent_ = other.intent_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureIntentIsMutable();
              intent_.addAll(other.intent_);
            }
            onChanged();
          }
        } else {
          if (!other.intent_.isEmpty()) {
            if (intentBuilder_.isEmpty()) {
              intentBuilder_.dispose();
              intentBuilder_ = null;
              intent_ = other.intent_;
              bitField0_ = (bitField0_ & ~0x00000002);
              intentBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getIntentFieldBuilder() : null;
            } else {
              intentBuilder_.addAllMessages(other.intent_);
            }
          }
        }
        if (other.hasTimeMsec()) {
          setTimeMsec(other.getTimeMsec());
        }
        if (other.hasDigest()) {
          bitField0_ |= 0x00000008;
          digest_ = other.digest_;
          onChanged();
        }
        if (settingBuilder_ == null) {
          if (!other.setting_.isEmpty()) {
            if (setting_.isEmpty()) {
              setting_ = other.setting_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureSettingIsMutable();
              setting_.addAll(other.setting_);
            }
            onChanged();
          }
        } else {
          if (!other.setting_.isEmpty()) {
            if (settingBuilder_.isEmpty()) {
              settingBuilder_.dispose();
              settingBuilder_ = null;
              setting_ = other.setting_;
              bitField0_ = (bitField0_ & ~0x00000010);
              settingBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getSettingFieldBuilder() : null;
            } else {
              settingBuilder_.addAllMessages(other.setting_);
            }
          }
        }
        if (other.hasMarketOk()) {
          setMarketOk(other.getMarketOk());
        }
        if (other.hasAndroidId()) {
          setAndroidId(other.getAndroidId());
        }
        if (other.hasSecurityToken()) {
          setSecurityToken(other.getSecurityToken());
        }
        if (other.hasSettingsDiff()) {
          setSettingsDiff(other.getSettingsDiff());
        }
        if (!other.deleteSetting_.isEmpty()) {
          if (deleteSetting_.isEmpty()) {
            deleteSetting_ = other.deleteSetting_;
            bitField0_ = (bitField0_ & ~0x00000200);
          } else {
            ensureDeleteSettingIsMutable();
            deleteSetting_.addAll(other.deleteSetting_);
          }
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinResponse) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bool statsOk = 1;
      private boolean statsOk_ ;
      /**
       * <code>optional bool statsOk = 1;</code>
       */
      public boolean hasStatsOk() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bool statsOk = 1;</code>
       */
      public boolean getStatsOk() {
        return statsOk_;
      }
      /**
       * <code>optional bool statsOk = 1;</code>
       */
      public Builder setStatsOk(boolean value) {
        bitField0_ |= 0x00000001;
        statsOk_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool statsOk = 1;</code>
       */
      public Builder clearStatsOk() {
        bitField0_ = (bitField0_ & ~0x00000001);
        statsOk_ = false;
        onChanged();
        return this;
      }

      // repeated .AndroidIntentProto intent = 2;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto> intent_ =
        java.util.Collections.emptyList();
      private void ensureIntentIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          intent_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto>(intent_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProtoOrBuilder> intentBuilder_;

      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto> getIntentList() {
        if (intentBuilder_ == null) {
          return java.util.Collections.unmodifiableList(intent_);
        } else {
          return intentBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public int getIntentCount() {
        if (intentBuilder_ == null) {
          return intent_.size();
        } else {
          return intentBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto getIntent(int index) {
        if (intentBuilder_ == null) {
          return intent_.get(index);
        } else {
          return intentBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public Builder setIntent(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto value) {
        if (intentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIntentIsMutable();
          intent_.set(index, value);
          onChanged();
        } else {
          intentBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public Builder setIntent(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Builder builderForValue) {
        if (intentBuilder_ == null) {
          ensureIntentIsMutable();
          intent_.set(index, builderForValue.build());
          onChanged();
        } else {
          intentBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public Builder addIntent(com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto value) {
        if (intentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIntentIsMutable();
          intent_.add(value);
          onChanged();
        } else {
          intentBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public Builder addIntent(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto value) {
        if (intentBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIntentIsMutable();
          intent_.add(index, value);
          onChanged();
        } else {
          intentBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public Builder addIntent(
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Builder builderForValue) {
        if (intentBuilder_ == null) {
          ensureIntentIsMutable();
          intent_.add(builderForValue.build());
          onChanged();
        } else {
          intentBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public Builder addIntent(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Builder builderForValue) {
        if (intentBuilder_ == null) {
          ensureIntentIsMutable();
          intent_.add(index, builderForValue.build());
          onChanged();
        } else {
          intentBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public Builder addAllIntent(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto> values) {
        if (intentBuilder_ == null) {
          ensureIntentIsMutable();
          super.addAll(values, intent_);
          onChanged();
        } else {
          intentBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public Builder clearIntent() {
        if (intentBuilder_ == null) {
          intent_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          intentBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public Builder removeIntent(int index) {
        if (intentBuilder_ == null) {
          ensureIntentIsMutable();
          intent_.remove(index);
          onChanged();
        } else {
          intentBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Builder getIntentBuilder(
          int index) {
        return getIntentFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProtoOrBuilder getIntentOrBuilder(
          int index) {
        if (intentBuilder_ == null) {
          return intent_.get(index);  } else {
          return intentBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProtoOrBuilder> 
           getIntentOrBuilderList() {
        if (intentBuilder_ != null) {
          return intentBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(intent_);
        }
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Builder addIntentBuilder() {
        return getIntentFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.getDefaultInstance());
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Builder addIntentBuilder(
          int index) {
        return getIntentFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.getDefaultInstance());
      }
      /**
       * <code>repeated .AndroidIntentProto intent = 2;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Builder> 
           getIntentBuilderList() {
        return getIntentFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProtoOrBuilder> 
          getIntentFieldBuilder() {
        if (intentBuilder_ == null) {
          intentBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProtoOrBuilder>(
                  intent_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          intent_ = null;
        }
        return intentBuilder_;
      }

      // optional int64 timeMsec = 3;
      private long timeMsec_ ;
      /**
       * <code>optional int64 timeMsec = 3;</code>
       */
      public boolean hasTimeMsec() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 timeMsec = 3;</code>
       */
      public long getTimeMsec() {
        return timeMsec_;
      }
      /**
       * <code>optional int64 timeMsec = 3;</code>
       */
      public Builder setTimeMsec(long value) {
        bitField0_ |= 0x00000004;
        timeMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 timeMsec = 3;</code>
       */
      public Builder clearTimeMsec() {
        bitField0_ = (bitField0_ & ~0x00000004);
        timeMsec_ = 0L;
        onChanged();
        return this;
      }

      // optional string digest = 4;
      private java.lang.Object digest_ = "";
      /**
       * <code>optional string digest = 4;</code>
       */
      public boolean hasDigest() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string digest = 4;</code>
       */
      public java.lang.String getDigest() {
        java.lang.Object ref = digest_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          digest_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string digest = 4;</code>
       */
      public com.google.protobuf.ByteString
          getDigestBytes() {
        java.lang.Object ref = digest_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          digest_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string digest = 4;</code>
       */
      public Builder setDigest(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        digest_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string digest = 4;</code>
       */
      public Builder clearDigest() {
        bitField0_ = (bitField0_ & ~0x00000008);
        digest_ = getDefaultInstance().getDigest();
        onChanged();
        return this;
      }
      /**
       * <code>optional string digest = 4;</code>
       */
      public Builder setDigestBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        digest_ = value;
        onChanged();
        return this;
      }

      // repeated .GservicesSetting setting = 5;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting> setting_ =
        java.util.Collections.emptyList();
      private void ensureSettingIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          setting_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting>(setting_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting, com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.Builder, com.akdeniz.googleplaycrawler.GooglePlay.GservicesSettingOrBuilder> settingBuilder_;

      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting> getSettingList() {
        if (settingBuilder_ == null) {
          return java.util.Collections.unmodifiableList(setting_);
        } else {
          return settingBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public int getSettingCount() {
        if (settingBuilder_ == null) {
          return setting_.size();
        } else {
          return settingBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting getSetting(int index) {
        if (settingBuilder_ == null) {
          return setting_.get(index);
        } else {
          return settingBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public Builder setSetting(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting value) {
        if (settingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSettingIsMutable();
          setting_.set(index, value);
          onChanged();
        } else {
          settingBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public Builder setSetting(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.Builder builderForValue) {
        if (settingBuilder_ == null) {
          ensureSettingIsMutable();
          setting_.set(index, builderForValue.build());
          onChanged();
        } else {
          settingBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public Builder addSetting(com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting value) {
        if (settingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSettingIsMutable();
          setting_.add(value);
          onChanged();
        } else {
          settingBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public Builder addSetting(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting value) {
        if (settingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSettingIsMutable();
          setting_.add(index, value);
          onChanged();
        } else {
          settingBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public Builder addSetting(
          com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.Builder builderForValue) {
        if (settingBuilder_ == null) {
          ensureSettingIsMutable();
          setting_.add(builderForValue.build());
          onChanged();
        } else {
          settingBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public Builder addSetting(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.Builder builderForValue) {
        if (settingBuilder_ == null) {
          ensureSettingIsMutable();
          setting_.add(index, builderForValue.build());
          onChanged();
        } else {
          settingBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public Builder addAllSetting(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting> values) {
        if (settingBuilder_ == null) {
          ensureSettingIsMutable();
          super.addAll(values, setting_);
          onChanged();
        } else {
          settingBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public Builder clearSetting() {
        if (settingBuilder_ == null) {
          setting_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          settingBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public Builder removeSetting(int index) {
        if (settingBuilder_ == null) {
          ensureSettingIsMutable();
          setting_.remove(index);
          onChanged();
        } else {
          settingBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.Builder getSettingBuilder(
          int index) {
        return getSettingFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.GservicesSettingOrBuilder getSettingOrBuilder(
          int index) {
        if (settingBuilder_ == null) {
          return setting_.get(index);  } else {
          return settingBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.GservicesSettingOrBuilder> 
           getSettingOrBuilderList() {
        if (settingBuilder_ != null) {
          return settingBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(setting_);
        }
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.Builder addSettingBuilder() {
        return getSettingFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.getDefaultInstance());
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.Builder addSettingBuilder(
          int index) {
        return getSettingFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.getDefaultInstance());
      }
      /**
       * <code>repeated .GservicesSetting setting = 5;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.Builder> 
           getSettingBuilderList() {
        return getSettingFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting, com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.Builder, com.akdeniz.googleplaycrawler.GooglePlay.GservicesSettingOrBuilder> 
          getSettingFieldBuilder() {
        if (settingBuilder_ == null) {
          settingBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting, com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.Builder, com.akdeniz.googleplaycrawler.GooglePlay.GservicesSettingOrBuilder>(
                  setting_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          setting_ = null;
        }
        return settingBuilder_;
      }

      // optional bool marketOk = 6;
      private boolean marketOk_ ;
      /**
       * <code>optional bool marketOk = 6;</code>
       */
      public boolean hasMarketOk() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional bool marketOk = 6;</code>
       */
      public boolean getMarketOk() {
        return marketOk_;
      }
      /**
       * <code>optional bool marketOk = 6;</code>
       */
      public Builder setMarketOk(boolean value) {
        bitField0_ |= 0x00000020;
        marketOk_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool marketOk = 6;</code>
       */
      public Builder clearMarketOk() {
        bitField0_ = (bitField0_ & ~0x00000020);
        marketOk_ = false;
        onChanged();
        return this;
      }

      // optional fixed64 androidId = 7;
      private long androidId_ ;
      /**
       * <code>optional fixed64 androidId = 7;</code>
       */
      public boolean hasAndroidId() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional fixed64 androidId = 7;</code>
       */
      public long getAndroidId() {
        return androidId_;
      }
      /**
       * <code>optional fixed64 androidId = 7;</code>
       */
      public Builder setAndroidId(long value) {
        bitField0_ |= 0x00000040;
        androidId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed64 androidId = 7;</code>
       */
      public Builder clearAndroidId() {
        bitField0_ = (bitField0_ & ~0x00000040);
        androidId_ = 0L;
        onChanged();
        return this;
      }

      // optional fixed64 securityToken = 8;
      private long securityToken_ ;
      /**
       * <code>optional fixed64 securityToken = 8;</code>
       */
      public boolean hasSecurityToken() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional fixed64 securityToken = 8;</code>
       */
      public long getSecurityToken() {
        return securityToken_;
      }
      /**
       * <code>optional fixed64 securityToken = 8;</code>
       */
      public Builder setSecurityToken(long value) {
        bitField0_ |= 0x00000080;
        securityToken_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional fixed64 securityToken = 8;</code>
       */
      public Builder clearSecurityToken() {
        bitField0_ = (bitField0_ & ~0x00000080);
        securityToken_ = 0L;
        onChanged();
        return this;
      }

      // optional bool settingsDiff = 9;
      private boolean settingsDiff_ ;
      /**
       * <code>optional bool settingsDiff = 9;</code>
       */
      public boolean hasSettingsDiff() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional bool settingsDiff = 9;</code>
       */
      public boolean getSettingsDiff() {
        return settingsDiff_;
      }
      /**
       * <code>optional bool settingsDiff = 9;</code>
       */
      public Builder setSettingsDiff(boolean value) {
        bitField0_ |= 0x00000100;
        settingsDiff_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool settingsDiff = 9;</code>
       */
      public Builder clearSettingsDiff() {
        bitField0_ = (bitField0_ & ~0x00000100);
        settingsDiff_ = false;
        onChanged();
        return this;
      }

      // repeated string deleteSetting = 10;
      private com.google.protobuf.LazyStringList deleteSetting_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureDeleteSettingIsMutable() {
        if (!((bitField0_ & 0x00000200) == 0x00000200)) {
          deleteSetting_ = new com.google.protobuf.LazyStringArrayList(deleteSetting_);
          bitField0_ |= 0x00000200;
         }
      }
      /**
       * <code>repeated string deleteSetting = 10;</code>
       */
      public java.util.List<java.lang.String>
          getDeleteSettingList() {
        return java.util.Collections.unmodifiableList(deleteSetting_);
      }
      /**
       * <code>repeated string deleteSetting = 10;</code>
       */
      public int getDeleteSettingCount() {
        return deleteSetting_.size();
      }
      /**
       * <code>repeated string deleteSetting = 10;</code>
       */
      public java.lang.String getDeleteSetting(int index) {
        return deleteSetting_.get(index);
      }
      /**
       * <code>repeated string deleteSetting = 10;</code>
       */
      public com.google.protobuf.ByteString
          getDeleteSettingBytes(int index) {
        return deleteSetting_.getByteString(index);
      }
      /**
       * <code>repeated string deleteSetting = 10;</code>
       */
      public Builder setDeleteSetting(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDeleteSettingIsMutable();
        deleteSetting_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string deleteSetting = 10;</code>
       */
      public Builder addDeleteSetting(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDeleteSettingIsMutable();
        deleteSetting_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string deleteSetting = 10;</code>
       */
      public Builder addAllDeleteSetting(
          java.lang.Iterable<java.lang.String> values) {
        ensureDeleteSettingIsMutable();
        super.addAll(values, deleteSetting_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string deleteSetting = 10;</code>
       */
      public Builder clearDeleteSetting() {
        deleteSetting_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000200);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string deleteSetting = 10;</code>
       */
      public Builder addDeleteSettingBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureDeleteSettingIsMutable();
        deleteSetting_.add(value);
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:AndroidCheckinResponse)
    }

    static {
      defaultInstance = new AndroidCheckinResponse(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:AndroidCheckinResponse)
  }

  public interface GservicesSettingOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional bytes name = 1;
    /**
     * <code>optional bytes name = 1;</code>
     */
    boolean hasName();
    /**
     * <code>optional bytes name = 1;</code>
     */
    com.google.protobuf.ByteString getName();

    // optional bytes value = 2;
    /**
     * <code>optional bytes value = 2;</code>
     */
    boolean hasValue();
    /**
     * <code>optional bytes value = 2;</code>
     */
    com.google.protobuf.ByteString getValue();
  }
  /**
   * Protobuf type {@code GservicesSetting}
   */
  public static final class GservicesSetting extends
      com.google.protobuf.GeneratedMessage
      implements GservicesSettingOrBuilder {
    // Use GservicesSetting.newBuilder() to construct.
    private GservicesSetting(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private GservicesSetting(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final GservicesSetting defaultInstance;
    public static GservicesSetting getDefaultInstance() {
      return defaultInstance;
    }

    public GservicesSetting getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private GservicesSetting(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              name_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              value_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_GservicesSetting_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_GservicesSetting_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.class, com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.Builder.class);
    }

    public static com.google.protobuf.Parser<GservicesSetting> PARSER =
        new com.google.protobuf.AbstractParser<GservicesSetting>() {
      public GservicesSetting parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GservicesSetting(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<GservicesSetting> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional bytes name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private com.google.protobuf.ByteString name_;
    /**
     * <code>optional bytes name = 1;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional bytes name = 1;</code>
     */
    public com.google.protobuf.ByteString getName() {
      return name_;
    }

    // optional bytes value = 2;
    public static final int VALUE_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString value_;
    /**
     * <code>optional bytes value = 2;</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bytes value = 2;</code>
     */
    public com.google.protobuf.ByteString getValue() {
      return value_;
    }

    private void initFields() {
      name_ = com.google.protobuf.ByteString.EMPTY;
      value_ = com.google.protobuf.ByteString.EMPTY;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, name_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, value_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, name_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, value_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code GservicesSetting}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.GservicesSettingOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_GservicesSetting_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_GservicesSetting_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.class, com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        name_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000001);
        value_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_GservicesSetting_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting build() {
        com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting result = new com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasValue()) {
          setValue(other.getValue());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.GservicesSetting) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional bytes name = 1;
      private com.google.protobuf.ByteString name_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes name = 1;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional bytes name = 1;</code>
       */
      public com.google.protobuf.ByteString getName() {
        return name_;
      }
      /**
       * <code>optional bytes name = 1;</code>
       */
      public Builder setName(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes name = 1;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }

      // optional bytes value = 2;
      private com.google.protobuf.ByteString value_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bytes value = 2;</code>
       */
      public com.google.protobuf.ByteString getValue() {
        return value_;
      }
      /**
       * <code>optional bytes value = 2;</code>
       */
      public Builder setValue(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes value = 2;</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:GservicesSetting)
    }

    static {
      defaultInstance = new GservicesSetting(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:GservicesSetting)
  }

  public interface AndroidBuildProtoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string id = 1;
    /**
     * <code>optional string id = 1;</code>
     */
    boolean hasId();
    /**
     * <code>optional string id = 1;</code>
     */
    java.lang.String getId();
    /**
     * <code>optional string id = 1;</code>
     */
    com.google.protobuf.ByteString
        getIdBytes();

    // optional string product = 2;
    /**
     * <code>optional string product = 2;</code>
     */
    boolean hasProduct();
    /**
     * <code>optional string product = 2;</code>
     */
    java.lang.String getProduct();
    /**
     * <code>optional string product = 2;</code>
     */
    com.google.protobuf.ByteString
        getProductBytes();

    // optional string carrier = 3;
    /**
     * <code>optional string carrier = 3;</code>
     */
    boolean hasCarrier();
    /**
     * <code>optional string carrier = 3;</code>
     */
    java.lang.String getCarrier();
    /**
     * <code>optional string carrier = 3;</code>
     */
    com.google.protobuf.ByteString
        getCarrierBytes();

    // optional string radio = 4;
    /**
     * <code>optional string radio = 4;</code>
     */
    boolean hasRadio();
    /**
     * <code>optional string radio = 4;</code>
     */
    java.lang.String getRadio();
    /**
     * <code>optional string radio = 4;</code>
     */
    com.google.protobuf.ByteString
        getRadioBytes();

    // optional string bootloader = 5;
    /**
     * <code>optional string bootloader = 5;</code>
     */
    boolean hasBootloader();
    /**
     * <code>optional string bootloader = 5;</code>
     */
    java.lang.String getBootloader();
    /**
     * <code>optional string bootloader = 5;</code>
     */
    com.google.protobuf.ByteString
        getBootloaderBytes();

    // optional string client = 6;
    /**
     * <code>optional string client = 6;</code>
     */
    boolean hasClient();
    /**
     * <code>optional string client = 6;</code>
     */
    java.lang.String getClient();
    /**
     * <code>optional string client = 6;</code>
     */
    com.google.protobuf.ByteString
        getClientBytes();

    // optional int64 timestamp = 7;
    /**
     * <code>optional int64 timestamp = 7;</code>
     */
    boolean hasTimestamp();
    /**
     * <code>optional int64 timestamp = 7;</code>
     */
    long getTimestamp();

    // optional int32 googleServices = 8;
    /**
     * <code>optional int32 googleServices = 8;</code>
     */
    boolean hasGoogleServices();
    /**
     * <code>optional int32 googleServices = 8;</code>
     */
    int getGoogleServices();

    // optional string device = 9;
    /**
     * <code>optional string device = 9;</code>
     */
    boolean hasDevice();
    /**
     * <code>optional string device = 9;</code>
     */
    java.lang.String getDevice();
    /**
     * <code>optional string device = 9;</code>
     */
    com.google.protobuf.ByteString
        getDeviceBytes();

    // optional int32 sdkVersion = 10;
    /**
     * <code>optional int32 sdkVersion = 10;</code>
     */
    boolean hasSdkVersion();
    /**
     * <code>optional int32 sdkVersion = 10;</code>
     */
    int getSdkVersion();

    // optional string model = 11;
    /**
     * <code>optional string model = 11;</code>
     */
    boolean hasModel();
    /**
     * <code>optional string model = 11;</code>
     */
    java.lang.String getModel();
    /**
     * <code>optional string model = 11;</code>
     */
    com.google.protobuf.ByteString
        getModelBytes();

    // optional string manufacturer = 12;
    /**
     * <code>optional string manufacturer = 12;</code>
     */
    boolean hasManufacturer();
    /**
     * <code>optional string manufacturer = 12;</code>
     */
    java.lang.String getManufacturer();
    /**
     * <code>optional string manufacturer = 12;</code>
     */
    com.google.protobuf.ByteString
        getManufacturerBytes();

    // optional string buildProduct = 13;
    /**
     * <code>optional string buildProduct = 13;</code>
     */
    boolean hasBuildProduct();
    /**
     * <code>optional string buildProduct = 13;</code>
     */
    java.lang.String getBuildProduct();
    /**
     * <code>optional string buildProduct = 13;</code>
     */
    com.google.protobuf.ByteString
        getBuildProductBytes();

    // optional bool otaInstalled = 14;
    /**
     * <code>optional bool otaInstalled = 14;</code>
     */
    boolean hasOtaInstalled();
    /**
     * <code>optional bool otaInstalled = 14;</code>
     */
    boolean getOtaInstalled();
  }
  /**
   * Protobuf type {@code AndroidBuildProto}
   */
  public static final class AndroidBuildProto extends
      com.google.protobuf.GeneratedMessage
      implements AndroidBuildProtoOrBuilder {
    // Use AndroidBuildProto.newBuilder() to construct.
    private AndroidBuildProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AndroidBuildProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AndroidBuildProto defaultInstance;
    public static AndroidBuildProto getDefaultInstance() {
      return defaultInstance;
    }

    public AndroidBuildProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AndroidBuildProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              id_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              product_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              carrier_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              radio_ = input.readBytes();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              bootloader_ = input.readBytes();
              break;
            }
            case 50: {
              bitField0_ |= 0x00000020;
              client_ = input.readBytes();
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              timestamp_ = input.readInt64();
              break;
            }
            case 64: {
              bitField0_ |= 0x00000080;
              googleServices_ = input.readInt32();
              break;
            }
            case 74: {
              bitField0_ |= 0x00000100;
              device_ = input.readBytes();
              break;
            }
            case 80: {
              bitField0_ |= 0x00000200;
              sdkVersion_ = input.readInt32();
              break;
            }
            case 90: {
              bitField0_ |= 0x00000400;
              model_ = input.readBytes();
              break;
            }
            case 98: {
              bitField0_ |= 0x00000800;
              manufacturer_ = input.readBytes();
              break;
            }
            case 106: {
              bitField0_ |= 0x00001000;
              buildProduct_ = input.readBytes();
              break;
            }
            case 112: {
              bitField0_ |= 0x00002000;
              otaInstalled_ = input.readBool();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidBuildProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidBuildProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.Builder.class);
    }

    public static com.google.protobuf.Parser<AndroidBuildProto> PARSER =
        new com.google.protobuf.AbstractParser<AndroidBuildProto>() {
      public AndroidBuildProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AndroidBuildProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AndroidBuildProto> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private java.lang.Object id_;
    /**
     * <code>optional string id = 1;</code>
     */
    public boolean hasId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string id = 1;</code>
     */
    public java.lang.String getId() {
      java.lang.Object ref = id_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          id_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string id = 1;</code>
     */
    public com.google.protobuf.ByteString
        getIdBytes() {
      java.lang.Object ref = id_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        id_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string product = 2;
    public static final int PRODUCT_FIELD_NUMBER = 2;
    private java.lang.Object product_;
    /**
     * <code>optional string product = 2;</code>
     */
    public boolean hasProduct() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string product = 2;</code>
     */
    public java.lang.String getProduct() {
      java.lang.Object ref = product_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          product_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string product = 2;</code>
     */
    public com.google.protobuf.ByteString
        getProductBytes() {
      java.lang.Object ref = product_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        product_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string carrier = 3;
    public static final int CARRIER_FIELD_NUMBER = 3;
    private java.lang.Object carrier_;
    /**
     * <code>optional string carrier = 3;</code>
     */
    public boolean hasCarrier() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string carrier = 3;</code>
     */
    public java.lang.String getCarrier() {
      java.lang.Object ref = carrier_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          carrier_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string carrier = 3;</code>
     */
    public com.google.protobuf.ByteString
        getCarrierBytes() {
      java.lang.Object ref = carrier_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        carrier_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string radio = 4;
    public static final int RADIO_FIELD_NUMBER = 4;
    private java.lang.Object radio_;
    /**
     * <code>optional string radio = 4;</code>
     */
    public boolean hasRadio() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string radio = 4;</code>
     */
    public java.lang.String getRadio() {
      java.lang.Object ref = radio_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          radio_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string radio = 4;</code>
     */
    public com.google.protobuf.ByteString
        getRadioBytes() {
      java.lang.Object ref = radio_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        radio_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string bootloader = 5;
    public static final int BOOTLOADER_FIELD_NUMBER = 5;
    private java.lang.Object bootloader_;
    /**
     * <code>optional string bootloader = 5;</code>
     */
    public boolean hasBootloader() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string bootloader = 5;</code>
     */
    public java.lang.String getBootloader() {
      java.lang.Object ref = bootloader_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          bootloader_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string bootloader = 5;</code>
     */
    public com.google.protobuf.ByteString
        getBootloaderBytes() {
      java.lang.Object ref = bootloader_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        bootloader_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string client = 6;
    public static final int CLIENT_FIELD_NUMBER = 6;
    private java.lang.Object client_;
    /**
     * <code>optional string client = 6;</code>
     */
    public boolean hasClient() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional string client = 6;</code>
     */
    public java.lang.String getClient() {
      java.lang.Object ref = client_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          client_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string client = 6;</code>
     */
    public com.google.protobuf.ByteString
        getClientBytes() {
      java.lang.Object ref = client_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        client_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 timestamp = 7;
    public static final int TIMESTAMP_FIELD_NUMBER = 7;
    private long timestamp_;
    /**
     * <code>optional int64 timestamp = 7;</code>
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <code>optional int64 timestamp = 7;</code>
     */
    public long getTimestamp() {
      return timestamp_;
    }

    // optional int32 googleServices = 8;
    public static final int GOOGLESERVICES_FIELD_NUMBER = 8;
    private int googleServices_;
    /**
     * <code>optional int32 googleServices = 8;</code>
     */
    public boolean hasGoogleServices() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <code>optional int32 googleServices = 8;</code>
     */
    public int getGoogleServices() {
      return googleServices_;
    }

    // optional string device = 9;
    public static final int DEVICE_FIELD_NUMBER = 9;
    private java.lang.Object device_;
    /**
     * <code>optional string device = 9;</code>
     */
    public boolean hasDevice() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <code>optional string device = 9;</code>
     */
    public java.lang.String getDevice() {
      java.lang.Object ref = device_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          device_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string device = 9;</code>
     */
    public com.google.protobuf.ByteString
        getDeviceBytes() {
      java.lang.Object ref = device_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        device_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 sdkVersion = 10;
    public static final int SDKVERSION_FIELD_NUMBER = 10;
    private int sdkVersion_;
    /**
     * <code>optional int32 sdkVersion = 10;</code>
     */
    public boolean hasSdkVersion() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <code>optional int32 sdkVersion = 10;</code>
     */
    public int getSdkVersion() {
      return sdkVersion_;
    }

    // optional string model = 11;
    public static final int MODEL_FIELD_NUMBER = 11;
    private java.lang.Object model_;
    /**
     * <code>optional string model = 11;</code>
     */
    public boolean hasModel() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <code>optional string model = 11;</code>
     */
    public java.lang.String getModel() {
      java.lang.Object ref = model_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          model_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string model = 11;</code>
     */
    public com.google.protobuf.ByteString
        getModelBytes() {
      java.lang.Object ref = model_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        model_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string manufacturer = 12;
    public static final int MANUFACTURER_FIELD_NUMBER = 12;
    private java.lang.Object manufacturer_;
    /**
     * <code>optional string manufacturer = 12;</code>
     */
    public boolean hasManufacturer() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <code>optional string manufacturer = 12;</code>
     */
    public java.lang.String getManufacturer() {
      java.lang.Object ref = manufacturer_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          manufacturer_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string manufacturer = 12;</code>
     */
    public com.google.protobuf.ByteString
        getManufacturerBytes() {
      java.lang.Object ref = manufacturer_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        manufacturer_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string buildProduct = 13;
    public static final int BUILDPRODUCT_FIELD_NUMBER = 13;
    private java.lang.Object buildProduct_;
    /**
     * <code>optional string buildProduct = 13;</code>
     */
    public boolean hasBuildProduct() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <code>optional string buildProduct = 13;</code>
     */
    public java.lang.String getBuildProduct() {
      java.lang.Object ref = buildProduct_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          buildProduct_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string buildProduct = 13;</code>
     */
    public com.google.protobuf.ByteString
        getBuildProductBytes() {
      java.lang.Object ref = buildProduct_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        buildProduct_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional bool otaInstalled = 14;
    public static final int OTAINSTALLED_FIELD_NUMBER = 14;
    private boolean otaInstalled_;
    /**
     * <code>optional bool otaInstalled = 14;</code>
     */
    public boolean hasOtaInstalled() {
      return ((bitField0_ & 0x00002000) == 0x00002000);
    }
    /**
     * <code>optional bool otaInstalled = 14;</code>
     */
    public boolean getOtaInstalled() {
      return otaInstalled_;
    }

    private void initFields() {
      id_ = "";
      product_ = "";
      carrier_ = "";
      radio_ = "";
      bootloader_ = "";
      client_ = "";
      timestamp_ = 0L;
      googleServices_ = 0;
      device_ = "";
      sdkVersion_ = 0;
      model_ = "";
      manufacturer_ = "";
      buildProduct_ = "";
      otaInstalled_ = false;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getProductBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getCarrierBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getRadioBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getBootloaderBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeBytes(6, getClientBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt64(7, timestamp_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeInt32(8, googleServices_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeBytes(9, getDeviceBytes());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        output.writeInt32(10, sdkVersion_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        output.writeBytes(11, getModelBytes());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        output.writeBytes(12, getManufacturerBytes());
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        output.writeBytes(13, getBuildProductBytes());
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        output.writeBool(14, otaInstalled_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getIdBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getProductBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getCarrierBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getRadioBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getBootloaderBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getClientBytes());
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(7, timestamp_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(8, googleServices_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(9, getDeviceBytes());
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(10, sdkVersion_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(11, getModelBytes());
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(12, getManufacturerBytes());
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(13, getBuildProductBytes());
      }
      if (((bitField0_ & 0x00002000) == 0x00002000)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(14, otaInstalled_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AndroidBuildProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidBuildProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidBuildProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        id_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        product_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        carrier_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        radio_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        bootloader_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        client_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        googleServices_ = 0;
        bitField0_ = (bitField0_ & ~0x00000080);
        device_ = "";
        bitField0_ = (bitField0_ & ~0x00000100);
        sdkVersion_ = 0;
        bitField0_ = (bitField0_ & ~0x00000200);
        model_ = "";
        bitField0_ = (bitField0_ & ~0x00000400);
        manufacturer_ = "";
        bitField0_ = (bitField0_ & ~0x00000800);
        buildProduct_ = "";
        bitField0_ = (bitField0_ & ~0x00001000);
        otaInstalled_ = false;
        bitField0_ = (bitField0_ & ~0x00002000);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidBuildProto_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto result = new com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.product_ = product_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.carrier_ = carrier_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.radio_ = radio_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.bootloader_ = bootloader_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.client_ = client_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.timestamp_ = timestamp_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.googleServices_ = googleServices_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.device_ = device_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.sdkVersion_ = sdkVersion_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.model_ = model_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        result.manufacturer_ = manufacturer_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.buildProduct_ = buildProduct_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00002000;
        }
        result.otaInstalled_ = otaInstalled_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.getDefaultInstance()) return this;
        if (other.hasId()) {
          bitField0_ |= 0x00000001;
          id_ = other.id_;
          onChanged();
        }
        if (other.hasProduct()) {
          bitField0_ |= 0x00000002;
          product_ = other.product_;
          onChanged();
        }
        if (other.hasCarrier()) {
          bitField0_ |= 0x00000004;
          carrier_ = other.carrier_;
          onChanged();
        }
        if (other.hasRadio()) {
          bitField0_ |= 0x00000008;
          radio_ = other.radio_;
          onChanged();
        }
        if (other.hasBootloader()) {
          bitField0_ |= 0x00000010;
          bootloader_ = other.bootloader_;
          onChanged();
        }
        if (other.hasClient()) {
          bitField0_ |= 0x00000020;
          client_ = other.client_;
          onChanged();
        }
        if (other.hasTimestamp()) {
          setTimestamp(other.getTimestamp());
        }
        if (other.hasGoogleServices()) {
          setGoogleServices(other.getGoogleServices());
        }
        if (other.hasDevice()) {
          bitField0_ |= 0x00000100;
          device_ = other.device_;
          onChanged();
        }
        if (other.hasSdkVersion()) {
          setSdkVersion(other.getSdkVersion());
        }
        if (other.hasModel()) {
          bitField0_ |= 0x00000400;
          model_ = other.model_;
          onChanged();
        }
        if (other.hasManufacturer()) {
          bitField0_ |= 0x00000800;
          manufacturer_ = other.manufacturer_;
          onChanged();
        }
        if (other.hasBuildProduct()) {
          bitField0_ |= 0x00001000;
          buildProduct_ = other.buildProduct_;
          onChanged();
        }
        if (other.hasOtaInstalled()) {
          setOtaInstalled(other.getOtaInstalled());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string id = 1;
      private java.lang.Object id_ = "";
      /**
       * <code>optional string id = 1;</code>
       */
      public boolean hasId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string id = 1;</code>
       */
      public java.lang.String getId() {
        java.lang.Object ref = id_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          id_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string id = 1;</code>
       */
      public com.google.protobuf.ByteString
          getIdBytes() {
        java.lang.Object ref = id_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          id_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string id = 1;</code>
       */
      public Builder setId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string id = 1;</code>
       */
      public Builder clearId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        id_ = getDefaultInstance().getId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string id = 1;</code>
       */
      public Builder setIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        id_ = value;
        onChanged();
        return this;
      }

      // optional string product = 2;
      private java.lang.Object product_ = "";
      /**
       * <code>optional string product = 2;</code>
       */
      public boolean hasProduct() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string product = 2;</code>
       */
      public java.lang.String getProduct() {
        java.lang.Object ref = product_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          product_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string product = 2;</code>
       */
      public com.google.protobuf.ByteString
          getProductBytes() {
        java.lang.Object ref = product_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          product_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string product = 2;</code>
       */
      public Builder setProduct(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        product_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string product = 2;</code>
       */
      public Builder clearProduct() {
        bitField0_ = (bitField0_ & ~0x00000002);
        product_ = getDefaultInstance().getProduct();
        onChanged();
        return this;
      }
      /**
       * <code>optional string product = 2;</code>
       */
      public Builder setProductBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        product_ = value;
        onChanged();
        return this;
      }

      // optional string carrier = 3;
      private java.lang.Object carrier_ = "";
      /**
       * <code>optional string carrier = 3;</code>
       */
      public boolean hasCarrier() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string carrier = 3;</code>
       */
      public java.lang.String getCarrier() {
        java.lang.Object ref = carrier_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          carrier_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string carrier = 3;</code>
       */
      public com.google.protobuf.ByteString
          getCarrierBytes() {
        java.lang.Object ref = carrier_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          carrier_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string carrier = 3;</code>
       */
      public Builder setCarrier(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        carrier_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string carrier = 3;</code>
       */
      public Builder clearCarrier() {
        bitField0_ = (bitField0_ & ~0x00000004);
        carrier_ = getDefaultInstance().getCarrier();
        onChanged();
        return this;
      }
      /**
       * <code>optional string carrier = 3;</code>
       */
      public Builder setCarrierBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        carrier_ = value;
        onChanged();
        return this;
      }

      // optional string radio = 4;
      private java.lang.Object radio_ = "";
      /**
       * <code>optional string radio = 4;</code>
       */
      public boolean hasRadio() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string radio = 4;</code>
       */
      public java.lang.String getRadio() {
        java.lang.Object ref = radio_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          radio_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string radio = 4;</code>
       */
      public com.google.protobuf.ByteString
          getRadioBytes() {
        java.lang.Object ref = radio_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          radio_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string radio = 4;</code>
       */
      public Builder setRadio(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        radio_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string radio = 4;</code>
       */
      public Builder clearRadio() {
        bitField0_ = (bitField0_ & ~0x00000008);
        radio_ = getDefaultInstance().getRadio();
        onChanged();
        return this;
      }
      /**
       * <code>optional string radio = 4;</code>
       */
      public Builder setRadioBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        radio_ = value;
        onChanged();
        return this;
      }

      // optional string bootloader = 5;
      private java.lang.Object bootloader_ = "";
      /**
       * <code>optional string bootloader = 5;</code>
       */
      public boolean hasBootloader() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string bootloader = 5;</code>
       */
      public java.lang.String getBootloader() {
        java.lang.Object ref = bootloader_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          bootloader_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string bootloader = 5;</code>
       */
      public com.google.protobuf.ByteString
          getBootloaderBytes() {
        java.lang.Object ref = bootloader_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          bootloader_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string bootloader = 5;</code>
       */
      public Builder setBootloader(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        bootloader_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string bootloader = 5;</code>
       */
      public Builder clearBootloader() {
        bitField0_ = (bitField0_ & ~0x00000010);
        bootloader_ = getDefaultInstance().getBootloader();
        onChanged();
        return this;
      }
      /**
       * <code>optional string bootloader = 5;</code>
       */
      public Builder setBootloaderBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        bootloader_ = value;
        onChanged();
        return this;
      }

      // optional string client = 6;
      private java.lang.Object client_ = "";
      /**
       * <code>optional string client = 6;</code>
       */
      public boolean hasClient() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional string client = 6;</code>
       */
      public java.lang.String getClient() {
        java.lang.Object ref = client_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          client_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string client = 6;</code>
       */
      public com.google.protobuf.ByteString
          getClientBytes() {
        java.lang.Object ref = client_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          client_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string client = 6;</code>
       */
      public Builder setClient(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        client_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string client = 6;</code>
       */
      public Builder clearClient() {
        bitField0_ = (bitField0_ & ~0x00000020);
        client_ = getDefaultInstance().getClient();
        onChanged();
        return this;
      }
      /**
       * <code>optional string client = 6;</code>
       */
      public Builder setClientBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        client_ = value;
        onChanged();
        return this;
      }

      // optional int64 timestamp = 7;
      private long timestamp_ ;
      /**
       * <code>optional int64 timestamp = 7;</code>
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional int64 timestamp = 7;</code>
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <code>optional int64 timestamp = 7;</code>
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000040;
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 timestamp = 7;</code>
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000040);
        timestamp_ = 0L;
        onChanged();
        return this;
      }

      // optional int32 googleServices = 8;
      private int googleServices_ ;
      /**
       * <code>optional int32 googleServices = 8;</code>
       */
      public boolean hasGoogleServices() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional int32 googleServices = 8;</code>
       */
      public int getGoogleServices() {
        return googleServices_;
      }
      /**
       * <code>optional int32 googleServices = 8;</code>
       */
      public Builder setGoogleServices(int value) {
        bitField0_ |= 0x00000080;
        googleServices_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 googleServices = 8;</code>
       */
      public Builder clearGoogleServices() {
        bitField0_ = (bitField0_ & ~0x00000080);
        googleServices_ = 0;
        onChanged();
        return this;
      }

      // optional string device = 9;
      private java.lang.Object device_ = "";
      /**
       * <code>optional string device = 9;</code>
       */
      public boolean hasDevice() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional string device = 9;</code>
       */
      public java.lang.String getDevice() {
        java.lang.Object ref = device_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          device_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string device = 9;</code>
       */
      public com.google.protobuf.ByteString
          getDeviceBytes() {
        java.lang.Object ref = device_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          device_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string device = 9;</code>
       */
      public Builder setDevice(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        device_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string device = 9;</code>
       */
      public Builder clearDevice() {
        bitField0_ = (bitField0_ & ~0x00000100);
        device_ = getDefaultInstance().getDevice();
        onChanged();
        return this;
      }
      /**
       * <code>optional string device = 9;</code>
       */
      public Builder setDeviceBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000100;
        device_ = value;
        onChanged();
        return this;
      }

      // optional int32 sdkVersion = 10;
      private int sdkVersion_ ;
      /**
       * <code>optional int32 sdkVersion = 10;</code>
       */
      public boolean hasSdkVersion() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <code>optional int32 sdkVersion = 10;</code>
       */
      public int getSdkVersion() {
        return sdkVersion_;
      }
      /**
       * <code>optional int32 sdkVersion = 10;</code>
       */
      public Builder setSdkVersion(int value) {
        bitField0_ |= 0x00000200;
        sdkVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 sdkVersion = 10;</code>
       */
      public Builder clearSdkVersion() {
        bitField0_ = (bitField0_ & ~0x00000200);
        sdkVersion_ = 0;
        onChanged();
        return this;
      }

      // optional string model = 11;
      private java.lang.Object model_ = "";
      /**
       * <code>optional string model = 11;</code>
       */
      public boolean hasModel() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <code>optional string model = 11;</code>
       */
      public java.lang.String getModel() {
        java.lang.Object ref = model_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          model_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string model = 11;</code>
       */
      public com.google.protobuf.ByteString
          getModelBytes() {
        java.lang.Object ref = model_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          model_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string model = 11;</code>
       */
      public Builder setModel(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        model_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string model = 11;</code>
       */
      public Builder clearModel() {
        bitField0_ = (bitField0_ & ~0x00000400);
        model_ = getDefaultInstance().getModel();
        onChanged();
        return this;
      }
      /**
       * <code>optional string model = 11;</code>
       */
      public Builder setModelBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        model_ = value;
        onChanged();
        return this;
      }

      // optional string manufacturer = 12;
      private java.lang.Object manufacturer_ = "";
      /**
       * <code>optional string manufacturer = 12;</code>
       */
      public boolean hasManufacturer() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <code>optional string manufacturer = 12;</code>
       */
      public java.lang.String getManufacturer() {
        java.lang.Object ref = manufacturer_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          manufacturer_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string manufacturer = 12;</code>
       */
      public com.google.protobuf.ByteString
          getManufacturerBytes() {
        java.lang.Object ref = manufacturer_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          manufacturer_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string manufacturer = 12;</code>
       */
      public Builder setManufacturer(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        manufacturer_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string manufacturer = 12;</code>
       */
      public Builder clearManufacturer() {
        bitField0_ = (bitField0_ & ~0x00000800);
        manufacturer_ = getDefaultInstance().getManufacturer();
        onChanged();
        return this;
      }
      /**
       * <code>optional string manufacturer = 12;</code>
       */
      public Builder setManufacturerBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        manufacturer_ = value;
        onChanged();
        return this;
      }

      // optional string buildProduct = 13;
      private java.lang.Object buildProduct_ = "";
      /**
       * <code>optional string buildProduct = 13;</code>
       */
      public boolean hasBuildProduct() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <code>optional string buildProduct = 13;</code>
       */
      public java.lang.String getBuildProduct() {
        java.lang.Object ref = buildProduct_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          buildProduct_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string buildProduct = 13;</code>
       */
      public com.google.protobuf.ByteString
          getBuildProductBytes() {
        java.lang.Object ref = buildProduct_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          buildProduct_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string buildProduct = 13;</code>
       */
      public Builder setBuildProduct(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        buildProduct_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string buildProduct = 13;</code>
       */
      public Builder clearBuildProduct() {
        bitField0_ = (bitField0_ & ~0x00001000);
        buildProduct_ = getDefaultInstance().getBuildProduct();
        onChanged();
        return this;
      }
      /**
       * <code>optional string buildProduct = 13;</code>
       */
      public Builder setBuildProductBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        buildProduct_ = value;
        onChanged();
        return this;
      }

      // optional bool otaInstalled = 14;
      private boolean otaInstalled_ ;
      /**
       * <code>optional bool otaInstalled = 14;</code>
       */
      public boolean hasOtaInstalled() {
        return ((bitField0_ & 0x00002000) == 0x00002000);
      }
      /**
       * <code>optional bool otaInstalled = 14;</code>
       */
      public boolean getOtaInstalled() {
        return otaInstalled_;
      }
      /**
       * <code>optional bool otaInstalled = 14;</code>
       */
      public Builder setOtaInstalled(boolean value) {
        bitField0_ |= 0x00002000;
        otaInstalled_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bool otaInstalled = 14;</code>
       */
      public Builder clearOtaInstalled() {
        bitField0_ = (bitField0_ & ~0x00002000);
        otaInstalled_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:AndroidBuildProto)
    }

    static {
      defaultInstance = new AndroidBuildProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:AndroidBuildProto)
  }

  public interface AndroidCheckinProtoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .AndroidBuildProto build = 1;
    /**
     * <code>optional .AndroidBuildProto build = 1;</code>
     */
    boolean hasBuild();
    /**
     * <code>optional .AndroidBuildProto build = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto getBuild();
    /**
     * <code>optional .AndroidBuildProto build = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProtoOrBuilder getBuildOrBuilder();

    // optional int64 lastCheckinMsec = 2;
    /**
     * <code>optional int64 lastCheckinMsec = 2;</code>
     */
    boolean hasLastCheckinMsec();
    /**
     * <code>optional int64 lastCheckinMsec = 2;</code>
     */
    long getLastCheckinMsec();

    // repeated .AndroidEventProto event = 3;
    /**
     * <code>repeated .AndroidEventProto event = 3;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto> 
        getEventList();
    /**
     * <code>repeated .AndroidEventProto event = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto getEvent(int index);
    /**
     * <code>repeated .AndroidEventProto event = 3;</code>
     */
    int getEventCount();
    /**
     * <code>repeated .AndroidEventProto event = 3;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProtoOrBuilder> 
        getEventOrBuilderList();
    /**
     * <code>repeated .AndroidEventProto event = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProtoOrBuilder getEventOrBuilder(
        int index);

    // repeated .AndroidStatisticProto stat = 4;
    /**
     * <code>repeated .AndroidStatisticProto stat = 4;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto> 
        getStatList();
    /**
     * <code>repeated .AndroidStatisticProto stat = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto getStat(int index);
    /**
     * <code>repeated .AndroidStatisticProto stat = 4;</code>
     */
    int getStatCount();
    /**
     * <code>repeated .AndroidStatisticProto stat = 4;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProtoOrBuilder> 
        getStatOrBuilderList();
    /**
     * <code>repeated .AndroidStatisticProto stat = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProtoOrBuilder getStatOrBuilder(
        int index);

    // repeated string requestedGroup = 5;
    /**
     * <code>repeated string requestedGroup = 5;</code>
     */
    java.util.List<java.lang.String>
    getRequestedGroupList();
    /**
     * <code>repeated string requestedGroup = 5;</code>
     */
    int getRequestedGroupCount();
    /**
     * <code>repeated string requestedGroup = 5;</code>
     */
    java.lang.String getRequestedGroup(int index);
    /**
     * <code>repeated string requestedGroup = 5;</code>
     */
    com.google.protobuf.ByteString
        getRequestedGroupBytes(int index);

    // optional string cellOperator = 6;
    /**
     * <code>optional string cellOperator = 6;</code>
     */
    boolean hasCellOperator();
    /**
     * <code>optional string cellOperator = 6;</code>
     */
    java.lang.String getCellOperator();
    /**
     * <code>optional string cellOperator = 6;</code>
     */
    com.google.protobuf.ByteString
        getCellOperatorBytes();

    // optional string simOperator = 7;
    /**
     * <code>optional string simOperator = 7;</code>
     */
    boolean hasSimOperator();
    /**
     * <code>optional string simOperator = 7;</code>
     */
    java.lang.String getSimOperator();
    /**
     * <code>optional string simOperator = 7;</code>
     */
    com.google.protobuf.ByteString
        getSimOperatorBytes();

    // optional string roaming = 8;
    /**
     * <code>optional string roaming = 8;</code>
     */
    boolean hasRoaming();
    /**
     * <code>optional string roaming = 8;</code>
     */
    java.lang.String getRoaming();
    /**
     * <code>optional string roaming = 8;</code>
     */
    com.google.protobuf.ByteString
        getRoamingBytes();

    // optional int32 userNumber = 9;
    /**
     * <code>optional int32 userNumber = 9;</code>
     */
    boolean hasUserNumber();
    /**
     * <code>optional int32 userNumber = 9;</code>
     */
    int getUserNumber();
  }
  /**
   * Protobuf type {@code AndroidCheckinProto}
   */
  public static final class AndroidCheckinProto extends
      com.google.protobuf.GeneratedMessage
      implements AndroidCheckinProtoOrBuilder {
    // Use AndroidCheckinProto.newBuilder() to construct.
    private AndroidCheckinProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AndroidCheckinProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AndroidCheckinProto defaultInstance;
    public static AndroidCheckinProto getDefaultInstance() {
      return defaultInstance;
    }

    public AndroidCheckinProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AndroidCheckinProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = build_.toBuilder();
              }
              build_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(build_);
                build_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              lastCheckinMsec_ = input.readInt64();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                event_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto>();
                mutable_bitField0_ |= 0x00000004;
              }
              event_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.PARSER, extensionRegistry));
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                stat_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto>();
                mutable_bitField0_ |= 0x00000008;
              }
              stat_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.PARSER, extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                requestedGroup_ = new com.google.protobuf.LazyStringArrayList();
                mutable_bitField0_ |= 0x00000010;
              }
              requestedGroup_.add(input.readBytes());
              break;
            }
            case 50: {
              bitField0_ |= 0x00000004;
              cellOperator_ = input.readBytes();
              break;
            }
            case 58: {
              bitField0_ |= 0x00000008;
              simOperator_ = input.readBytes();
              break;
            }
            case 66: {
              bitField0_ |= 0x00000010;
              roaming_ = input.readBytes();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000020;
              userNumber_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          event_ = java.util.Collections.unmodifiableList(event_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          stat_ = java.util.Collections.unmodifiableList(stat_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          requestedGroup_ = new com.google.protobuf.UnmodifiableLazyStringList(requestedGroup_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.Builder.class);
    }

    public static com.google.protobuf.Parser<AndroidCheckinProto> PARSER =
        new com.google.protobuf.AbstractParser<AndroidCheckinProto>() {
      public AndroidCheckinProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AndroidCheckinProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AndroidCheckinProto> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .AndroidBuildProto build = 1;
    public static final int BUILD_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto build_;
    /**
     * <code>optional .AndroidBuildProto build = 1;</code>
     */
    public boolean hasBuild() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .AndroidBuildProto build = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto getBuild() {
      return build_;
    }
    /**
     * <code>optional .AndroidBuildProto build = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProtoOrBuilder getBuildOrBuilder() {
      return build_;
    }

    // optional int64 lastCheckinMsec = 2;
    public static final int LASTCHECKINMSEC_FIELD_NUMBER = 2;
    private long lastCheckinMsec_;
    /**
     * <code>optional int64 lastCheckinMsec = 2;</code>
     */
    public boolean hasLastCheckinMsec() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 lastCheckinMsec = 2;</code>
     */
    public long getLastCheckinMsec() {
      return lastCheckinMsec_;
    }

    // repeated .AndroidEventProto event = 3;
    public static final int EVENT_FIELD_NUMBER = 3;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto> event_;
    /**
     * <code>repeated .AndroidEventProto event = 3;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto> getEventList() {
      return event_;
    }
    /**
     * <code>repeated .AndroidEventProto event = 3;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProtoOrBuilder> 
        getEventOrBuilderList() {
      return event_;
    }
    /**
     * <code>repeated .AndroidEventProto event = 3;</code>
     */
    public int getEventCount() {
      return event_.size();
    }
    /**
     * <code>repeated .AndroidEventProto event = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto getEvent(int index) {
      return event_.get(index);
    }
    /**
     * <code>repeated .AndroidEventProto event = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProtoOrBuilder getEventOrBuilder(
        int index) {
      return event_.get(index);
    }

    // repeated .AndroidStatisticProto stat = 4;
    public static final int STAT_FIELD_NUMBER = 4;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto> stat_;
    /**
     * <code>repeated .AndroidStatisticProto stat = 4;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto> getStatList() {
      return stat_;
    }
    /**
     * <code>repeated .AndroidStatisticProto stat = 4;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProtoOrBuilder> 
        getStatOrBuilderList() {
      return stat_;
    }
    /**
     * <code>repeated .AndroidStatisticProto stat = 4;</code>
     */
    public int getStatCount() {
      return stat_.size();
    }
    /**
     * <code>repeated .AndroidStatisticProto stat = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto getStat(int index) {
      return stat_.get(index);
    }
    /**
     * <code>repeated .AndroidStatisticProto stat = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProtoOrBuilder getStatOrBuilder(
        int index) {
      return stat_.get(index);
    }

    // repeated string requestedGroup = 5;
    public static final int REQUESTEDGROUP_FIELD_NUMBER = 5;
    private com.google.protobuf.LazyStringList requestedGroup_;
    /**
     * <code>repeated string requestedGroup = 5;</code>
     */
    public java.util.List<java.lang.String>
        getRequestedGroupList() {
      return requestedGroup_;
    }
    /**
     * <code>repeated string requestedGroup = 5;</code>
     */
    public int getRequestedGroupCount() {
      return requestedGroup_.size();
    }
    /**
     * <code>repeated string requestedGroup = 5;</code>
     */
    public java.lang.String getRequestedGroup(int index) {
      return requestedGroup_.get(index);
    }
    /**
     * <code>repeated string requestedGroup = 5;</code>
     */
    public com.google.protobuf.ByteString
        getRequestedGroupBytes(int index) {
      return requestedGroup_.getByteString(index);
    }

    // optional string cellOperator = 6;
    public static final int CELLOPERATOR_FIELD_NUMBER = 6;
    private java.lang.Object cellOperator_;
    /**
     * <code>optional string cellOperator = 6;</code>
     */
    public boolean hasCellOperator() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string cellOperator = 6;</code>
     */
    public java.lang.String getCellOperator() {
      java.lang.Object ref = cellOperator_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          cellOperator_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string cellOperator = 6;</code>
     */
    public com.google.protobuf.ByteString
        getCellOperatorBytes() {
      java.lang.Object ref = cellOperator_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        cellOperator_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string simOperator = 7;
    public static final int SIMOPERATOR_FIELD_NUMBER = 7;
    private java.lang.Object simOperator_;
    /**
     * <code>optional string simOperator = 7;</code>
     */
    public boolean hasSimOperator() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string simOperator = 7;</code>
     */
    public java.lang.String getSimOperator() {
      java.lang.Object ref = simOperator_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          simOperator_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string simOperator = 7;</code>
     */
    public com.google.protobuf.ByteString
        getSimOperatorBytes() {
      java.lang.Object ref = simOperator_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        simOperator_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string roaming = 8;
    public static final int ROAMING_FIELD_NUMBER = 8;
    private java.lang.Object roaming_;
    /**
     * <code>optional string roaming = 8;</code>
     */
    public boolean hasRoaming() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string roaming = 8;</code>
     */
    public java.lang.String getRoaming() {
      java.lang.Object ref = roaming_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          roaming_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string roaming = 8;</code>
     */
    public com.google.protobuf.ByteString
        getRoamingBytes() {
      java.lang.Object ref = roaming_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        roaming_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 userNumber = 9;
    public static final int USERNUMBER_FIELD_NUMBER = 9;
    private int userNumber_;
    /**
     * <code>optional int32 userNumber = 9;</code>
     */
    public boolean hasUserNumber() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <code>optional int32 userNumber = 9;</code>
     */
    public int getUserNumber() {
      return userNumber_;
    }

    private void initFields() {
      build_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.getDefaultInstance();
      lastCheckinMsec_ = 0L;
      event_ = java.util.Collections.emptyList();
      stat_ = java.util.Collections.emptyList();
      requestedGroup_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      cellOperator_ = "";
      simOperator_ = "";
      roaming_ = "";
      userNumber_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, build_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, lastCheckinMsec_);
      }
      for (int i = 0; i < event_.size(); i++) {
        output.writeMessage(3, event_.get(i));
      }
      for (int i = 0; i < stat_.size(); i++) {
        output.writeMessage(4, stat_.get(i));
      }
      for (int i = 0; i < requestedGroup_.size(); i++) {
        output.writeBytes(5, requestedGroup_.getByteString(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(6, getCellOperatorBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(7, getSimOperatorBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(8, getRoamingBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt32(9, userNumber_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, build_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, lastCheckinMsec_);
      }
      for (int i = 0; i < event_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, event_.get(i));
      }
      for (int i = 0; i < stat_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, stat_.get(i));
      }
      {
        int dataSize = 0;
        for (int i = 0; i < requestedGroup_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeBytesSizeNoTag(requestedGroup_.getByteString(i));
        }
        size += dataSize;
        size += 1 * getRequestedGroupList().size();
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(6, getCellOperatorBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(7, getSimOperatorBytes());
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(8, getRoamingBytes());
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(9, userNumber_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AndroidCheckinProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getBuildFieldBuilder();
          getEventFieldBuilder();
          getStatFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (buildBuilder_ == null) {
          build_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.getDefaultInstance();
        } else {
          buildBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        lastCheckinMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (eventBuilder_ == null) {
          event_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          eventBuilder_.clear();
        }
        if (statBuilder_ == null) {
          stat_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          statBuilder_.clear();
        }
        requestedGroup_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        cellOperator_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        simOperator_ = "";
        bitField0_ = (bitField0_ & ~0x00000040);
        roaming_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        userNumber_ = 0;
        bitField0_ = (bitField0_ & ~0x00000100);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidCheckinProto_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto result = new com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (buildBuilder_ == null) {
          result.build_ = build_;
        } else {
          result.build_ = buildBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.lastCheckinMsec_ = lastCheckinMsec_;
        if (eventBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            event_ = java.util.Collections.unmodifiableList(event_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.event_ = event_;
        } else {
          result.event_ = eventBuilder_.build();
        }
        if (statBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            stat_ = java.util.Collections.unmodifiableList(stat_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.stat_ = stat_;
        } else {
          result.stat_ = statBuilder_.build();
        }
        if (((bitField0_ & 0x00000010) == 0x00000010)) {
          requestedGroup_ = new com.google.protobuf.UnmodifiableLazyStringList(
              requestedGroup_);
          bitField0_ = (bitField0_ & ~0x00000010);
        }
        result.requestedGroup_ = requestedGroup_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000004;
        }
        result.cellOperator_ = cellOperator_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000008;
        }
        result.simOperator_ = simOperator_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000010;
        }
        result.roaming_ = roaming_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000020;
        }
        result.userNumber_ = userNumber_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto.getDefaultInstance()) return this;
        if (other.hasBuild()) {
          mergeBuild(other.getBuild());
        }
        if (other.hasLastCheckinMsec()) {
          setLastCheckinMsec(other.getLastCheckinMsec());
        }
        if (eventBuilder_ == null) {
          if (!other.event_.isEmpty()) {
            if (event_.isEmpty()) {
              event_ = other.event_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureEventIsMutable();
              event_.addAll(other.event_);
            }
            onChanged();
          }
        } else {
          if (!other.event_.isEmpty()) {
            if (eventBuilder_.isEmpty()) {
              eventBuilder_.dispose();
              eventBuilder_ = null;
              event_ = other.event_;
              bitField0_ = (bitField0_ & ~0x00000004);
              eventBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getEventFieldBuilder() : null;
            } else {
              eventBuilder_.addAllMessages(other.event_);
            }
          }
        }
        if (statBuilder_ == null) {
          if (!other.stat_.isEmpty()) {
            if (stat_.isEmpty()) {
              stat_ = other.stat_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureStatIsMutable();
              stat_.addAll(other.stat_);
            }
            onChanged();
          }
        } else {
          if (!other.stat_.isEmpty()) {
            if (statBuilder_.isEmpty()) {
              statBuilder_.dispose();
              statBuilder_ = null;
              stat_ = other.stat_;
              bitField0_ = (bitField0_ & ~0x00000008);
              statBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getStatFieldBuilder() : null;
            } else {
              statBuilder_.addAllMessages(other.stat_);
            }
          }
        }
        if (!other.requestedGroup_.isEmpty()) {
          if (requestedGroup_.isEmpty()) {
            requestedGroup_ = other.requestedGroup_;
            bitField0_ = (bitField0_ & ~0x00000010);
          } else {
            ensureRequestedGroupIsMutable();
            requestedGroup_.addAll(other.requestedGroup_);
          }
          onChanged();
        }
        if (other.hasCellOperator()) {
          bitField0_ |= 0x00000020;
          cellOperator_ = other.cellOperator_;
          onChanged();
        }
        if (other.hasSimOperator()) {
          bitField0_ |= 0x00000040;
          simOperator_ = other.simOperator_;
          onChanged();
        }
        if (other.hasRoaming()) {
          bitField0_ |= 0x00000080;
          roaming_ = other.roaming_;
          onChanged();
        }
        if (other.hasUserNumber()) {
          setUserNumber(other.getUserNumber());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.AndroidCheckinProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .AndroidBuildProto build = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto build_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProtoOrBuilder> buildBuilder_;
      /**
       * <code>optional .AndroidBuildProto build = 1;</code>
       */
      public boolean hasBuild() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .AndroidBuildProto build = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto getBuild() {
        if (buildBuilder_ == null) {
          return build_;
        } else {
          return buildBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AndroidBuildProto build = 1;</code>
       */
      public Builder setBuild(com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto value) {
        if (buildBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          build_ = value;
          onChanged();
        } else {
          buildBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AndroidBuildProto build = 1;</code>
       */
      public Builder setBuild(
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.Builder builderForValue) {
        if (buildBuilder_ == null) {
          build_ = builderForValue.build();
          onChanged();
        } else {
          buildBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AndroidBuildProto build = 1;</code>
       */
      public Builder mergeBuild(com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto value) {
        if (buildBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              build_ != com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.getDefaultInstance()) {
            build_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.newBuilder(build_).mergeFrom(value).buildPartial();
          } else {
            build_ = value;
          }
          onChanged();
        } else {
          buildBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AndroidBuildProto build = 1;</code>
       */
      public Builder clearBuild() {
        if (buildBuilder_ == null) {
          build_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.getDefaultInstance();
          onChanged();
        } else {
          buildBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .AndroidBuildProto build = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.Builder getBuildBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getBuildFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AndroidBuildProto build = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProtoOrBuilder getBuildOrBuilder() {
        if (buildBuilder_ != null) {
          return buildBuilder_.getMessageOrBuilder();
        } else {
          return build_;
        }
      }
      /**
       * <code>optional .AndroidBuildProto build = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProtoOrBuilder> 
          getBuildFieldBuilder() {
        if (buildBuilder_ == null) {
          buildBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidBuildProtoOrBuilder>(
                  build_,
                  getParentForChildren(),
                  isClean());
          build_ = null;
        }
        return buildBuilder_;
      }

      // optional int64 lastCheckinMsec = 2;
      private long lastCheckinMsec_ ;
      /**
       * <code>optional int64 lastCheckinMsec = 2;</code>
       */
      public boolean hasLastCheckinMsec() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 lastCheckinMsec = 2;</code>
       */
      public long getLastCheckinMsec() {
        return lastCheckinMsec_;
      }
      /**
       * <code>optional int64 lastCheckinMsec = 2;</code>
       */
      public Builder setLastCheckinMsec(long value) {
        bitField0_ |= 0x00000002;
        lastCheckinMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 lastCheckinMsec = 2;</code>
       */
      public Builder clearLastCheckinMsec() {
        bitField0_ = (bitField0_ & ~0x00000002);
        lastCheckinMsec_ = 0L;
        onChanged();
        return this;
      }

      // repeated .AndroidEventProto event = 3;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto> event_ =
        java.util.Collections.emptyList();
      private void ensureEventIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          event_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto>(event_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProtoOrBuilder> eventBuilder_;

      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto> getEventList() {
        if (eventBuilder_ == null) {
          return java.util.Collections.unmodifiableList(event_);
        } else {
          return eventBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public int getEventCount() {
        if (eventBuilder_ == null) {
          return event_.size();
        } else {
          return eventBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto getEvent(int index) {
        if (eventBuilder_ == null) {
          return event_.get(index);
        } else {
          return eventBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public Builder setEvent(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto value) {
        if (eventBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEventIsMutable();
          event_.set(index, value);
          onChanged();
        } else {
          eventBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public Builder setEvent(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.Builder builderForValue) {
        if (eventBuilder_ == null) {
          ensureEventIsMutable();
          event_.set(index, builderForValue.build());
          onChanged();
        } else {
          eventBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public Builder addEvent(com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto value) {
        if (eventBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEventIsMutable();
          event_.add(value);
          onChanged();
        } else {
          eventBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public Builder addEvent(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto value) {
        if (eventBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureEventIsMutable();
          event_.add(index, value);
          onChanged();
        } else {
          eventBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public Builder addEvent(
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.Builder builderForValue) {
        if (eventBuilder_ == null) {
          ensureEventIsMutable();
          event_.add(builderForValue.build());
          onChanged();
        } else {
          eventBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public Builder addEvent(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.Builder builderForValue) {
        if (eventBuilder_ == null) {
          ensureEventIsMutable();
          event_.add(index, builderForValue.build());
          onChanged();
        } else {
          eventBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public Builder addAllEvent(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto> values) {
        if (eventBuilder_ == null) {
          ensureEventIsMutable();
          super.addAll(values, event_);
          onChanged();
        } else {
          eventBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public Builder clearEvent() {
        if (eventBuilder_ == null) {
          event_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          eventBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public Builder removeEvent(int index) {
        if (eventBuilder_ == null) {
          ensureEventIsMutable();
          event_.remove(index);
          onChanged();
        } else {
          eventBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.Builder getEventBuilder(
          int index) {
        return getEventFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProtoOrBuilder getEventOrBuilder(
          int index) {
        if (eventBuilder_ == null) {
          return event_.get(index);  } else {
          return eventBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProtoOrBuilder> 
           getEventOrBuilderList() {
        if (eventBuilder_ != null) {
          return eventBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(event_);
        }
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.Builder addEventBuilder() {
        return getEventFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.getDefaultInstance());
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.Builder addEventBuilder(
          int index) {
        return getEventFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.getDefaultInstance());
      }
      /**
       * <code>repeated .AndroidEventProto event = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.Builder> 
           getEventBuilderList() {
        return getEventFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProtoOrBuilder> 
          getEventFieldBuilder() {
        if (eventBuilder_ == null) {
          eventBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProtoOrBuilder>(
                  event_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          event_ = null;
        }
        return eventBuilder_;
      }

      // repeated .AndroidStatisticProto stat = 4;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto> stat_ =
        java.util.Collections.emptyList();
      private void ensureStatIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          stat_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto>(stat_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProtoOrBuilder> statBuilder_;

      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto> getStatList() {
        if (statBuilder_ == null) {
          return java.util.Collections.unmodifiableList(stat_);
        } else {
          return statBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public int getStatCount() {
        if (statBuilder_ == null) {
          return stat_.size();
        } else {
          return statBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto getStat(int index) {
        if (statBuilder_ == null) {
          return stat_.get(index);
        } else {
          return statBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public Builder setStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto value) {
        if (statBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStatIsMutable();
          stat_.set(index, value);
          onChanged();
        } else {
          statBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public Builder setStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.Builder builderForValue) {
        if (statBuilder_ == null) {
          ensureStatIsMutable();
          stat_.set(index, builderForValue.build());
          onChanged();
        } else {
          statBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public Builder addStat(com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto value) {
        if (statBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStatIsMutable();
          stat_.add(value);
          onChanged();
        } else {
          statBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public Builder addStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto value) {
        if (statBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStatIsMutable();
          stat_.add(index, value);
          onChanged();
        } else {
          statBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public Builder addStat(
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.Builder builderForValue) {
        if (statBuilder_ == null) {
          ensureStatIsMutable();
          stat_.add(builderForValue.build());
          onChanged();
        } else {
          statBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public Builder addStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.Builder builderForValue) {
        if (statBuilder_ == null) {
          ensureStatIsMutable();
          stat_.add(index, builderForValue.build());
          onChanged();
        } else {
          statBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public Builder addAllStat(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto> values) {
        if (statBuilder_ == null) {
          ensureStatIsMutable();
          super.addAll(values, stat_);
          onChanged();
        } else {
          statBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public Builder clearStat() {
        if (statBuilder_ == null) {
          stat_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          statBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public Builder removeStat(int index) {
        if (statBuilder_ == null) {
          ensureStatIsMutable();
          stat_.remove(index);
          onChanged();
        } else {
          statBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.Builder getStatBuilder(
          int index) {
        return getStatFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProtoOrBuilder getStatOrBuilder(
          int index) {
        if (statBuilder_ == null) {
          return stat_.get(index);  } else {
          return statBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProtoOrBuilder> 
           getStatOrBuilderList() {
        if (statBuilder_ != null) {
          return statBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(stat_);
        }
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.Builder addStatBuilder() {
        return getStatFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.getDefaultInstance());
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.Builder addStatBuilder(
          int index) {
        return getStatFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.getDefaultInstance());
      }
      /**
       * <code>repeated .AndroidStatisticProto stat = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.Builder> 
           getStatBuilderList() {
        return getStatFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProtoOrBuilder> 
          getStatFieldBuilder() {
        if (statBuilder_ == null) {
          statBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProtoOrBuilder>(
                  stat_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          stat_ = null;
        }
        return statBuilder_;
      }

      // repeated string requestedGroup = 5;
      private com.google.protobuf.LazyStringList requestedGroup_ = com.google.protobuf.LazyStringArrayList.EMPTY;
      private void ensureRequestedGroupIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          requestedGroup_ = new com.google.protobuf.LazyStringArrayList(requestedGroup_);
          bitField0_ |= 0x00000010;
         }
      }
      /**
       * <code>repeated string requestedGroup = 5;</code>
       */
      public java.util.List<java.lang.String>
          getRequestedGroupList() {
        return java.util.Collections.unmodifiableList(requestedGroup_);
      }
      /**
       * <code>repeated string requestedGroup = 5;</code>
       */
      public int getRequestedGroupCount() {
        return requestedGroup_.size();
      }
      /**
       * <code>repeated string requestedGroup = 5;</code>
       */
      public java.lang.String getRequestedGroup(int index) {
        return requestedGroup_.get(index);
      }
      /**
       * <code>repeated string requestedGroup = 5;</code>
       */
      public com.google.protobuf.ByteString
          getRequestedGroupBytes(int index) {
        return requestedGroup_.getByteString(index);
      }
      /**
       * <code>repeated string requestedGroup = 5;</code>
       */
      public Builder setRequestedGroup(
          int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureRequestedGroupIsMutable();
        requestedGroup_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string requestedGroup = 5;</code>
       */
      public Builder addRequestedGroup(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureRequestedGroupIsMutable();
        requestedGroup_.add(value);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string requestedGroup = 5;</code>
       */
      public Builder addAllRequestedGroup(
          java.lang.Iterable<java.lang.String> values) {
        ensureRequestedGroupIsMutable();
        super.addAll(values, requestedGroup_);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string requestedGroup = 5;</code>
       */
      public Builder clearRequestedGroup() {
        requestedGroup_ = com.google.protobuf.LazyStringArrayList.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000010);
        onChanged();
        return this;
      }
      /**
       * <code>repeated string requestedGroup = 5;</code>
       */
      public Builder addRequestedGroupBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  ensureRequestedGroupIsMutable();
        requestedGroup_.add(value);
        onChanged();
        return this;
      }

      // optional string cellOperator = 6;
      private java.lang.Object cellOperator_ = "";
      /**
       * <code>optional string cellOperator = 6;</code>
       */
      public boolean hasCellOperator() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <code>optional string cellOperator = 6;</code>
       */
      public java.lang.String getCellOperator() {
        java.lang.Object ref = cellOperator_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          cellOperator_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string cellOperator = 6;</code>
       */
      public com.google.protobuf.ByteString
          getCellOperatorBytes() {
        java.lang.Object ref = cellOperator_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          cellOperator_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string cellOperator = 6;</code>
       */
      public Builder setCellOperator(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        cellOperator_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string cellOperator = 6;</code>
       */
      public Builder clearCellOperator() {
        bitField0_ = (bitField0_ & ~0x00000020);
        cellOperator_ = getDefaultInstance().getCellOperator();
        onChanged();
        return this;
      }
      /**
       * <code>optional string cellOperator = 6;</code>
       */
      public Builder setCellOperatorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        cellOperator_ = value;
        onChanged();
        return this;
      }

      // optional string simOperator = 7;
      private java.lang.Object simOperator_ = "";
      /**
       * <code>optional string simOperator = 7;</code>
       */
      public boolean hasSimOperator() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <code>optional string simOperator = 7;</code>
       */
      public java.lang.String getSimOperator() {
        java.lang.Object ref = simOperator_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          simOperator_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string simOperator = 7;</code>
       */
      public com.google.protobuf.ByteString
          getSimOperatorBytes() {
        java.lang.Object ref = simOperator_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          simOperator_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string simOperator = 7;</code>
       */
      public Builder setSimOperator(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        simOperator_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string simOperator = 7;</code>
       */
      public Builder clearSimOperator() {
        bitField0_ = (bitField0_ & ~0x00000040);
        simOperator_ = getDefaultInstance().getSimOperator();
        onChanged();
        return this;
      }
      /**
       * <code>optional string simOperator = 7;</code>
       */
      public Builder setSimOperatorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000040;
        simOperator_ = value;
        onChanged();
        return this;
      }

      // optional string roaming = 8;
      private java.lang.Object roaming_ = "";
      /**
       * <code>optional string roaming = 8;</code>
       */
      public boolean hasRoaming() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <code>optional string roaming = 8;</code>
       */
      public java.lang.String getRoaming() {
        java.lang.Object ref = roaming_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          roaming_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string roaming = 8;</code>
       */
      public com.google.protobuf.ByteString
          getRoamingBytes() {
        java.lang.Object ref = roaming_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          roaming_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string roaming = 8;</code>
       */
      public Builder setRoaming(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        roaming_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string roaming = 8;</code>
       */
      public Builder clearRoaming() {
        bitField0_ = (bitField0_ & ~0x00000080);
        roaming_ = getDefaultInstance().getRoaming();
        onChanged();
        return this;
      }
      /**
       * <code>optional string roaming = 8;</code>
       */
      public Builder setRoamingBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        roaming_ = value;
        onChanged();
        return this;
      }

      // optional int32 userNumber = 9;
      private int userNumber_ ;
      /**
       * <code>optional int32 userNumber = 9;</code>
       */
      public boolean hasUserNumber() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <code>optional int32 userNumber = 9;</code>
       */
      public int getUserNumber() {
        return userNumber_;
      }
      /**
       * <code>optional int32 userNumber = 9;</code>
       */
      public Builder setUserNumber(int value) {
        bitField0_ |= 0x00000100;
        userNumber_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 userNumber = 9;</code>
       */
      public Builder clearUserNumber() {
        bitField0_ = (bitField0_ & ~0x00000100);
        userNumber_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:AndroidCheckinProto)
    }

    static {
      defaultInstance = new AndroidCheckinProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:AndroidCheckinProto)
  }

  public interface AndroidEventProtoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string tag = 1;
    /**
     * <code>optional string tag = 1;</code>
     */
    boolean hasTag();
    /**
     * <code>optional string tag = 1;</code>
     */
    java.lang.String getTag();
    /**
     * <code>optional string tag = 1;</code>
     */
    com.google.protobuf.ByteString
        getTagBytes();

    // optional string value = 2;
    /**
     * <code>optional string value = 2;</code>
     */
    boolean hasValue();
    /**
     * <code>optional string value = 2;</code>
     */
    java.lang.String getValue();
    /**
     * <code>optional string value = 2;</code>
     */
    com.google.protobuf.ByteString
        getValueBytes();

    // optional int64 timeMsec = 3;
    /**
     * <code>optional int64 timeMsec = 3;</code>
     */
    boolean hasTimeMsec();
    /**
     * <code>optional int64 timeMsec = 3;</code>
     */
    long getTimeMsec();
  }
  /**
   * Protobuf type {@code AndroidEventProto}
   */
  public static final class AndroidEventProto extends
      com.google.protobuf.GeneratedMessage
      implements AndroidEventProtoOrBuilder {
    // Use AndroidEventProto.newBuilder() to construct.
    private AndroidEventProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AndroidEventProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AndroidEventProto defaultInstance;
    public static AndroidEventProto getDefaultInstance() {
      return defaultInstance;
    }

    public AndroidEventProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AndroidEventProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              tag_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              value_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              timeMsec_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidEventProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidEventProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.Builder.class);
    }

    public static com.google.protobuf.Parser<AndroidEventProto> PARSER =
        new com.google.protobuf.AbstractParser<AndroidEventProto>() {
      public AndroidEventProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AndroidEventProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AndroidEventProto> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string tag = 1;
    public static final int TAG_FIELD_NUMBER = 1;
    private java.lang.Object tag_;
    /**
     * <code>optional string tag = 1;</code>
     */
    public boolean hasTag() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string tag = 1;</code>
     */
    public java.lang.String getTag() {
      java.lang.Object ref = tag_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          tag_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string tag = 1;</code>
     */
    public com.google.protobuf.ByteString
        getTagBytes() {
      java.lang.Object ref = tag_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        tag_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string value = 2;
    public static final int VALUE_FIELD_NUMBER = 2;
    private java.lang.Object value_;
    /**
     * <code>optional string value = 2;</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string value = 2;</code>
     */
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          value_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string value = 2;</code>
     */
    public com.google.protobuf.ByteString
        getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        value_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int64 timeMsec = 3;
    public static final int TIMEMSEC_FIELD_NUMBER = 3;
    private long timeMsec_;
    /**
     * <code>optional int64 timeMsec = 3;</code>
     */
    public boolean hasTimeMsec() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 timeMsec = 3;</code>
     */
    public long getTimeMsec() {
      return timeMsec_;
    }

    private void initFields() {
      tag_ = "";
      value_ = "";
      timeMsec_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getTagBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getValueBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, timeMsec_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getTagBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getValueBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, timeMsec_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AndroidEventProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidEventProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidEventProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        tag_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        value_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        timeMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidEventProto_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto result = new com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.tag_ = tag_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.value_ = value_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.timeMsec_ = timeMsec_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto.getDefaultInstance()) return this;
        if (other.hasTag()) {
          bitField0_ |= 0x00000001;
          tag_ = other.tag_;
          onChanged();
        }
        if (other.hasValue()) {
          bitField0_ |= 0x00000002;
          value_ = other.value_;
          onChanged();
        }
        if (other.hasTimeMsec()) {
          setTimeMsec(other.getTimeMsec());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.AndroidEventProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string tag = 1;
      private java.lang.Object tag_ = "";
      /**
       * <code>optional string tag = 1;</code>
       */
      public boolean hasTag() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string tag = 1;</code>
       */
      public java.lang.String getTag() {
        java.lang.Object ref = tag_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          tag_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string tag = 1;</code>
       */
      public com.google.protobuf.ByteString
          getTagBytes() {
        java.lang.Object ref = tag_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          tag_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string tag = 1;</code>
       */
      public Builder setTag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        tag_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string tag = 1;</code>
       */
      public Builder clearTag() {
        bitField0_ = (bitField0_ & ~0x00000001);
        tag_ = getDefaultInstance().getTag();
        onChanged();
        return this;
      }
      /**
       * <code>optional string tag = 1;</code>
       */
      public Builder setTagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        tag_ = value;
        onChanged();
        return this;
      }

      // optional string value = 2;
      private java.lang.Object value_ = "";
      /**
       * <code>optional string value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          value_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder setValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }

      // optional int64 timeMsec = 3;
      private long timeMsec_ ;
      /**
       * <code>optional int64 timeMsec = 3;</code>
       */
      public boolean hasTimeMsec() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 timeMsec = 3;</code>
       */
      public long getTimeMsec() {
        return timeMsec_;
      }
      /**
       * <code>optional int64 timeMsec = 3;</code>
       */
      public Builder setTimeMsec(long value) {
        bitField0_ |= 0x00000004;
        timeMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 timeMsec = 3;</code>
       */
      public Builder clearTimeMsec() {
        bitField0_ = (bitField0_ & ~0x00000004);
        timeMsec_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:AndroidEventProto)
    }

    static {
      defaultInstance = new AndroidEventProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:AndroidEventProto)
  }

  public interface AndroidIntentProtoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string action = 1;
    /**
     * <code>optional string action = 1;</code>
     */
    boolean hasAction();
    /**
     * <code>optional string action = 1;</code>
     */
    java.lang.String getAction();
    /**
     * <code>optional string action = 1;</code>
     */
    com.google.protobuf.ByteString
        getActionBytes();

    // optional string dataUri = 2;
    /**
     * <code>optional string dataUri = 2;</code>
     */
    boolean hasDataUri();
    /**
     * <code>optional string dataUri = 2;</code>
     */
    java.lang.String getDataUri();
    /**
     * <code>optional string dataUri = 2;</code>
     */
    com.google.protobuf.ByteString
        getDataUriBytes();

    // optional string mimeType = 3;
    /**
     * <code>optional string mimeType = 3;</code>
     */
    boolean hasMimeType();
    /**
     * <code>optional string mimeType = 3;</code>
     */
    java.lang.String getMimeType();
    /**
     * <code>optional string mimeType = 3;</code>
     */
    com.google.protobuf.ByteString
        getMimeTypeBytes();

    // optional string javaClass = 4;
    /**
     * <code>optional string javaClass = 4;</code>
     */
    boolean hasJavaClass();
    /**
     * <code>optional string javaClass = 4;</code>
     */
    java.lang.String getJavaClass();
    /**
     * <code>optional string javaClass = 4;</code>
     */
    com.google.protobuf.ByteString
        getJavaClassBytes();

    // repeated group Extra = 5 {
    /**
     * <code>repeated group Extra = 5 { ... }</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra> 
        getExtraList();
    /**
     * <code>repeated group Extra = 5 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra getExtra(int index);
    /**
     * <code>repeated group Extra = 5 { ... }</code>
     */
    int getExtraCount();
    /**
     * <code>repeated group Extra = 5 { ... }</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.ExtraOrBuilder> 
        getExtraOrBuilderList();
    /**
     * <code>repeated group Extra = 5 { ... }</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.ExtraOrBuilder getExtraOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code AndroidIntentProto}
   */
  public static final class AndroidIntentProto extends
      com.google.protobuf.GeneratedMessage
      implements AndroidIntentProtoOrBuilder {
    // Use AndroidIntentProto.newBuilder() to construct.
    private AndroidIntentProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AndroidIntentProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AndroidIntentProto defaultInstance;
    public static AndroidIntentProto getDefaultInstance() {
      return defaultInstance;
    }

    public AndroidIntentProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AndroidIntentProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              action_ = input.readBytes();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              dataUri_ = input.readBytes();
              break;
            }
            case 26: {
              bitField0_ |= 0x00000004;
              mimeType_ = input.readBytes();
              break;
            }
            case 34: {
              bitField0_ |= 0x00000008;
              javaClass_ = input.readBytes();
              break;
            }
            case 43: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                extra_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra>();
                mutable_bitField0_ |= 0x00000010;
              }
              extra_.add(input.readGroup(5, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.PARSER,
                  extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          extra_ = java.util.Collections.unmodifiableList(extra_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidIntentProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidIntentProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Builder.class);
    }

    public static com.google.protobuf.Parser<AndroidIntentProto> PARSER =
        new com.google.protobuf.AbstractParser<AndroidIntentProto>() {
      public AndroidIntentProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AndroidIntentProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AndroidIntentProto> getParserForType() {
      return PARSER;
    }

    public interface ExtraOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

      // optional string name = 6;
      /**
       * <code>optional string name = 6;</code>
       */
      boolean hasName();
      /**
       * <code>optional string name = 6;</code>
       */
      java.lang.String getName();
      /**
       * <code>optional string name = 6;</code>
       */
      com.google.protobuf.ByteString
          getNameBytes();

      // optional string value = 7;
      /**
       * <code>optional string value = 7;</code>
       */
      boolean hasValue();
      /**
       * <code>optional string value = 7;</code>
       */
      java.lang.String getValue();
      /**
       * <code>optional string value = 7;</code>
       */
      com.google.protobuf.ByteString
          getValueBytes();
    }
    /**
     * Protobuf type {@code AndroidIntentProto.Extra}
     */
    public static final class Extra extends
        com.google.protobuf.GeneratedMessage
        implements ExtraOrBuilder {
      // Use Extra.newBuilder() to construct.
      private Extra(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
        super(builder);
        this.unknownFields = builder.getUnknownFields();
      }
      private Extra(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

      private static final Extra defaultInstance;
      public static Extra getDefaultInstance() {
        return defaultInstance;
      }

      public Extra getDefaultInstanceForType() {
        return defaultInstance;
      }

      private final com.google.protobuf.UnknownFieldSet unknownFields;
      @java.lang.Override
      public final com.google.protobuf.UnknownFieldSet
          getUnknownFields() {
        return this.unknownFields;
      }
      private Extra(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        initFields();
        int mutable_bitField0_ = 0;
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
            com.google.protobuf.UnknownFieldSet.newBuilder();
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              default: {
                if (!parseUnknownField(input, unknownFields,
                                       extensionRegistry, tag)) {
                  done = true;
                }
                break;
              }
              case 50: {
                bitField0_ |= 0x00000001;
                name_ = input.readBytes();
                break;
              }
              case 58: {
                bitField0_ |= 0x00000002;
                value_ = input.readBytes();
                break;
              }
            }
          }
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(this);
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(
              e.getMessage()).setUnfinishedMessage(this);
        } finally {
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidIntentProto_Extra_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidIntentProto_Extra_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.Builder.class);
      }

      public static com.google.protobuf.Parser<Extra> PARSER =
          new com.google.protobuf.AbstractParser<Extra>() {
        public Extra parsePartialFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws com.google.protobuf.InvalidProtocolBufferException {
          return new Extra(input, extensionRegistry);
        }
      };

      @java.lang.Override
      public com.google.protobuf.Parser<Extra> getParserForType() {
        return PARSER;
      }

      private int bitField0_;
      // optional string name = 6;
      public static final int NAME_FIELD_NUMBER = 6;
      private java.lang.Object name_;
      /**
       * <code>optional string name = 6;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string name = 6;</code>
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            name_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string name = 6;</code>
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      // optional string value = 7;
      public static final int VALUE_FIELD_NUMBER = 7;
      private java.lang.Object value_;
      /**
       * <code>optional string value = 7;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string value = 7;</code>
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        if (ref instanceof java.lang.String) {
          return (java.lang.String) ref;
        } else {
          com.google.protobuf.ByteString bs = 
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          if (bs.isValidUtf8()) {
            value_ = s;
          }
          return s;
        }
      }
      /**
       * <code>optional string value = 7;</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      private void initFields() {
        name_ = "";
        value_ = "";
      }
      private byte memoizedIsInitialized = -1;
      public final boolean isInitialized() {
        byte isInitialized = memoizedIsInitialized;
        if (isInitialized != -1) return isInitialized == 1;

        memoizedIsInitialized = 1;
        return true;
      }

      public void writeTo(com.google.protobuf.CodedOutputStream output)
                          throws java.io.IOException {
        getSerializedSize();
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeBytes(6, getNameBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          output.writeBytes(7, getValueBytes());
        }
        getUnknownFields().writeTo(output);
      }

      private int memoizedSerializedSize = -1;
      public int getSerializedSize() {
        int size = memoizedSerializedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(6, getNameBytes());
        }
        if (((bitField0_ & 0x00000002) == 0x00000002)) {
          size += com.google.protobuf.CodedOutputStream
            .computeBytesSize(7, getValueBytes());
        }
        size += getUnknownFields().getSerializedSize();
        memoizedSerializedSize = size;
        return size;
      }

      private static final long serialVersionUID = 0L;
      @java.lang.Override
      protected java.lang.Object writeReplace()
          throws java.io.ObjectStreamException {
        return super.writeReplace();
      }

      public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra parseFrom(
          com.google.protobuf.ByteString data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra parseFrom(
          byte[] data,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra parseFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra parseFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra parseDelimitedFrom(java.io.InputStream input)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra parseDelimitedFrom(
          java.io.InputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseDelimitedFrom(input, extensionRegistry);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra parseFrom(
          com.google.protobuf.CodedInputStream input)
          throws java.io.IOException {
        return PARSER.parseFrom(input);
      }
      public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra parseFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        return PARSER.parseFrom(input, extensionRegistry);
      }

      public static Builder newBuilder() { return Builder.create(); }
      public Builder newBuilderForType() { return newBuilder(); }
      public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra prototype) {
        return newBuilder().mergeFrom(prototype);
      }
      public Builder toBuilder() { return newBuilder(this); }

      @java.lang.Override
      protected Builder newBuilderForType(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        Builder builder = new Builder(parent);
        return builder;
      }
      /**
       * Protobuf type {@code AndroidIntentProto.Extra}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessage.Builder<Builder>
         implements com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.ExtraOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidIntentProto_Extra_descriptor;
        }

        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidIntentProto_Extra_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.Builder.class);
        }

        // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.newBuilder()
        private Builder() {
          maybeForceBuilderInitialization();
        }

        private Builder(
            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
          super(parent);
          maybeForceBuilderInitialization();
        }
        private void maybeForceBuilderInitialization() {
          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          }
        }
        private static Builder create() {
          return new Builder();
        }

        public Builder clear() {
          super.clear();
          name_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          value_ = "";
          bitField0_ = (bitField0_ & ~0x00000002);
          return this;
        }

        public Builder clone() {
          return create().mergeFrom(buildPartial());
        }

        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidIntentProto_Extra_descriptor;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra getDefaultInstanceForType() {
          return com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.getDefaultInstance();
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra build() {
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra buildPartial() {
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra result = new com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.name_ = name_;
          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
            to_bitField0_ |= 0x00000002;
          }
          result.value_ = value_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra) {
            return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra other) {
          if (other == com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.getDefaultInstance()) return this;
          if (other.hasName()) {
            bitField0_ |= 0x00000001;
            name_ = other.name_;
            onChanged();
          }
          if (other.hasValue()) {
            bitField0_ |= 0x00000002;
            value_ = other.value_;
            onChanged();
          }
          this.mergeUnknownFields(other.getUnknownFields());
          return this;
        }

        public final boolean isInitialized() {
          return true;
        }

        public Builder mergeFrom(
            com.google.protobuf.CodedInputStream input,
            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
            throws java.io.IOException {
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra) e.getUnfinishedMessage();
            throw e;
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        // optional string name = 6;
        private java.lang.Object name_ = "";
        /**
         * <code>optional string name = 6;</code>
         */
        public boolean hasName() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <code>optional string name = 6;</code>
         */
        public java.lang.String getName() {
          java.lang.Object ref = name_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            name_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string name = 6;</code>
         */
        public com.google.protobuf.ByteString
            getNameBytes() {
          java.lang.Object ref = name_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            name_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string name = 6;</code>
         */
        public Builder setName(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          name_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string name = 6;</code>
         */
        public Builder clearName() {
          bitField0_ = (bitField0_ & ~0x00000001);
          name_ = getDefaultInstance().getName();
          onChanged();
          return this;
        }
        /**
         * <code>optional string name = 6;</code>
         */
        public Builder setNameBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          name_ = value;
          onChanged();
          return this;
        }

        // optional string value = 7;
        private java.lang.Object value_ = "";
        /**
         * <code>optional string value = 7;</code>
         */
        public boolean hasValue() {
          return ((bitField0_ & 0x00000002) == 0x00000002);
        }
        /**
         * <code>optional string value = 7;</code>
         */
        public java.lang.String getValue() {
          java.lang.Object ref = value_;
          if (!(ref instanceof java.lang.String)) {
            java.lang.String s = ((com.google.protobuf.ByteString) ref)
                .toStringUtf8();
            value_ = s;
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <code>optional string value = 7;</code>
         */
        public com.google.protobuf.ByteString
            getValueBytes() {
          java.lang.Object ref = value_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            value_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <code>optional string value = 7;</code>
         */
        public Builder setValue(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          value_ = value;
          onChanged();
          return this;
        }
        /**
         * <code>optional string value = 7;</code>
         */
        public Builder clearValue() {
          bitField0_ = (bitField0_ & ~0x00000002);
          value_ = getDefaultInstance().getValue();
          onChanged();
          return this;
        }
        /**
         * <code>optional string value = 7;</code>
         */
        public Builder setValueBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
          value_ = value;
          onChanged();
          return this;
        }

        // @@protoc_insertion_point(builder_scope:AndroidIntentProto.Extra)
      }

      static {
        defaultInstance = new Extra(true);
        defaultInstance.initFields();
      }

      // @@protoc_insertion_point(class_scope:AndroidIntentProto.Extra)
    }

    private int bitField0_;
    // optional string action = 1;
    public static final int ACTION_FIELD_NUMBER = 1;
    private java.lang.Object action_;
    /**
     * <code>optional string action = 1;</code>
     */
    public boolean hasAction() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string action = 1;</code>
     */
    public java.lang.String getAction() {
      java.lang.Object ref = action_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          action_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string action = 1;</code>
     */
    public com.google.protobuf.ByteString
        getActionBytes() {
      java.lang.Object ref = action_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        action_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string dataUri = 2;
    public static final int DATAURI_FIELD_NUMBER = 2;
    private java.lang.Object dataUri_;
    /**
     * <code>optional string dataUri = 2;</code>
     */
    public boolean hasDataUri() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string dataUri = 2;</code>
     */
    public java.lang.String getDataUri() {
      java.lang.Object ref = dataUri_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          dataUri_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string dataUri = 2;</code>
     */
    public com.google.protobuf.ByteString
        getDataUriBytes() {
      java.lang.Object ref = dataUri_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        dataUri_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string mimeType = 3;
    public static final int MIMETYPE_FIELD_NUMBER = 3;
    private java.lang.Object mimeType_;
    /**
     * <code>optional string mimeType = 3;</code>
     */
    public boolean hasMimeType() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional string mimeType = 3;</code>
     */
    public java.lang.String getMimeType() {
      java.lang.Object ref = mimeType_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          mimeType_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string mimeType = 3;</code>
     */
    public com.google.protobuf.ByteString
        getMimeTypeBytes() {
      java.lang.Object ref = mimeType_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        mimeType_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional string javaClass = 4;
    public static final int JAVACLASS_FIELD_NUMBER = 4;
    private java.lang.Object javaClass_;
    /**
     * <code>optional string javaClass = 4;</code>
     */
    public boolean hasJavaClass() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional string javaClass = 4;</code>
     */
    public java.lang.String getJavaClass() {
      java.lang.Object ref = javaClass_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          javaClass_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string javaClass = 4;</code>
     */
    public com.google.protobuf.ByteString
        getJavaClassBytes() {
      java.lang.Object ref = javaClass_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        javaClass_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated group Extra = 5 {
    public static final int EXTRA_FIELD_NUMBER = 5;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra> extra_;
    /**
     * <code>repeated group Extra = 5 { ... }</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra> getExtraList() {
      return extra_;
    }
    /**
     * <code>repeated group Extra = 5 { ... }</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.ExtraOrBuilder> 
        getExtraOrBuilderList() {
      return extra_;
    }
    /**
     * <code>repeated group Extra = 5 { ... }</code>
     */
    public int getExtraCount() {
      return extra_.size();
    }
    /**
     * <code>repeated group Extra = 5 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra getExtra(int index) {
      return extra_.get(index);
    }
    /**
     * <code>repeated group Extra = 5 { ... }</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.ExtraOrBuilder getExtraOrBuilder(
        int index) {
      return extra_.get(index);
    }

    private void initFields() {
      action_ = "";
      dataUri_ = "";
      mimeType_ = "";
      javaClass_ = "";
      extra_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getActionBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getDataUriBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeBytes(3, getMimeTypeBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeBytes(4, getJavaClassBytes());
      }
      for (int i = 0; i < extra_.size(); i++) {
        output.writeGroup(5, extra_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getActionBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getDataUriBytes());
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(3, getMimeTypeBytes());
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(4, getJavaClassBytes());
      }
      for (int i = 0; i < extra_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeGroupSize(5, extra_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AndroidIntentProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidIntentProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidIntentProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getExtraFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        action_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        dataUri_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        mimeType_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        javaClass_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        if (extraBuilder_ == null) {
          extra_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          extraBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidIntentProto_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto result = new com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.action_ = action_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.dataUri_ = dataUri_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.mimeType_ = mimeType_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.javaClass_ = javaClass_;
        if (extraBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            extra_ = java.util.Collections.unmodifiableList(extra_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.extra_ = extra_;
        } else {
          result.extra_ = extraBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.getDefaultInstance()) return this;
        if (other.hasAction()) {
          bitField0_ |= 0x00000001;
          action_ = other.action_;
          onChanged();
        }
        if (other.hasDataUri()) {
          bitField0_ |= 0x00000002;
          dataUri_ = other.dataUri_;
          onChanged();
        }
        if (other.hasMimeType()) {
          bitField0_ |= 0x00000004;
          mimeType_ = other.mimeType_;
          onChanged();
        }
        if (other.hasJavaClass()) {
          bitField0_ |= 0x00000008;
          javaClass_ = other.javaClass_;
          onChanged();
        }
        if (extraBuilder_ == null) {
          if (!other.extra_.isEmpty()) {
            if (extra_.isEmpty()) {
              extra_ = other.extra_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureExtraIsMutable();
              extra_.addAll(other.extra_);
            }
            onChanged();
          }
        } else {
          if (!other.extra_.isEmpty()) {
            if (extraBuilder_.isEmpty()) {
              extraBuilder_.dispose();
              extraBuilder_ = null;
              extra_ = other.extra_;
              bitField0_ = (bitField0_ & ~0x00000010);
              extraBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getExtraFieldBuilder() : null;
            } else {
              extraBuilder_.addAllMessages(other.extra_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string action = 1;
      private java.lang.Object action_ = "";
      /**
       * <code>optional string action = 1;</code>
       */
      public boolean hasAction() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string action = 1;</code>
       */
      public java.lang.String getAction() {
        java.lang.Object ref = action_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          action_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string action = 1;</code>
       */
      public com.google.protobuf.ByteString
          getActionBytes() {
        java.lang.Object ref = action_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          action_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string action = 1;</code>
       */
      public Builder setAction(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        action_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string action = 1;</code>
       */
      public Builder clearAction() {
        bitField0_ = (bitField0_ & ~0x00000001);
        action_ = getDefaultInstance().getAction();
        onChanged();
        return this;
      }
      /**
       * <code>optional string action = 1;</code>
       */
      public Builder setActionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        action_ = value;
        onChanged();
        return this;
      }

      // optional string dataUri = 2;
      private java.lang.Object dataUri_ = "";
      /**
       * <code>optional string dataUri = 2;</code>
       */
      public boolean hasDataUri() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string dataUri = 2;</code>
       */
      public java.lang.String getDataUri() {
        java.lang.Object ref = dataUri_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          dataUri_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string dataUri = 2;</code>
       */
      public com.google.protobuf.ByteString
          getDataUriBytes() {
        java.lang.Object ref = dataUri_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          dataUri_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string dataUri = 2;</code>
       */
      public Builder setDataUri(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        dataUri_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string dataUri = 2;</code>
       */
      public Builder clearDataUri() {
        bitField0_ = (bitField0_ & ~0x00000002);
        dataUri_ = getDefaultInstance().getDataUri();
        onChanged();
        return this;
      }
      /**
       * <code>optional string dataUri = 2;</code>
       */
      public Builder setDataUriBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        dataUri_ = value;
        onChanged();
        return this;
      }

      // optional string mimeType = 3;
      private java.lang.Object mimeType_ = "";
      /**
       * <code>optional string mimeType = 3;</code>
       */
      public boolean hasMimeType() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional string mimeType = 3;</code>
       */
      public java.lang.String getMimeType() {
        java.lang.Object ref = mimeType_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          mimeType_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string mimeType = 3;</code>
       */
      public com.google.protobuf.ByteString
          getMimeTypeBytes() {
        java.lang.Object ref = mimeType_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          mimeType_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string mimeType = 3;</code>
       */
      public Builder setMimeType(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        mimeType_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string mimeType = 3;</code>
       */
      public Builder clearMimeType() {
        bitField0_ = (bitField0_ & ~0x00000004);
        mimeType_ = getDefaultInstance().getMimeType();
        onChanged();
        return this;
      }
      /**
       * <code>optional string mimeType = 3;</code>
       */
      public Builder setMimeTypeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        mimeType_ = value;
        onChanged();
        return this;
      }

      // optional string javaClass = 4;
      private java.lang.Object javaClass_ = "";
      /**
       * <code>optional string javaClass = 4;</code>
       */
      public boolean hasJavaClass() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional string javaClass = 4;</code>
       */
      public java.lang.String getJavaClass() {
        java.lang.Object ref = javaClass_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          javaClass_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string javaClass = 4;</code>
       */
      public com.google.protobuf.ByteString
          getJavaClassBytes() {
        java.lang.Object ref = javaClass_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          javaClass_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string javaClass = 4;</code>
       */
      public Builder setJavaClass(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        javaClass_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string javaClass = 4;</code>
       */
      public Builder clearJavaClass() {
        bitField0_ = (bitField0_ & ~0x00000008);
        javaClass_ = getDefaultInstance().getJavaClass();
        onChanged();
        return this;
      }
      /**
       * <code>optional string javaClass = 4;</code>
       */
      public Builder setJavaClassBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        javaClass_ = value;
        onChanged();
        return this;
      }

      // repeated group Extra = 5 {
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra> extra_ =
        java.util.Collections.emptyList();
      private void ensureExtraIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          extra_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra>(extra_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.ExtraOrBuilder> extraBuilder_;

      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra> getExtraList() {
        if (extraBuilder_ == null) {
          return java.util.Collections.unmodifiableList(extra_);
        } else {
          return extraBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public int getExtraCount() {
        if (extraBuilder_ == null) {
          return extra_.size();
        } else {
          return extraBuilder_.getCount();
        }
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra getExtra(int index) {
        if (extraBuilder_ == null) {
          return extra_.get(index);
        } else {
          return extraBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public Builder setExtra(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra value) {
        if (extraBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtraIsMutable();
          extra_.set(index, value);
          onChanged();
        } else {
          extraBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public Builder setExtra(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.Builder builderForValue) {
        if (extraBuilder_ == null) {
          ensureExtraIsMutable();
          extra_.set(index, builderForValue.build());
          onChanged();
        } else {
          extraBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public Builder addExtra(com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra value) {
        if (extraBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtraIsMutable();
          extra_.add(value);
          onChanged();
        } else {
          extraBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public Builder addExtra(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra value) {
        if (extraBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureExtraIsMutable();
          extra_.add(index, value);
          onChanged();
        } else {
          extraBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public Builder addExtra(
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.Builder builderForValue) {
        if (extraBuilder_ == null) {
          ensureExtraIsMutable();
          extra_.add(builderForValue.build());
          onChanged();
        } else {
          extraBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public Builder addExtra(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.Builder builderForValue) {
        if (extraBuilder_ == null) {
          ensureExtraIsMutable();
          extra_.add(index, builderForValue.build());
          onChanged();
        } else {
          extraBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public Builder addAllExtra(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra> values) {
        if (extraBuilder_ == null) {
          ensureExtraIsMutable();
          super.addAll(values, extra_);
          onChanged();
        } else {
          extraBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public Builder clearExtra() {
        if (extraBuilder_ == null) {
          extra_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          extraBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public Builder removeExtra(int index) {
        if (extraBuilder_ == null) {
          ensureExtraIsMutable();
          extra_.remove(index);
          onChanged();
        } else {
          extraBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.Builder getExtraBuilder(
          int index) {
        return getExtraFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.ExtraOrBuilder getExtraOrBuilder(
          int index) {
        if (extraBuilder_ == null) {
          return extra_.get(index);  } else {
          return extraBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.ExtraOrBuilder> 
           getExtraOrBuilderList() {
        if (extraBuilder_ != null) {
          return extraBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(extra_);
        }
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.Builder addExtraBuilder() {
        return getExtraFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.getDefaultInstance());
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.Builder addExtraBuilder(
          int index) {
        return getExtraFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.getDefaultInstance());
      }
      /**
       * <code>repeated group Extra = 5 { ... }</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.Builder> 
           getExtraBuilderList() {
        return getExtraFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.ExtraOrBuilder> 
          getExtraFieldBuilder() {
        if (extraBuilder_ == null) {
          extraBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.Extra.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidIntentProto.ExtraOrBuilder>(
                  extra_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          extra_ = null;
        }
        return extraBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:AndroidIntentProto)
    }

    static {
      defaultInstance = new AndroidIntentProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:AndroidIntentProto)
  }

  public interface AndroidStatisticProtoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string tag = 1;
    /**
     * <code>optional string tag = 1;</code>
     */
    boolean hasTag();
    /**
     * <code>optional string tag = 1;</code>
     */
    java.lang.String getTag();
    /**
     * <code>optional string tag = 1;</code>
     */
    com.google.protobuf.ByteString
        getTagBytes();

    // optional int32 count = 2;
    /**
     * <code>optional int32 count = 2;</code>
     */
    boolean hasCount();
    /**
     * <code>optional int32 count = 2;</code>
     */
    int getCount();

    // optional float sum = 3;
    /**
     * <code>optional float sum = 3;</code>
     */
    boolean hasSum();
    /**
     * <code>optional float sum = 3;</code>
     */
    float getSum();
  }
  /**
   * Protobuf type {@code AndroidStatisticProto}
   */
  public static final class AndroidStatisticProto extends
      com.google.protobuf.GeneratedMessage
      implements AndroidStatisticProtoOrBuilder {
    // Use AndroidStatisticProto.newBuilder() to construct.
    private AndroidStatisticProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AndroidStatisticProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AndroidStatisticProto defaultInstance;
    public static AndroidStatisticProto getDefaultInstance() {
      return defaultInstance;
    }

    public AndroidStatisticProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AndroidStatisticProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              tag_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              count_ = input.readInt32();
              break;
            }
            case 29: {
              bitField0_ |= 0x00000004;
              sum_ = input.readFloat();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidStatisticProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidStatisticProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.Builder.class);
    }

    public static com.google.protobuf.Parser<AndroidStatisticProto> PARSER =
        new com.google.protobuf.AbstractParser<AndroidStatisticProto>() {
      public AndroidStatisticProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AndroidStatisticProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AndroidStatisticProto> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string tag = 1;
    public static final int TAG_FIELD_NUMBER = 1;
    private java.lang.Object tag_;
    /**
     * <code>optional string tag = 1;</code>
     */
    public boolean hasTag() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string tag = 1;</code>
     */
    public java.lang.String getTag() {
      java.lang.Object ref = tag_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          tag_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string tag = 1;</code>
     */
    public com.google.protobuf.ByteString
        getTagBytes() {
      java.lang.Object ref = tag_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        tag_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 count = 2;
    public static final int COUNT_FIELD_NUMBER = 2;
    private int count_;
    /**
     * <code>optional int32 count = 2;</code>
     */
    public boolean hasCount() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 count = 2;</code>
     */
    public int getCount() {
      return count_;
    }

    // optional float sum = 3;
    public static final int SUM_FIELD_NUMBER = 3;
    private float sum_;
    /**
     * <code>optional float sum = 3;</code>
     */
    public boolean hasSum() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional float sum = 3;</code>
     */
    public float getSum() {
      return sum_;
    }

    private void initFields() {
      tag_ = "";
      count_ = 0;
      sum_ = 0F;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getTagBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, count_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeFloat(3, sum_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getTagBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, count_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(3, sum_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AndroidStatisticProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidStatisticProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidStatisticProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        tag_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        count_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        sum_ = 0F;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidStatisticProto_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto result = new com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.tag_ = tag_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.count_ = count_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.sum_ = sum_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto.getDefaultInstance()) return this;
        if (other.hasTag()) {
          bitField0_ |= 0x00000001;
          tag_ = other.tag_;
          onChanged();
        }
        if (other.hasCount()) {
          setCount(other.getCount());
        }
        if (other.hasSum()) {
          setSum(other.getSum());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.AndroidStatisticProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string tag = 1;
      private java.lang.Object tag_ = "";
      /**
       * <code>optional string tag = 1;</code>
       */
      public boolean hasTag() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string tag = 1;</code>
       */
      public java.lang.String getTag() {
        java.lang.Object ref = tag_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          tag_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string tag = 1;</code>
       */
      public com.google.protobuf.ByteString
          getTagBytes() {
        java.lang.Object ref = tag_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          tag_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string tag = 1;</code>
       */
      public Builder setTag(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        tag_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string tag = 1;</code>
       */
      public Builder clearTag() {
        bitField0_ = (bitField0_ & ~0x00000001);
        tag_ = getDefaultInstance().getTag();
        onChanged();
        return this;
      }
      /**
       * <code>optional string tag = 1;</code>
       */
      public Builder setTagBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        tag_ = value;
        onChanged();
        return this;
      }

      // optional int32 count = 2;
      private int count_ ;
      /**
       * <code>optional int32 count = 2;</code>
       */
      public boolean hasCount() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 count = 2;</code>
       */
      public int getCount() {
        return count_;
      }
      /**
       * <code>optional int32 count = 2;</code>
       */
      public Builder setCount(int value) {
        bitField0_ |= 0x00000002;
        count_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 count = 2;</code>
       */
      public Builder clearCount() {
        bitField0_ = (bitField0_ & ~0x00000002);
        count_ = 0;
        onChanged();
        return this;
      }

      // optional float sum = 3;
      private float sum_ ;
      /**
       * <code>optional float sum = 3;</code>
       */
      public boolean hasSum() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional float sum = 3;</code>
       */
      public float getSum() {
        return sum_;
      }
      /**
       * <code>optional float sum = 3;</code>
       */
      public Builder setSum(float value) {
        bitField0_ |= 0x00000004;
        sum_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional float sum = 3;</code>
       */
      public Builder clearSum() {
        bitField0_ = (bitField0_ & ~0x00000004);
        sum_ = 0F;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:AndroidStatisticProto)
    }

    static {
      defaultInstance = new AndroidStatisticProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:AndroidStatisticProto)
  }

  public interface ClientLibraryStateOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 corpus = 1;
    /**
     * <code>optional int32 corpus = 1;</code>
     */
    boolean hasCorpus();
    /**
     * <code>optional int32 corpus = 1;</code>
     */
    int getCorpus();

    // optional bytes serverToken = 2;
    /**
     * <code>optional bytes serverToken = 2;</code>
     */
    boolean hasServerToken();
    /**
     * <code>optional bytes serverToken = 2;</code>
     */
    com.google.protobuf.ByteString getServerToken();

    // optional int64 hashCodeSum = 3;
    /**
     * <code>optional int64 hashCodeSum = 3;</code>
     */
    boolean hasHashCodeSum();
    /**
     * <code>optional int64 hashCodeSum = 3;</code>
     */
    long getHashCodeSum();

    // optional int32 librarySize = 4;
    /**
     * <code>optional int32 librarySize = 4;</code>
     */
    boolean hasLibrarySize();
    /**
     * <code>optional int32 librarySize = 4;</code>
     */
    int getLibrarySize();

    // optional string libraryId = 5;
    /**
     * <code>optional string libraryId = 5;</code>
     */
    boolean hasLibraryId();
    /**
     * <code>optional string libraryId = 5;</code>
     */
    java.lang.String getLibraryId();
    /**
     * <code>optional string libraryId = 5;</code>
     */
    com.google.protobuf.ByteString
        getLibraryIdBytes();
  }
  /**
   * Protobuf type {@code ClientLibraryState}
   */
  public static final class ClientLibraryState extends
      com.google.protobuf.GeneratedMessage
      implements ClientLibraryStateOrBuilder {
    // Use ClientLibraryState.newBuilder() to construct.
    private ClientLibraryState(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private ClientLibraryState(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final ClientLibraryState defaultInstance;
    public static ClientLibraryState getDefaultInstance() {
      return defaultInstance;
    }

    public ClientLibraryState getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private ClientLibraryState(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              corpus_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              serverToken_ = input.readBytes();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              hashCodeSum_ = input.readInt64();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              librarySize_ = input.readInt32();
              break;
            }
            case 42: {
              bitField0_ |= 0x00000010;
              libraryId_ = input.readBytes();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ClientLibraryState_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ClientLibraryState_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState.class, com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState.Builder.class);
    }

    public static com.google.protobuf.Parser<ClientLibraryState> PARSER =
        new com.google.protobuf.AbstractParser<ClientLibraryState>() {
      public ClientLibraryState parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ClientLibraryState(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<ClientLibraryState> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 corpus = 1;
    public static final int CORPUS_FIELD_NUMBER = 1;
    private int corpus_;
    /**
     * <code>optional int32 corpus = 1;</code>
     */
    public boolean hasCorpus() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 corpus = 1;</code>
     */
    public int getCorpus() {
      return corpus_;
    }

    // optional bytes serverToken = 2;
    public static final int SERVERTOKEN_FIELD_NUMBER = 2;
    private com.google.protobuf.ByteString serverToken_;
    /**
     * <code>optional bytes serverToken = 2;</code>
     */
    public boolean hasServerToken() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional bytes serverToken = 2;</code>
     */
    public com.google.protobuf.ByteString getServerToken() {
      return serverToken_;
    }

    // optional int64 hashCodeSum = 3;
    public static final int HASHCODESUM_FIELD_NUMBER = 3;
    private long hashCodeSum_;
    /**
     * <code>optional int64 hashCodeSum = 3;</code>
     */
    public boolean hasHashCodeSum() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 hashCodeSum = 3;</code>
     */
    public long getHashCodeSum() {
      return hashCodeSum_;
    }

    // optional int32 librarySize = 4;
    public static final int LIBRARYSIZE_FIELD_NUMBER = 4;
    private int librarySize_;
    /**
     * <code>optional int32 librarySize = 4;</code>
     */
    public boolean hasLibrarySize() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int32 librarySize = 4;</code>
     */
    public int getLibrarySize() {
      return librarySize_;
    }

    // optional string libraryId = 5;
    public static final int LIBRARYID_FIELD_NUMBER = 5;
    private java.lang.Object libraryId_;
    /**
     * <code>optional string libraryId = 5;</code>
     */
    public boolean hasLibraryId() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <code>optional string libraryId = 5;</code>
     */
    public java.lang.String getLibraryId() {
      java.lang.Object ref = libraryId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          libraryId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string libraryId = 5;</code>
     */
    public com.google.protobuf.ByteString
        getLibraryIdBytes() {
      java.lang.Object ref = libraryId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        libraryId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    private void initFields() {
      corpus_ = 0;
      serverToken_ = com.google.protobuf.ByteString.EMPTY;
      hashCodeSum_ = 0L;
      librarySize_ = 0;
      libraryId_ = "";
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, corpus_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, serverToken_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, hashCodeSum_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, librarySize_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeBytes(5, getLibraryIdBytes());
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, corpus_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, serverToken_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, hashCodeSum_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, librarySize_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getLibraryIdBytes());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code ClientLibraryState}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryStateOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ClientLibraryState_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ClientLibraryState_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState.class, com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        corpus_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        serverToken_ = com.google.protobuf.ByteString.EMPTY;
        bitField0_ = (bitField0_ & ~0x00000002);
        hashCodeSum_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        librarySize_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        libraryId_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_ClientLibraryState_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState build() {
        com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState result = new com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.corpus_ = corpus_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.serverToken_ = serverToken_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.hashCodeSum_ = hashCodeSum_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.librarySize_ = librarySize_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.libraryId_ = libraryId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState.getDefaultInstance()) return this;
        if (other.hasCorpus()) {
          setCorpus(other.getCorpus());
        }
        if (other.hasServerToken()) {
          setServerToken(other.getServerToken());
        }
        if (other.hasHashCodeSum()) {
          setHashCodeSum(other.getHashCodeSum());
        }
        if (other.hasLibrarySize()) {
          setLibrarySize(other.getLibrarySize());
        }
        if (other.hasLibraryId()) {
          bitField0_ |= 0x00000010;
          libraryId_ = other.libraryId_;
          onChanged();
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.ClientLibraryState) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 corpus = 1;
      private int corpus_ ;
      /**
       * <code>optional int32 corpus = 1;</code>
       */
      public boolean hasCorpus() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 corpus = 1;</code>
       */
      public int getCorpus() {
        return corpus_;
      }
      /**
       * <code>optional int32 corpus = 1;</code>
       */
      public Builder setCorpus(int value) {
        bitField0_ |= 0x00000001;
        corpus_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 corpus = 1;</code>
       */
      public Builder clearCorpus() {
        bitField0_ = (bitField0_ & ~0x00000001);
        corpus_ = 0;
        onChanged();
        return this;
      }

      // optional bytes serverToken = 2;
      private com.google.protobuf.ByteString serverToken_ = com.google.protobuf.ByteString.EMPTY;
      /**
       * <code>optional bytes serverToken = 2;</code>
       */
      public boolean hasServerToken() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional bytes serverToken = 2;</code>
       */
      public com.google.protobuf.ByteString getServerToken() {
        return serverToken_;
      }
      /**
       * <code>optional bytes serverToken = 2;</code>
       */
      public Builder setServerToken(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        serverToken_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional bytes serverToken = 2;</code>
       */
      public Builder clearServerToken() {
        bitField0_ = (bitField0_ & ~0x00000002);
        serverToken_ = getDefaultInstance().getServerToken();
        onChanged();
        return this;
      }

      // optional int64 hashCodeSum = 3;
      private long hashCodeSum_ ;
      /**
       * <code>optional int64 hashCodeSum = 3;</code>
       */
      public boolean hasHashCodeSum() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional int64 hashCodeSum = 3;</code>
       */
      public long getHashCodeSum() {
        return hashCodeSum_;
      }
      /**
       * <code>optional int64 hashCodeSum = 3;</code>
       */
      public Builder setHashCodeSum(long value) {
        bitField0_ |= 0x00000004;
        hashCodeSum_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 hashCodeSum = 3;</code>
       */
      public Builder clearHashCodeSum() {
        bitField0_ = (bitField0_ & ~0x00000004);
        hashCodeSum_ = 0L;
        onChanged();
        return this;
      }

      // optional int32 librarySize = 4;
      private int librarySize_ ;
      /**
       * <code>optional int32 librarySize = 4;</code>
       */
      public boolean hasLibrarySize() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int32 librarySize = 4;</code>
       */
      public int getLibrarySize() {
        return librarySize_;
      }
      /**
       * <code>optional int32 librarySize = 4;</code>
       */
      public Builder setLibrarySize(int value) {
        bitField0_ |= 0x00000008;
        librarySize_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 librarySize = 4;</code>
       */
      public Builder clearLibrarySize() {
        bitField0_ = (bitField0_ & ~0x00000008);
        librarySize_ = 0;
        onChanged();
        return this;
      }

      // optional string libraryId = 5;
      private java.lang.Object libraryId_ = "";
      /**
       * <code>optional string libraryId = 5;</code>
       */
      public boolean hasLibraryId() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <code>optional string libraryId = 5;</code>
       */
      public java.lang.String getLibraryId() {
        java.lang.Object ref = libraryId_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          libraryId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string libraryId = 5;</code>
       */
      public com.google.protobuf.ByteString
          getLibraryIdBytes() {
        java.lang.Object ref = libraryId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          libraryId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string libraryId = 5;</code>
       */
      public Builder setLibraryId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        libraryId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string libraryId = 5;</code>
       */
      public Builder clearLibraryId() {
        bitField0_ = (bitField0_ & ~0x00000010);
        libraryId_ = getDefaultInstance().getLibraryId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string libraryId = 5;</code>
       */
      public Builder setLibraryIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        libraryId_ = value;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:ClientLibraryState)
    }

    static {
      defaultInstance = new ClientLibraryState(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:ClientLibraryState)
  }

  public interface AndroidDataUsageProtoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 version = 1;
    /**
     * <code>optional int32 version = 1;</code>
     */
    boolean hasVersion();
    /**
     * <code>optional int32 version = 1;</code>
     */
    int getVersion();

    // optional int64 currentReportMsec = 2;
    /**
     * <code>optional int64 currentReportMsec = 2;</code>
     */
    boolean hasCurrentReportMsec();
    /**
     * <code>optional int64 currentReportMsec = 2;</code>
     */
    long getCurrentReportMsec();

    // repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;
    /**
     * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping> 
        getKeyToPackageNameMappingList();
    /**
     * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping getKeyToPackageNameMapping(int index);
    /**
     * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
     */
    int getKeyToPackageNameMappingCount();
    /**
     * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMappingOrBuilder> 
        getKeyToPackageNameMappingOrBuilderList();
    /**
     * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMappingOrBuilder getKeyToPackageNameMappingOrBuilder(
        int index);

    // repeated .PayloadLevelAppStat payloadLevelAppStat = 4;
    /**
     * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat> 
        getPayloadLevelAppStatList();
    /**
     * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat getPayloadLevelAppStat(int index);
    /**
     * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
     */
    int getPayloadLevelAppStatCount();
    /**
     * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStatOrBuilder> 
        getPayloadLevelAppStatOrBuilderList();
    /**
     * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStatOrBuilder getPayloadLevelAppStatOrBuilder(
        int index);

    // repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;
    /**
     * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat> 
        getIpLayerNetworkStatList();
    /**
     * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat getIpLayerNetworkStat(int index);
    /**
     * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
     */
    int getIpLayerNetworkStatCount();
    /**
     * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStatOrBuilder> 
        getIpLayerNetworkStatOrBuilderList();
    /**
     * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStatOrBuilder getIpLayerNetworkStatOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code AndroidDataUsageProto}
   */
  public static final class AndroidDataUsageProto extends
      com.google.protobuf.GeneratedMessage
      implements AndroidDataUsageProtoOrBuilder {
    // Use AndroidDataUsageProto.newBuilder() to construct.
    private AndroidDataUsageProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AndroidDataUsageProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AndroidDataUsageProto defaultInstance;
    public static AndroidDataUsageProto getDefaultInstance() {
      return defaultInstance;
    }

    public AndroidDataUsageProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AndroidDataUsageProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              version_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              currentReportMsec_ = input.readInt64();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                keyToPackageNameMapping_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping>();
                mutable_bitField0_ |= 0x00000004;
              }
              keyToPackageNameMapping_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.PARSER, extensionRegistry));
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                payloadLevelAppStat_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat>();
                mutable_bitField0_ |= 0x00000008;
              }
              payloadLevelAppStat_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.PARSER, extensionRegistry));
              break;
            }
            case 42: {
              if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
                ipLayerNetworkStat_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat>();
                mutable_bitField0_ |= 0x00000010;
              }
              ipLayerNetworkStat_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          keyToPackageNameMapping_ = java.util.Collections.unmodifiableList(keyToPackageNameMapping_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          payloadLevelAppStat_ = java.util.Collections.unmodifiableList(payloadLevelAppStat_);
        }
        if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) {
          ipLayerNetworkStat_ = java.util.Collections.unmodifiableList(ipLayerNetworkStat_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidDataUsageProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidDataUsageProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.Builder.class);
    }

    public static com.google.protobuf.Parser<AndroidDataUsageProto> PARSER =
        new com.google.protobuf.AbstractParser<AndroidDataUsageProto>() {
      public AndroidDataUsageProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AndroidDataUsageProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AndroidDataUsageProto> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 version = 1;
    public static final int VERSION_FIELD_NUMBER = 1;
    private int version_;
    /**
     * <code>optional int32 version = 1;</code>
     */
    public boolean hasVersion() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 version = 1;</code>
     */
    public int getVersion() {
      return version_;
    }

    // optional int64 currentReportMsec = 2;
    public static final int CURRENTREPORTMSEC_FIELD_NUMBER = 2;
    private long currentReportMsec_;
    /**
     * <code>optional int64 currentReportMsec = 2;</code>
     */
    public boolean hasCurrentReportMsec() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 currentReportMsec = 2;</code>
     */
    public long getCurrentReportMsec() {
      return currentReportMsec_;
    }

    // repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;
    public static final int KEYTOPACKAGENAMEMAPPING_FIELD_NUMBER = 3;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping> keyToPackageNameMapping_;
    /**
     * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping> getKeyToPackageNameMappingList() {
      return keyToPackageNameMapping_;
    }
    /**
     * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMappingOrBuilder> 
        getKeyToPackageNameMappingOrBuilderList() {
      return keyToPackageNameMapping_;
    }
    /**
     * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
     */
    public int getKeyToPackageNameMappingCount() {
      return keyToPackageNameMapping_.size();
    }
    /**
     * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping getKeyToPackageNameMapping(int index) {
      return keyToPackageNameMapping_.get(index);
    }
    /**
     * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMappingOrBuilder getKeyToPackageNameMappingOrBuilder(
        int index) {
      return keyToPackageNameMapping_.get(index);
    }

    // repeated .PayloadLevelAppStat payloadLevelAppStat = 4;
    public static final int PAYLOADLEVELAPPSTAT_FIELD_NUMBER = 4;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat> payloadLevelAppStat_;
    /**
     * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat> getPayloadLevelAppStatList() {
      return payloadLevelAppStat_;
    }
    /**
     * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStatOrBuilder> 
        getPayloadLevelAppStatOrBuilderList() {
      return payloadLevelAppStat_;
    }
    /**
     * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
     */
    public int getPayloadLevelAppStatCount() {
      return payloadLevelAppStat_.size();
    }
    /**
     * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat getPayloadLevelAppStat(int index) {
      return payloadLevelAppStat_.get(index);
    }
    /**
     * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStatOrBuilder getPayloadLevelAppStatOrBuilder(
        int index) {
      return payloadLevelAppStat_.get(index);
    }

    // repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;
    public static final int IPLAYERNETWORKSTAT_FIELD_NUMBER = 5;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat> ipLayerNetworkStat_;
    /**
     * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat> getIpLayerNetworkStatList() {
      return ipLayerNetworkStat_;
    }
    /**
     * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStatOrBuilder> 
        getIpLayerNetworkStatOrBuilderList() {
      return ipLayerNetworkStat_;
    }
    /**
     * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
     */
    public int getIpLayerNetworkStatCount() {
      return ipLayerNetworkStat_.size();
    }
    /**
     * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat getIpLayerNetworkStat(int index) {
      return ipLayerNetworkStat_.get(index);
    }
    /**
     * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStatOrBuilder getIpLayerNetworkStatOrBuilder(
        int index) {
      return ipLayerNetworkStat_.get(index);
    }

    private void initFields() {
      version_ = 0;
      currentReportMsec_ = 0L;
      keyToPackageNameMapping_ = java.util.Collections.emptyList();
      payloadLevelAppStat_ = java.util.Collections.emptyList();
      ipLayerNetworkStat_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, version_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, currentReportMsec_);
      }
      for (int i = 0; i < keyToPackageNameMapping_.size(); i++) {
        output.writeMessage(3, keyToPackageNameMapping_.get(i));
      }
      for (int i = 0; i < payloadLevelAppStat_.size(); i++) {
        output.writeMessage(4, payloadLevelAppStat_.get(i));
      }
      for (int i = 0; i < ipLayerNetworkStat_.size(); i++) {
        output.writeMessage(5, ipLayerNetworkStat_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, version_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, currentReportMsec_);
      }
      for (int i = 0; i < keyToPackageNameMapping_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, keyToPackageNameMapping_.get(i));
      }
      for (int i = 0; i < payloadLevelAppStat_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, payloadLevelAppStat_.get(i));
      }
      for (int i = 0; i < ipLayerNetworkStat_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, ipLayerNetworkStat_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AndroidDataUsageProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidDataUsageProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidDataUsageProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getKeyToPackageNameMappingFieldBuilder();
          getPayloadLevelAppStatFieldBuilder();
          getIpLayerNetworkStatFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        version_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        currentReportMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (keyToPackageNameMappingBuilder_ == null) {
          keyToPackageNameMapping_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          keyToPackageNameMappingBuilder_.clear();
        }
        if (payloadLevelAppStatBuilder_ == null) {
          payloadLevelAppStat_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          payloadLevelAppStatBuilder_.clear();
        }
        if (ipLayerNetworkStatBuilder_ == null) {
          ipLayerNetworkStat_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
        } else {
          ipLayerNetworkStatBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidDataUsageProto_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto result = new com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.version_ = version_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.currentReportMsec_ = currentReportMsec_;
        if (keyToPackageNameMappingBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            keyToPackageNameMapping_ = java.util.Collections.unmodifiableList(keyToPackageNameMapping_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.keyToPackageNameMapping_ = keyToPackageNameMapping_;
        } else {
          result.keyToPackageNameMapping_ = keyToPackageNameMappingBuilder_.build();
        }
        if (payloadLevelAppStatBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            payloadLevelAppStat_ = java.util.Collections.unmodifiableList(payloadLevelAppStat_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.payloadLevelAppStat_ = payloadLevelAppStat_;
        } else {
          result.payloadLevelAppStat_ = payloadLevelAppStatBuilder_.build();
        }
        if (ipLayerNetworkStatBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            ipLayerNetworkStat_ = java.util.Collections.unmodifiableList(ipLayerNetworkStat_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.ipLayerNetworkStat_ = ipLayerNetworkStat_;
        } else {
          result.ipLayerNetworkStat_ = ipLayerNetworkStatBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.getDefaultInstance()) return this;
        if (other.hasVersion()) {
          setVersion(other.getVersion());
        }
        if (other.hasCurrentReportMsec()) {
          setCurrentReportMsec(other.getCurrentReportMsec());
        }
        if (keyToPackageNameMappingBuilder_ == null) {
          if (!other.keyToPackageNameMapping_.isEmpty()) {
            if (keyToPackageNameMapping_.isEmpty()) {
              keyToPackageNameMapping_ = other.keyToPackageNameMapping_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureKeyToPackageNameMappingIsMutable();
              keyToPackageNameMapping_.addAll(other.keyToPackageNameMapping_);
            }
            onChanged();
          }
        } else {
          if (!other.keyToPackageNameMapping_.isEmpty()) {
            if (keyToPackageNameMappingBuilder_.isEmpty()) {
              keyToPackageNameMappingBuilder_.dispose();
              keyToPackageNameMappingBuilder_ = null;
              keyToPackageNameMapping_ = other.keyToPackageNameMapping_;
              bitField0_ = (bitField0_ & ~0x00000004);
              keyToPackageNameMappingBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getKeyToPackageNameMappingFieldBuilder() : null;
            } else {
              keyToPackageNameMappingBuilder_.addAllMessages(other.keyToPackageNameMapping_);
            }
          }
        }
        if (payloadLevelAppStatBuilder_ == null) {
          if (!other.payloadLevelAppStat_.isEmpty()) {
            if (payloadLevelAppStat_.isEmpty()) {
              payloadLevelAppStat_ = other.payloadLevelAppStat_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensurePayloadLevelAppStatIsMutable();
              payloadLevelAppStat_.addAll(other.payloadLevelAppStat_);
            }
            onChanged();
          }
        } else {
          if (!other.payloadLevelAppStat_.isEmpty()) {
            if (payloadLevelAppStatBuilder_.isEmpty()) {
              payloadLevelAppStatBuilder_.dispose();
              payloadLevelAppStatBuilder_ = null;
              payloadLevelAppStat_ = other.payloadLevelAppStat_;
              bitField0_ = (bitField0_ & ~0x00000008);
              payloadLevelAppStatBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getPayloadLevelAppStatFieldBuilder() : null;
            } else {
              payloadLevelAppStatBuilder_.addAllMessages(other.payloadLevelAppStat_);
            }
          }
        }
        if (ipLayerNetworkStatBuilder_ == null) {
          if (!other.ipLayerNetworkStat_.isEmpty()) {
            if (ipLayerNetworkStat_.isEmpty()) {
              ipLayerNetworkStat_ = other.ipLayerNetworkStat_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureIpLayerNetworkStatIsMutable();
              ipLayerNetworkStat_.addAll(other.ipLayerNetworkStat_);
            }
            onChanged();
          }
        } else {
          if (!other.ipLayerNetworkStat_.isEmpty()) {
            if (ipLayerNetworkStatBuilder_.isEmpty()) {
              ipLayerNetworkStatBuilder_.dispose();
              ipLayerNetworkStatBuilder_ = null;
              ipLayerNetworkStat_ = other.ipLayerNetworkStat_;
              bitField0_ = (bitField0_ & ~0x00000010);
              ipLayerNetworkStatBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getIpLayerNetworkStatFieldBuilder() : null;
            } else {
              ipLayerNetworkStatBuilder_.addAllMessages(other.ipLayerNetworkStat_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 version = 1;
      private int version_ ;
      /**
       * <code>optional int32 version = 1;</code>
       */
      public boolean hasVersion() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 version = 1;</code>
       */
      public int getVersion() {
        return version_;
      }
      /**
       * <code>optional int32 version = 1;</code>
       */
      public Builder setVersion(int value) {
        bitField0_ |= 0x00000001;
        version_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 version = 1;</code>
       */
      public Builder clearVersion() {
        bitField0_ = (bitField0_ & ~0x00000001);
        version_ = 0;
        onChanged();
        return this;
      }

      // optional int64 currentReportMsec = 2;
      private long currentReportMsec_ ;
      /**
       * <code>optional int64 currentReportMsec = 2;</code>
       */
      public boolean hasCurrentReportMsec() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 currentReportMsec = 2;</code>
       */
      public long getCurrentReportMsec() {
        return currentReportMsec_;
      }
      /**
       * <code>optional int64 currentReportMsec = 2;</code>
       */
      public Builder setCurrentReportMsec(long value) {
        bitField0_ |= 0x00000002;
        currentReportMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 currentReportMsec = 2;</code>
       */
      public Builder clearCurrentReportMsec() {
        bitField0_ = (bitField0_ & ~0x00000002);
        currentReportMsec_ = 0L;
        onChanged();
        return this;
      }

      // repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping> keyToPackageNameMapping_ =
        java.util.Collections.emptyList();
      private void ensureKeyToPackageNameMappingIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          keyToPackageNameMapping_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping>(keyToPackageNameMapping_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping, com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.Builder, com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMappingOrBuilder> keyToPackageNameMappingBuilder_;

      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping> getKeyToPackageNameMappingList() {
        if (keyToPackageNameMappingBuilder_ == null) {
          return java.util.Collections.unmodifiableList(keyToPackageNameMapping_);
        } else {
          return keyToPackageNameMappingBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public int getKeyToPackageNameMappingCount() {
        if (keyToPackageNameMappingBuilder_ == null) {
          return keyToPackageNameMapping_.size();
        } else {
          return keyToPackageNameMappingBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping getKeyToPackageNameMapping(int index) {
        if (keyToPackageNameMappingBuilder_ == null) {
          return keyToPackageNameMapping_.get(index);
        } else {
          return keyToPackageNameMappingBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public Builder setKeyToPackageNameMapping(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping value) {
        if (keyToPackageNameMappingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureKeyToPackageNameMappingIsMutable();
          keyToPackageNameMapping_.set(index, value);
          onChanged();
        } else {
          keyToPackageNameMappingBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public Builder setKeyToPackageNameMapping(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.Builder builderForValue) {
        if (keyToPackageNameMappingBuilder_ == null) {
          ensureKeyToPackageNameMappingIsMutable();
          keyToPackageNameMapping_.set(index, builderForValue.build());
          onChanged();
        } else {
          keyToPackageNameMappingBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public Builder addKeyToPackageNameMapping(com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping value) {
        if (keyToPackageNameMappingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureKeyToPackageNameMappingIsMutable();
          keyToPackageNameMapping_.add(value);
          onChanged();
        } else {
          keyToPackageNameMappingBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public Builder addKeyToPackageNameMapping(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping value) {
        if (keyToPackageNameMappingBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureKeyToPackageNameMappingIsMutable();
          keyToPackageNameMapping_.add(index, value);
          onChanged();
        } else {
          keyToPackageNameMappingBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public Builder addKeyToPackageNameMapping(
          com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.Builder builderForValue) {
        if (keyToPackageNameMappingBuilder_ == null) {
          ensureKeyToPackageNameMappingIsMutable();
          keyToPackageNameMapping_.add(builderForValue.build());
          onChanged();
        } else {
          keyToPackageNameMappingBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public Builder addKeyToPackageNameMapping(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.Builder builderForValue) {
        if (keyToPackageNameMappingBuilder_ == null) {
          ensureKeyToPackageNameMappingIsMutable();
          keyToPackageNameMapping_.add(index, builderForValue.build());
          onChanged();
        } else {
          keyToPackageNameMappingBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public Builder addAllKeyToPackageNameMapping(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping> values) {
        if (keyToPackageNameMappingBuilder_ == null) {
          ensureKeyToPackageNameMappingIsMutable();
          super.addAll(values, keyToPackageNameMapping_);
          onChanged();
        } else {
          keyToPackageNameMappingBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public Builder clearKeyToPackageNameMapping() {
        if (keyToPackageNameMappingBuilder_ == null) {
          keyToPackageNameMapping_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          keyToPackageNameMappingBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public Builder removeKeyToPackageNameMapping(int index) {
        if (keyToPackageNameMappingBuilder_ == null) {
          ensureKeyToPackageNameMappingIsMutable();
          keyToPackageNameMapping_.remove(index);
          onChanged();
        } else {
          keyToPackageNameMappingBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.Builder getKeyToPackageNameMappingBuilder(
          int index) {
        return getKeyToPackageNameMappingFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMappingOrBuilder getKeyToPackageNameMappingOrBuilder(
          int index) {
        if (keyToPackageNameMappingBuilder_ == null) {
          return keyToPackageNameMapping_.get(index);  } else {
          return keyToPackageNameMappingBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMappingOrBuilder> 
           getKeyToPackageNameMappingOrBuilderList() {
        if (keyToPackageNameMappingBuilder_ != null) {
          return keyToPackageNameMappingBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(keyToPackageNameMapping_);
        }
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.Builder addKeyToPackageNameMappingBuilder() {
        return getKeyToPackageNameMappingFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.getDefaultInstance());
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.Builder addKeyToPackageNameMappingBuilder(
          int index) {
        return getKeyToPackageNameMappingFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.getDefaultInstance());
      }
      /**
       * <code>repeated .KeyToPackageNameMapping keyToPackageNameMapping = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.Builder> 
           getKeyToPackageNameMappingBuilderList() {
        return getKeyToPackageNameMappingFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping, com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.Builder, com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMappingOrBuilder> 
          getKeyToPackageNameMappingFieldBuilder() {
        if (keyToPackageNameMappingBuilder_ == null) {
          keyToPackageNameMappingBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping, com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.Builder, com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMappingOrBuilder>(
                  keyToPackageNameMapping_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          keyToPackageNameMapping_ = null;
        }
        return keyToPackageNameMappingBuilder_;
      }

      // repeated .PayloadLevelAppStat payloadLevelAppStat = 4;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat> payloadLevelAppStat_ =
        java.util.Collections.emptyList();
      private void ensurePayloadLevelAppStatIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          payloadLevelAppStat_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat>(payloadLevelAppStat_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat, com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStatOrBuilder> payloadLevelAppStatBuilder_;

      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat> getPayloadLevelAppStatList() {
        if (payloadLevelAppStatBuilder_ == null) {
          return java.util.Collections.unmodifiableList(payloadLevelAppStat_);
        } else {
          return payloadLevelAppStatBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public int getPayloadLevelAppStatCount() {
        if (payloadLevelAppStatBuilder_ == null) {
          return payloadLevelAppStat_.size();
        } else {
          return payloadLevelAppStatBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat getPayloadLevelAppStat(int index) {
        if (payloadLevelAppStatBuilder_ == null) {
          return payloadLevelAppStat_.get(index);
        } else {
          return payloadLevelAppStatBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public Builder setPayloadLevelAppStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat value) {
        if (payloadLevelAppStatBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePayloadLevelAppStatIsMutable();
          payloadLevelAppStat_.set(index, value);
          onChanged();
        } else {
          payloadLevelAppStatBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public Builder setPayloadLevelAppStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.Builder builderForValue) {
        if (payloadLevelAppStatBuilder_ == null) {
          ensurePayloadLevelAppStatIsMutable();
          payloadLevelAppStat_.set(index, builderForValue.build());
          onChanged();
        } else {
          payloadLevelAppStatBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public Builder addPayloadLevelAppStat(com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat value) {
        if (payloadLevelAppStatBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePayloadLevelAppStatIsMutable();
          payloadLevelAppStat_.add(value);
          onChanged();
        } else {
          payloadLevelAppStatBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public Builder addPayloadLevelAppStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat value) {
        if (payloadLevelAppStatBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePayloadLevelAppStatIsMutable();
          payloadLevelAppStat_.add(index, value);
          onChanged();
        } else {
          payloadLevelAppStatBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public Builder addPayloadLevelAppStat(
          com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.Builder builderForValue) {
        if (payloadLevelAppStatBuilder_ == null) {
          ensurePayloadLevelAppStatIsMutable();
          payloadLevelAppStat_.add(builderForValue.build());
          onChanged();
        } else {
          payloadLevelAppStatBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public Builder addPayloadLevelAppStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.Builder builderForValue) {
        if (payloadLevelAppStatBuilder_ == null) {
          ensurePayloadLevelAppStatIsMutable();
          payloadLevelAppStat_.add(index, builderForValue.build());
          onChanged();
        } else {
          payloadLevelAppStatBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public Builder addAllPayloadLevelAppStat(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat> values) {
        if (payloadLevelAppStatBuilder_ == null) {
          ensurePayloadLevelAppStatIsMutable();
          super.addAll(values, payloadLevelAppStat_);
          onChanged();
        } else {
          payloadLevelAppStatBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public Builder clearPayloadLevelAppStat() {
        if (payloadLevelAppStatBuilder_ == null) {
          payloadLevelAppStat_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          payloadLevelAppStatBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public Builder removePayloadLevelAppStat(int index) {
        if (payloadLevelAppStatBuilder_ == null) {
          ensurePayloadLevelAppStatIsMutable();
          payloadLevelAppStat_.remove(index);
          onChanged();
        } else {
          payloadLevelAppStatBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.Builder getPayloadLevelAppStatBuilder(
          int index) {
        return getPayloadLevelAppStatFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStatOrBuilder getPayloadLevelAppStatOrBuilder(
          int index) {
        if (payloadLevelAppStatBuilder_ == null) {
          return payloadLevelAppStat_.get(index);  } else {
          return payloadLevelAppStatBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStatOrBuilder> 
           getPayloadLevelAppStatOrBuilderList() {
        if (payloadLevelAppStatBuilder_ != null) {
          return payloadLevelAppStatBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(payloadLevelAppStat_);
        }
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.Builder addPayloadLevelAppStatBuilder() {
        return getPayloadLevelAppStatFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.getDefaultInstance());
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.Builder addPayloadLevelAppStatBuilder(
          int index) {
        return getPayloadLevelAppStatFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.getDefaultInstance());
      }
      /**
       * <code>repeated .PayloadLevelAppStat payloadLevelAppStat = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.Builder> 
           getPayloadLevelAppStatBuilderList() {
        return getPayloadLevelAppStatFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat, com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStatOrBuilder> 
          getPayloadLevelAppStatFieldBuilder() {
        if (payloadLevelAppStatBuilder_ == null) {
          payloadLevelAppStatBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat, com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStatOrBuilder>(
                  payloadLevelAppStat_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          payloadLevelAppStat_ = null;
        }
        return payloadLevelAppStatBuilder_;
      }

      // repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat> ipLayerNetworkStat_ =
        java.util.Collections.emptyList();
      private void ensureIpLayerNetworkStatIsMutable() {
        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
          ipLayerNetworkStat_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat>(ipLayerNetworkStat_);
          bitField0_ |= 0x00000010;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.Builder, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStatOrBuilder> ipLayerNetworkStatBuilder_;

      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat> getIpLayerNetworkStatList() {
        if (ipLayerNetworkStatBuilder_ == null) {
          return java.util.Collections.unmodifiableList(ipLayerNetworkStat_);
        } else {
          return ipLayerNetworkStatBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public int getIpLayerNetworkStatCount() {
        if (ipLayerNetworkStatBuilder_ == null) {
          return ipLayerNetworkStat_.size();
        } else {
          return ipLayerNetworkStatBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat getIpLayerNetworkStat(int index) {
        if (ipLayerNetworkStatBuilder_ == null) {
          return ipLayerNetworkStat_.get(index);
        } else {
          return ipLayerNetworkStatBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public Builder setIpLayerNetworkStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat value) {
        if (ipLayerNetworkStatBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIpLayerNetworkStatIsMutable();
          ipLayerNetworkStat_.set(index, value);
          onChanged();
        } else {
          ipLayerNetworkStatBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public Builder setIpLayerNetworkStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.Builder builderForValue) {
        if (ipLayerNetworkStatBuilder_ == null) {
          ensureIpLayerNetworkStatIsMutable();
          ipLayerNetworkStat_.set(index, builderForValue.build());
          onChanged();
        } else {
          ipLayerNetworkStatBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public Builder addIpLayerNetworkStat(com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat value) {
        if (ipLayerNetworkStatBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIpLayerNetworkStatIsMutable();
          ipLayerNetworkStat_.add(value);
          onChanged();
        } else {
          ipLayerNetworkStatBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public Builder addIpLayerNetworkStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat value) {
        if (ipLayerNetworkStatBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIpLayerNetworkStatIsMutable();
          ipLayerNetworkStat_.add(index, value);
          onChanged();
        } else {
          ipLayerNetworkStatBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public Builder addIpLayerNetworkStat(
          com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.Builder builderForValue) {
        if (ipLayerNetworkStatBuilder_ == null) {
          ensureIpLayerNetworkStatIsMutable();
          ipLayerNetworkStat_.add(builderForValue.build());
          onChanged();
        } else {
          ipLayerNetworkStatBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public Builder addIpLayerNetworkStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.Builder builderForValue) {
        if (ipLayerNetworkStatBuilder_ == null) {
          ensureIpLayerNetworkStatIsMutable();
          ipLayerNetworkStat_.add(index, builderForValue.build());
          onChanged();
        } else {
          ipLayerNetworkStatBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public Builder addAllIpLayerNetworkStat(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat> values) {
        if (ipLayerNetworkStatBuilder_ == null) {
          ensureIpLayerNetworkStatIsMutable();
          super.addAll(values, ipLayerNetworkStat_);
          onChanged();
        } else {
          ipLayerNetworkStatBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public Builder clearIpLayerNetworkStat() {
        if (ipLayerNetworkStatBuilder_ == null) {
          ipLayerNetworkStat_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000010);
          onChanged();
        } else {
          ipLayerNetworkStatBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public Builder removeIpLayerNetworkStat(int index) {
        if (ipLayerNetworkStatBuilder_ == null) {
          ensureIpLayerNetworkStatIsMutable();
          ipLayerNetworkStat_.remove(index);
          onChanged();
        } else {
          ipLayerNetworkStatBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.Builder getIpLayerNetworkStatBuilder(
          int index) {
        return getIpLayerNetworkStatFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStatOrBuilder getIpLayerNetworkStatOrBuilder(
          int index) {
        if (ipLayerNetworkStatBuilder_ == null) {
          return ipLayerNetworkStat_.get(index);  } else {
          return ipLayerNetworkStatBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStatOrBuilder> 
           getIpLayerNetworkStatOrBuilderList() {
        if (ipLayerNetworkStatBuilder_ != null) {
          return ipLayerNetworkStatBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(ipLayerNetworkStat_);
        }
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.Builder addIpLayerNetworkStatBuilder() {
        return getIpLayerNetworkStatFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.getDefaultInstance());
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.Builder addIpLayerNetworkStatBuilder(
          int index) {
        return getIpLayerNetworkStatFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.getDefaultInstance());
      }
      /**
       * <code>repeated .IpLayerNetworkStat ipLayerNetworkStat = 5;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.Builder> 
           getIpLayerNetworkStatBuilderList() {
        return getIpLayerNetworkStatFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.Builder, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStatOrBuilder> 
          getIpLayerNetworkStatFieldBuilder() {
        if (ipLayerNetworkStatBuilder_ == null) {
          ipLayerNetworkStatBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.Builder, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStatOrBuilder>(
                  ipLayerNetworkStat_,
                  ((bitField0_ & 0x00000010) == 0x00000010),
                  getParentForChildren(),
                  isClean());
          ipLayerNetworkStat_ = null;
        }
        return ipLayerNetworkStatBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:AndroidDataUsageProto)
    }

    static {
      defaultInstance = new AndroidDataUsageProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:AndroidDataUsageProto)
  }

  public interface AndroidUsageStatsReportOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 androidId = 1;
    /**
     * <code>optional int64 androidId = 1;</code>
     */
    boolean hasAndroidId();
    /**
     * <code>optional int64 androidId = 1;</code>
     */
    long getAndroidId();

    // optional int64 loggingId = 2;
    /**
     * <code>optional int64 loggingId = 2;</code>
     */
    boolean hasLoggingId();
    /**
     * <code>optional int64 loggingId = 2;</code>
     */
    long getLoggingId();

    // optional .UsageStatsExtensionProto usageStats = 3;
    /**
     * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
     */
    boolean hasUsageStats();
    /**
     * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto getUsageStats();
    /**
     * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProtoOrBuilder getUsageStatsOrBuilder();
  }
  /**
   * Protobuf type {@code AndroidUsageStatsReport}
   */
  public static final class AndroidUsageStatsReport extends
      com.google.protobuf.GeneratedMessage
      implements AndroidUsageStatsReportOrBuilder {
    // Use AndroidUsageStatsReport.newBuilder() to construct.
    private AndroidUsageStatsReport(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AndroidUsageStatsReport(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AndroidUsageStatsReport defaultInstance;
    public static AndroidUsageStatsReport getDefaultInstance() {
      return defaultInstance;
    }

    public AndroidUsageStatsReport getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AndroidUsageStatsReport(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              androidId_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              loggingId_ = input.readInt64();
              break;
            }
            case 26: {
              com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = usageStats_.toBuilder();
              }
              usageStats_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(usageStats_);
                usageStats_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidUsageStatsReport_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidUsageStatsReport_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport.Builder.class);
    }

    public static com.google.protobuf.Parser<AndroidUsageStatsReport> PARSER =
        new com.google.protobuf.AbstractParser<AndroidUsageStatsReport>() {
      public AndroidUsageStatsReport parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AndroidUsageStatsReport(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AndroidUsageStatsReport> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 androidId = 1;
    public static final int ANDROIDID_FIELD_NUMBER = 1;
    private long androidId_;
    /**
     * <code>optional int64 androidId = 1;</code>
     */
    public boolean hasAndroidId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 androidId = 1;</code>
     */
    public long getAndroidId() {
      return androidId_;
    }

    // optional int64 loggingId = 2;
    public static final int LOGGINGID_FIELD_NUMBER = 2;
    private long loggingId_;
    /**
     * <code>optional int64 loggingId = 2;</code>
     */
    public boolean hasLoggingId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 loggingId = 2;</code>
     */
    public long getLoggingId() {
      return loggingId_;
    }

    // optional .UsageStatsExtensionProto usageStats = 3;
    public static final int USAGESTATS_FIELD_NUMBER = 3;
    private com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto usageStats_;
    /**
     * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
     */
    public boolean hasUsageStats() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto getUsageStats() {
      return usageStats_;
    }
    /**
     * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProtoOrBuilder getUsageStatsOrBuilder() {
      return usageStats_;
    }

    private void initFields() {
      androidId_ = 0L;
      loggingId_ = 0L;
      usageStats_ = com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, androidId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, loggingId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, usageStats_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, androidId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, loggingId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, usageStats_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AndroidUsageStatsReport}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReportOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidUsageStatsReport_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidUsageStatsReport_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport.class, com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getUsageStatsFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        androidId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        loggingId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (usageStatsBuilder_ == null) {
          usageStats_ = com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.getDefaultInstance();
        } else {
          usageStatsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AndroidUsageStatsReport_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport result = new com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.androidId_ = androidId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.loggingId_ = loggingId_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (usageStatsBuilder_ == null) {
          result.usageStats_ = usageStats_;
        } else {
          result.usageStats_ = usageStatsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport.getDefaultInstance()) return this;
        if (other.hasAndroidId()) {
          setAndroidId(other.getAndroidId());
        }
        if (other.hasLoggingId()) {
          setLoggingId(other.getLoggingId());
        }
        if (other.hasUsageStats()) {
          mergeUsageStats(other.getUsageStats());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.AndroidUsageStatsReport) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 androidId = 1;
      private long androidId_ ;
      /**
       * <code>optional int64 androidId = 1;</code>
       */
      public boolean hasAndroidId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 androidId = 1;</code>
       */
      public long getAndroidId() {
        return androidId_;
      }
      /**
       * <code>optional int64 androidId = 1;</code>
       */
      public Builder setAndroidId(long value) {
        bitField0_ |= 0x00000001;
        androidId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 androidId = 1;</code>
       */
      public Builder clearAndroidId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        androidId_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 loggingId = 2;
      private long loggingId_ ;
      /**
       * <code>optional int64 loggingId = 2;</code>
       */
      public boolean hasLoggingId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 loggingId = 2;</code>
       */
      public long getLoggingId() {
        return loggingId_;
      }
      /**
       * <code>optional int64 loggingId = 2;</code>
       */
      public Builder setLoggingId(long value) {
        bitField0_ |= 0x00000002;
        loggingId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 loggingId = 2;</code>
       */
      public Builder clearLoggingId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        loggingId_ = 0L;
        onChanged();
        return this;
      }

      // optional .UsageStatsExtensionProto usageStats = 3;
      private com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto usageStats_ = com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto, com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProtoOrBuilder> usageStatsBuilder_;
      /**
       * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
       */
      public boolean hasUsageStats() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto getUsageStats() {
        if (usageStatsBuilder_ == null) {
          return usageStats_;
        } else {
          return usageStatsBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
       */
      public Builder setUsageStats(com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto value) {
        if (usageStatsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          usageStats_ = value;
          onChanged();
        } else {
          usageStatsBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
       */
      public Builder setUsageStats(
          com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.Builder builderForValue) {
        if (usageStatsBuilder_ == null) {
          usageStats_ = builderForValue.build();
          onChanged();
        } else {
          usageStatsBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
       */
      public Builder mergeUsageStats(com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto value) {
        if (usageStatsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              usageStats_ != com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.getDefaultInstance()) {
            usageStats_ =
              com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.newBuilder(usageStats_).mergeFrom(value).buildPartial();
          } else {
            usageStats_ = value;
          }
          onChanged();
        } else {
          usageStatsBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
       */
      public Builder clearUsageStats() {
        if (usageStatsBuilder_ == null) {
          usageStats_ = com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.getDefaultInstance();
          onChanged();
        } else {
          usageStatsBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.Builder getUsageStatsBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getUsageStatsFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProtoOrBuilder getUsageStatsOrBuilder() {
        if (usageStatsBuilder_ != null) {
          return usageStatsBuilder_.getMessageOrBuilder();
        } else {
          return usageStats_;
        }
      }
      /**
       * <code>optional .UsageStatsExtensionProto usageStats = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto, com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProtoOrBuilder> 
          getUsageStatsFieldBuilder() {
        if (usageStatsBuilder_ == null) {
          usageStatsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto, com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProtoOrBuilder>(
                  usageStats_,
                  getParentForChildren(),
                  isClean());
          usageStats_ = null;
        }
        return usageStatsBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:AndroidUsageStatsReport)
    }

    static {
      defaultInstance = new AndroidUsageStatsReport(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:AndroidUsageStatsReport)
  }

  public interface AppBucketOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 bucketStartMsec = 1;
    /**
     * <code>optional int64 bucketStartMsec = 1;</code>
     */
    boolean hasBucketStartMsec();
    /**
     * <code>optional int64 bucketStartMsec = 1;</code>
     */
    long getBucketStartMsec();

    // optional int64 bucketDurationMsec = 2;
    /**
     * <code>optional int64 bucketDurationMsec = 2;</code>
     */
    boolean hasBucketDurationMsec();
    /**
     * <code>optional int64 bucketDurationMsec = 2;</code>
     */
    long getBucketDurationMsec();

    // repeated .StatCounters statCounters = 3;
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters> 
        getStatCountersList();
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.StatCounters getStatCounters(int index);
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    int getStatCountersCount();
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder> 
        getStatCountersOrBuilderList();
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder getStatCountersOrBuilder(
        int index);

    // optional int64 operationCount = 4;
    /**
     * <code>optional int64 operationCount = 4;</code>
     */
    boolean hasOperationCount();
    /**
     * <code>optional int64 operationCount = 4;</code>
     */
    long getOperationCount();
  }
  /**
   * Protobuf type {@code AppBucket}
   */
  public static final class AppBucket extends
      com.google.protobuf.GeneratedMessage
      implements AppBucketOrBuilder {
    // Use AppBucket.newBuilder() to construct.
    private AppBucket(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private AppBucket(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final AppBucket defaultInstance;
    public static AppBucket getDefaultInstance() {
      return defaultInstance;
    }

    public AppBucket getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private AppBucket(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              bucketStartMsec_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              bucketDurationMsec_ = input.readInt64();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                statCounters_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters>();
                mutable_bitField0_ |= 0x00000004;
              }
              statCounters_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.PARSER, extensionRegistry));
              break;
            }
            case 32: {
              bitField0_ |= 0x00000004;
              operationCount_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          statCounters_ = java.util.Collections.unmodifiableList(statCounters_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppBucket_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppBucket_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.class, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder.class);
    }

    public static com.google.protobuf.Parser<AppBucket> PARSER =
        new com.google.protobuf.AbstractParser<AppBucket>() {
      public AppBucket parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new AppBucket(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<AppBucket> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 bucketStartMsec = 1;
    public static final int BUCKETSTARTMSEC_FIELD_NUMBER = 1;
    private long bucketStartMsec_;
    /**
     * <code>optional int64 bucketStartMsec = 1;</code>
     */
    public boolean hasBucketStartMsec() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 bucketStartMsec = 1;</code>
     */
    public long getBucketStartMsec() {
      return bucketStartMsec_;
    }

    // optional int64 bucketDurationMsec = 2;
    public static final int BUCKETDURATIONMSEC_FIELD_NUMBER = 2;
    private long bucketDurationMsec_;
    /**
     * <code>optional int64 bucketDurationMsec = 2;</code>
     */
    public boolean hasBucketDurationMsec() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 bucketDurationMsec = 2;</code>
     */
    public long getBucketDurationMsec() {
      return bucketDurationMsec_;
    }

    // repeated .StatCounters statCounters = 3;
    public static final int STATCOUNTERS_FIELD_NUMBER = 3;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters> statCounters_;
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters> getStatCountersList() {
      return statCounters_;
    }
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder> 
        getStatCountersOrBuilderList() {
      return statCounters_;
    }
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    public int getStatCountersCount() {
      return statCounters_.size();
    }
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.StatCounters getStatCounters(int index) {
      return statCounters_.get(index);
    }
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder getStatCountersOrBuilder(
        int index) {
      return statCounters_.get(index);
    }

    // optional int64 operationCount = 4;
    public static final int OPERATIONCOUNT_FIELD_NUMBER = 4;
    private long operationCount_;
    /**
     * <code>optional int64 operationCount = 4;</code>
     */
    public boolean hasOperationCount() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 operationCount = 4;</code>
     */
    public long getOperationCount() {
      return operationCount_;
    }

    private void initFields() {
      bucketStartMsec_ = 0L;
      bucketDurationMsec_ = 0L;
      statCounters_ = java.util.Collections.emptyList();
      operationCount_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, bucketStartMsec_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, bucketDurationMsec_);
      }
      for (int i = 0; i < statCounters_.size(); i++) {
        output.writeMessage(3, statCounters_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(4, operationCount_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, bucketStartMsec_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, bucketDurationMsec_);
      }
      for (int i = 0; i < statCounters_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, statCounters_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, operationCount_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.AppBucket parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppBucket parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppBucket parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppBucket parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppBucket parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppBucket parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppBucket parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppBucket parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppBucket parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.AppBucket parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.AppBucket prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code AppBucket}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppBucket_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppBucket_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.class, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getStatCountersFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        bucketStartMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        bucketDurationMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (statCountersBuilder_ == null) {
          statCounters_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          statCountersBuilder_.clear();
        }
        operationCount_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_AppBucket_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AppBucket getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AppBucket build() {
        com.akdeniz.googleplaycrawler.GooglePlay.AppBucket result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.AppBucket buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.AppBucket result = new com.akdeniz.googleplaycrawler.GooglePlay.AppBucket(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.bucketStartMsec_ = bucketStartMsec_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.bucketDurationMsec_ = bucketDurationMsec_;
        if (statCountersBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            statCounters_ = java.util.Collections.unmodifiableList(statCounters_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.statCounters_ = statCounters_;
        } else {
          result.statCounters_ = statCountersBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.operationCount_ = operationCount_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.AppBucket) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.AppBucket)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.AppBucket other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.getDefaultInstance()) return this;
        if (other.hasBucketStartMsec()) {
          setBucketStartMsec(other.getBucketStartMsec());
        }
        if (other.hasBucketDurationMsec()) {
          setBucketDurationMsec(other.getBucketDurationMsec());
        }
        if (statCountersBuilder_ == null) {
          if (!other.statCounters_.isEmpty()) {
            if (statCounters_.isEmpty()) {
              statCounters_ = other.statCounters_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureStatCountersIsMutable();
              statCounters_.addAll(other.statCounters_);
            }
            onChanged();
          }
        } else {
          if (!other.statCounters_.isEmpty()) {
            if (statCountersBuilder_.isEmpty()) {
              statCountersBuilder_.dispose();
              statCountersBuilder_ = null;
              statCounters_ = other.statCounters_;
              bitField0_ = (bitField0_ & ~0x00000004);
              statCountersBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getStatCountersFieldBuilder() : null;
            } else {
              statCountersBuilder_.addAllMessages(other.statCounters_);
            }
          }
        }
        if (other.hasOperationCount()) {
          setOperationCount(other.getOperationCount());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.AppBucket parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.AppBucket) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 bucketStartMsec = 1;
      private long bucketStartMsec_ ;
      /**
       * <code>optional int64 bucketStartMsec = 1;</code>
       */
      public boolean hasBucketStartMsec() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 bucketStartMsec = 1;</code>
       */
      public long getBucketStartMsec() {
        return bucketStartMsec_;
      }
      /**
       * <code>optional int64 bucketStartMsec = 1;</code>
       */
      public Builder setBucketStartMsec(long value) {
        bitField0_ |= 0x00000001;
        bucketStartMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 bucketStartMsec = 1;</code>
       */
      public Builder clearBucketStartMsec() {
        bitField0_ = (bitField0_ & ~0x00000001);
        bucketStartMsec_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 bucketDurationMsec = 2;
      private long bucketDurationMsec_ ;
      /**
       * <code>optional int64 bucketDurationMsec = 2;</code>
       */
      public boolean hasBucketDurationMsec() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 bucketDurationMsec = 2;</code>
       */
      public long getBucketDurationMsec() {
        return bucketDurationMsec_;
      }
      /**
       * <code>optional int64 bucketDurationMsec = 2;</code>
       */
      public Builder setBucketDurationMsec(long value) {
        bitField0_ |= 0x00000002;
        bucketDurationMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 bucketDurationMsec = 2;</code>
       */
      public Builder clearBucketDurationMsec() {
        bitField0_ = (bitField0_ & ~0x00000002);
        bucketDurationMsec_ = 0L;
        onChanged();
        return this;
      }

      // repeated .StatCounters statCounters = 3;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters> statCounters_ =
        java.util.Collections.emptyList();
      private void ensureStatCountersIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          statCounters_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters>(statCounters_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.StatCounters, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder, com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder> statCountersBuilder_;

      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters> getStatCountersList() {
        if (statCountersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(statCounters_);
        } else {
          return statCountersBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public int getStatCountersCount() {
        if (statCountersBuilder_ == null) {
          return statCounters_.size();
        } else {
          return statCountersBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.StatCounters getStatCounters(int index) {
        if (statCountersBuilder_ == null) {
          return statCounters_.get(index);
        } else {
          return statCountersBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder setStatCounters(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters value) {
        if (statCountersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStatCountersIsMutable();
          statCounters_.set(index, value);
          onChanged();
        } else {
          statCountersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder setStatCounters(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder builderForValue) {
        if (statCountersBuilder_ == null) {
          ensureStatCountersIsMutable();
          statCounters_.set(index, builderForValue.build());
          onChanged();
        } else {
          statCountersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder addStatCounters(com.akdeniz.googleplaycrawler.GooglePlay.StatCounters value) {
        if (statCountersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStatCountersIsMutable();
          statCounters_.add(value);
          onChanged();
        } else {
          statCountersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder addStatCounters(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters value) {
        if (statCountersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStatCountersIsMutable();
          statCounters_.add(index, value);
          onChanged();
        } else {
          statCountersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder addStatCounters(
          com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder builderForValue) {
        if (statCountersBuilder_ == null) {
          ensureStatCountersIsMutable();
          statCounters_.add(builderForValue.build());
          onChanged();
        } else {
          statCountersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder addStatCounters(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder builderForValue) {
        if (statCountersBuilder_ == null) {
          ensureStatCountersIsMutable();
          statCounters_.add(index, builderForValue.build());
          onChanged();
        } else {
          statCountersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder addAllStatCounters(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.StatCounters> values) {
        if (statCountersBuilder_ == null) {
          ensureStatCountersIsMutable();
          super.addAll(values, statCounters_);
          onChanged();
        } else {
          statCountersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder clearStatCounters() {
        if (statCountersBuilder_ == null) {
          statCounters_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          statCountersBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder removeStatCounters(int index) {
        if (statCountersBuilder_ == null) {
          ensureStatCountersIsMutable();
          statCounters_.remove(index);
          onChanged();
        } else {
          statCountersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder getStatCountersBuilder(
          int index) {
        return getStatCountersFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder getStatCountersOrBuilder(
          int index) {
        if (statCountersBuilder_ == null) {
          return statCounters_.get(index);  } else {
          return statCountersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder> 
           getStatCountersOrBuilderList() {
        if (statCountersBuilder_ != null) {
          return statCountersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(statCounters_);
        }
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder addStatCountersBuilder() {
        return getStatCountersFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.getDefaultInstance());
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder addStatCountersBuilder(
          int index) {
        return getStatCountersFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.getDefaultInstance());
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder> 
           getStatCountersBuilderList() {
        return getStatCountersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.StatCounters, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder, com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder> 
          getStatCountersFieldBuilder() {
        if (statCountersBuilder_ == null) {
          statCountersBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.StatCounters, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder, com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder>(
                  statCounters_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          statCounters_ = null;
        }
        return statCountersBuilder_;
      }

      // optional int64 operationCount = 4;
      private long operationCount_ ;
      /**
       * <code>optional int64 operationCount = 4;</code>
       */
      public boolean hasOperationCount() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 operationCount = 4;</code>
       */
      public long getOperationCount() {
        return operationCount_;
      }
      /**
       * <code>optional int64 operationCount = 4;</code>
       */
      public Builder setOperationCount(long value) {
        bitField0_ |= 0x00000008;
        operationCount_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 operationCount = 4;</code>
       */
      public Builder clearOperationCount() {
        bitField0_ = (bitField0_ & ~0x00000008);
        operationCount_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:AppBucket)
    }

    static {
      defaultInstance = new AppBucket(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:AppBucket)
  }

  public interface CounterDataOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 bytes = 1;
    /**
     * <code>optional int64 bytes = 1;</code>
     */
    boolean hasBytes();
    /**
     * <code>optional int64 bytes = 1;</code>
     */
    long getBytes();

    // optional int64 packets = 2;
    /**
     * <code>optional int64 packets = 2;</code>
     */
    boolean hasPackets();
    /**
     * <code>optional int64 packets = 2;</code>
     */
    long getPackets();
  }
  /**
   * Protobuf type {@code CounterData}
   */
  public static final class CounterData extends
      com.google.protobuf.GeneratedMessage
      implements CounterDataOrBuilder {
    // Use CounterData.newBuilder() to construct.
    private CounterData(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private CounterData(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final CounterData defaultInstance;
    public static CounterData getDefaultInstance() {
      return defaultInstance;
    }

    public CounterData getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private CounterData(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              bytes_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              packets_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CounterData_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CounterData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.CounterData.class, com.akdeniz.googleplaycrawler.GooglePlay.CounterData.Builder.class);
    }

    public static com.google.protobuf.Parser<CounterData> PARSER =
        new com.google.protobuf.AbstractParser<CounterData>() {
      public CounterData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new CounterData(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<CounterData> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 bytes = 1;
    public static final int BYTES_FIELD_NUMBER = 1;
    private long bytes_;
    /**
     * <code>optional int64 bytes = 1;</code>
     */
    public boolean hasBytes() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 bytes = 1;</code>
     */
    public long getBytes() {
      return bytes_;
    }

    // optional int64 packets = 2;
    public static final int PACKETS_FIELD_NUMBER = 2;
    private long packets_;
    /**
     * <code>optional int64 packets = 2;</code>
     */
    public boolean hasPackets() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 packets = 2;</code>
     */
    public long getPackets() {
      return packets_;
    }

    private void initFields() {
      bytes_ = 0L;
      packets_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, bytes_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, packets_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, bytes_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, packets_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.CounterData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CounterData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CounterData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CounterData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CounterData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CounterData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CounterData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CounterData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CounterData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.CounterData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.CounterData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code CounterData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.CounterDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CounterData_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CounterData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.CounterData.class, com.akdeniz.googleplaycrawler.GooglePlay.CounterData.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.CounterData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        bytes_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        packets_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_CounterData_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CounterData getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.CounterData.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CounterData build() {
        com.akdeniz.googleplaycrawler.GooglePlay.CounterData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.CounterData buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.CounterData result = new com.akdeniz.googleplaycrawler.GooglePlay.CounterData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.bytes_ = bytes_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.packets_ = packets_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.CounterData) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.CounterData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.CounterData other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.CounterData.getDefaultInstance()) return this;
        if (other.hasBytes()) {
          setBytes(other.getBytes());
        }
        if (other.hasPackets()) {
          setPackets(other.getPackets());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.CounterData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.CounterData) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 bytes = 1;
      private long bytes_ ;
      /**
       * <code>optional int64 bytes = 1;</code>
       */
      public boolean hasBytes() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 bytes = 1;</code>
       */
      public long getBytes() {
        return bytes_;
      }
      /**
       * <code>optional int64 bytes = 1;</code>
       */
      public Builder setBytes(long value) {
        bitField0_ |= 0x00000001;
        bytes_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 bytes = 1;</code>
       */
      public Builder clearBytes() {
        bitField0_ = (bitField0_ & ~0x00000001);
        bytes_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 packets = 2;
      private long packets_ ;
      /**
       * <code>optional int64 packets = 2;</code>
       */
      public boolean hasPackets() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 packets = 2;</code>
       */
      public long getPackets() {
        return packets_;
      }
      /**
       * <code>optional int64 packets = 2;</code>
       */
      public Builder setPackets(long value) {
        bitField0_ |= 0x00000002;
        packets_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 packets = 2;</code>
       */
      public Builder clearPackets() {
        bitField0_ = (bitField0_ & ~0x00000002);
        packets_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:CounterData)
    }

    static {
      defaultInstance = new CounterData(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:CounterData)
  }

  public interface IpLayerAppStatOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 packageKey = 1;
    /**
     * <code>optional int32 packageKey = 1;</code>
     */
    boolean hasPackageKey();
    /**
     * <code>optional int32 packageKey = 1;</code>
     */
    int getPackageKey();

    // optional int32 applicationTag = 2;
    /**
     * <code>optional int32 applicationTag = 2;</code>
     */
    boolean hasApplicationTag();
    /**
     * <code>optional int32 applicationTag = 2;</code>
     */
    int getApplicationTag();

    // repeated .AppBucket ipLayerAppBucket = 3;
    /**
     * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket> 
        getIpLayerAppBucketList();
    /**
     * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AppBucket getIpLayerAppBucket(int index);
    /**
     * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
     */
    int getIpLayerAppBucketCount();
    /**
     * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder> 
        getIpLayerAppBucketOrBuilderList();
    /**
     * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder getIpLayerAppBucketOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code IpLayerAppStat}
   */
  public static final class IpLayerAppStat extends
      com.google.protobuf.GeneratedMessage
      implements IpLayerAppStatOrBuilder {
    // Use IpLayerAppStat.newBuilder() to construct.
    private IpLayerAppStat(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private IpLayerAppStat(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final IpLayerAppStat defaultInstance;
    public static IpLayerAppStat getDefaultInstance() {
      return defaultInstance;
    }

    public IpLayerAppStat getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private IpLayerAppStat(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              packageKey_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              applicationTag_ = input.readInt32();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                ipLayerAppBucket_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket>();
                mutable_bitField0_ |= 0x00000004;
              }
              ipLayerAppBucket_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          ipLayerAppBucket_ = java.util.Collections.unmodifiableList(ipLayerAppBucket_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerAppStat_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerAppStat_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.class, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.Builder.class);
    }

    public static com.google.protobuf.Parser<IpLayerAppStat> PARSER =
        new com.google.protobuf.AbstractParser<IpLayerAppStat>() {
      public IpLayerAppStat parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new IpLayerAppStat(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<IpLayerAppStat> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 packageKey = 1;
    public static final int PACKAGEKEY_FIELD_NUMBER = 1;
    private int packageKey_;
    /**
     * <code>optional int32 packageKey = 1;</code>
     */
    public boolean hasPackageKey() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 packageKey = 1;</code>
     */
    public int getPackageKey() {
      return packageKey_;
    }

    // optional int32 applicationTag = 2;
    public static final int APPLICATIONTAG_FIELD_NUMBER = 2;
    private int applicationTag_;
    /**
     * <code>optional int32 applicationTag = 2;</code>
     */
    public boolean hasApplicationTag() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 applicationTag = 2;</code>
     */
    public int getApplicationTag() {
      return applicationTag_;
    }

    // repeated .AppBucket ipLayerAppBucket = 3;
    public static final int IPLAYERAPPBUCKET_FIELD_NUMBER = 3;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket> ipLayerAppBucket_;
    /**
     * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket> getIpLayerAppBucketList() {
      return ipLayerAppBucket_;
    }
    /**
     * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder> 
        getIpLayerAppBucketOrBuilderList() {
      return ipLayerAppBucket_;
    }
    /**
     * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
     */
    public int getIpLayerAppBucketCount() {
      return ipLayerAppBucket_.size();
    }
    /**
     * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AppBucket getIpLayerAppBucket(int index) {
      return ipLayerAppBucket_.get(index);
    }
    /**
     * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder getIpLayerAppBucketOrBuilder(
        int index) {
      return ipLayerAppBucket_.get(index);
    }

    private void initFields() {
      packageKey_ = 0;
      applicationTag_ = 0;
      ipLayerAppBucket_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, packageKey_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, applicationTag_);
      }
      for (int i = 0; i < ipLayerAppBucket_.size(); i++) {
        output.writeMessage(3, ipLayerAppBucket_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, packageKey_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, applicationTag_);
      }
      for (int i = 0; i < ipLayerAppBucket_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, ipLayerAppBucket_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code IpLayerAppStat}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStatOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerAppStat_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerAppStat_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.class, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getIpLayerAppBucketFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        packageKey_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        applicationTag_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (ipLayerAppBucketBuilder_ == null) {
          ipLayerAppBucket_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          ipLayerAppBucketBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerAppStat_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat build() {
        com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat result = new com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.packageKey_ = packageKey_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.applicationTag_ = applicationTag_;
        if (ipLayerAppBucketBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            ipLayerAppBucket_ = java.util.Collections.unmodifiableList(ipLayerAppBucket_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.ipLayerAppBucket_ = ipLayerAppBucket_;
        } else {
          result.ipLayerAppBucket_ = ipLayerAppBucketBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.getDefaultInstance()) return this;
        if (other.hasPackageKey()) {
          setPackageKey(other.getPackageKey());
        }
        if (other.hasApplicationTag()) {
          setApplicationTag(other.getApplicationTag());
        }
        if (ipLayerAppBucketBuilder_ == null) {
          if (!other.ipLayerAppBucket_.isEmpty()) {
            if (ipLayerAppBucket_.isEmpty()) {
              ipLayerAppBucket_ = other.ipLayerAppBucket_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureIpLayerAppBucketIsMutable();
              ipLayerAppBucket_.addAll(other.ipLayerAppBucket_);
            }
            onChanged();
          }
        } else {
          if (!other.ipLayerAppBucket_.isEmpty()) {
            if (ipLayerAppBucketBuilder_.isEmpty()) {
              ipLayerAppBucketBuilder_.dispose();
              ipLayerAppBucketBuilder_ = null;
              ipLayerAppBucket_ = other.ipLayerAppBucket_;
              bitField0_ = (bitField0_ & ~0x00000004);
              ipLayerAppBucketBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getIpLayerAppBucketFieldBuilder() : null;
            } else {
              ipLayerAppBucketBuilder_.addAllMessages(other.ipLayerAppBucket_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 packageKey = 1;
      private int packageKey_ ;
      /**
       * <code>optional int32 packageKey = 1;</code>
       */
      public boolean hasPackageKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 packageKey = 1;</code>
       */
      public int getPackageKey() {
        return packageKey_;
      }
      /**
       * <code>optional int32 packageKey = 1;</code>
       */
      public Builder setPackageKey(int value) {
        bitField0_ |= 0x00000001;
        packageKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 packageKey = 1;</code>
       */
      public Builder clearPackageKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        packageKey_ = 0;
        onChanged();
        return this;
      }

      // optional int32 applicationTag = 2;
      private int applicationTag_ ;
      /**
       * <code>optional int32 applicationTag = 2;</code>
       */
      public boolean hasApplicationTag() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 applicationTag = 2;</code>
       */
      public int getApplicationTag() {
        return applicationTag_;
      }
      /**
       * <code>optional int32 applicationTag = 2;</code>
       */
      public Builder setApplicationTag(int value) {
        bitField0_ |= 0x00000002;
        applicationTag_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 applicationTag = 2;</code>
       */
      public Builder clearApplicationTag() {
        bitField0_ = (bitField0_ & ~0x00000002);
        applicationTag_ = 0;
        onChanged();
        return this;
      }

      // repeated .AppBucket ipLayerAppBucket = 3;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket> ipLayerAppBucket_ =
        java.util.Collections.emptyList();
      private void ensureIpLayerAppBucketIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          ipLayerAppBucket_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket>(ipLayerAppBucket_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AppBucket, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder> ipLayerAppBucketBuilder_;

      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket> getIpLayerAppBucketList() {
        if (ipLayerAppBucketBuilder_ == null) {
          return java.util.Collections.unmodifiableList(ipLayerAppBucket_);
        } else {
          return ipLayerAppBucketBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public int getIpLayerAppBucketCount() {
        if (ipLayerAppBucketBuilder_ == null) {
          return ipLayerAppBucket_.size();
        } else {
          return ipLayerAppBucketBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppBucket getIpLayerAppBucket(int index) {
        if (ipLayerAppBucketBuilder_ == null) {
          return ipLayerAppBucket_.get(index);
        } else {
          return ipLayerAppBucketBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public Builder setIpLayerAppBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket value) {
        if (ipLayerAppBucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIpLayerAppBucketIsMutable();
          ipLayerAppBucket_.set(index, value);
          onChanged();
        } else {
          ipLayerAppBucketBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public Builder setIpLayerAppBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder builderForValue) {
        if (ipLayerAppBucketBuilder_ == null) {
          ensureIpLayerAppBucketIsMutable();
          ipLayerAppBucket_.set(index, builderForValue.build());
          onChanged();
        } else {
          ipLayerAppBucketBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public Builder addIpLayerAppBucket(com.akdeniz.googleplaycrawler.GooglePlay.AppBucket value) {
        if (ipLayerAppBucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIpLayerAppBucketIsMutable();
          ipLayerAppBucket_.add(value);
          onChanged();
        } else {
          ipLayerAppBucketBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public Builder addIpLayerAppBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket value) {
        if (ipLayerAppBucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIpLayerAppBucketIsMutable();
          ipLayerAppBucket_.add(index, value);
          onChanged();
        } else {
          ipLayerAppBucketBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public Builder addIpLayerAppBucket(
          com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder builderForValue) {
        if (ipLayerAppBucketBuilder_ == null) {
          ensureIpLayerAppBucketIsMutable();
          ipLayerAppBucket_.add(builderForValue.build());
          onChanged();
        } else {
          ipLayerAppBucketBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public Builder addIpLayerAppBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder builderForValue) {
        if (ipLayerAppBucketBuilder_ == null) {
          ensureIpLayerAppBucketIsMutable();
          ipLayerAppBucket_.add(index, builderForValue.build());
          onChanged();
        } else {
          ipLayerAppBucketBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public Builder addAllIpLayerAppBucket(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.AppBucket> values) {
        if (ipLayerAppBucketBuilder_ == null) {
          ensureIpLayerAppBucketIsMutable();
          super.addAll(values, ipLayerAppBucket_);
          onChanged();
        } else {
          ipLayerAppBucketBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public Builder clearIpLayerAppBucket() {
        if (ipLayerAppBucketBuilder_ == null) {
          ipLayerAppBucket_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          ipLayerAppBucketBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public Builder removeIpLayerAppBucket(int index) {
        if (ipLayerAppBucketBuilder_ == null) {
          ensureIpLayerAppBucketIsMutable();
          ipLayerAppBucket_.remove(index);
          onChanged();
        } else {
          ipLayerAppBucketBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder getIpLayerAppBucketBuilder(
          int index) {
        return getIpLayerAppBucketFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder getIpLayerAppBucketOrBuilder(
          int index) {
        if (ipLayerAppBucketBuilder_ == null) {
          return ipLayerAppBucket_.get(index);  } else {
          return ipLayerAppBucketBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder> 
           getIpLayerAppBucketOrBuilderList() {
        if (ipLayerAppBucketBuilder_ != null) {
          return ipLayerAppBucketBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(ipLayerAppBucket_);
        }
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder addIpLayerAppBucketBuilder() {
        return getIpLayerAppBucketFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.getDefaultInstance());
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder addIpLayerAppBucketBuilder(
          int index) {
        return getIpLayerAppBucketFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.getDefaultInstance());
      }
      /**
       * <code>repeated .AppBucket ipLayerAppBucket = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder> 
           getIpLayerAppBucketBuilderList() {
        return getIpLayerAppBucketFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AppBucket, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder> 
          getIpLayerAppBucketFieldBuilder() {
        if (ipLayerAppBucketBuilder_ == null) {
          ipLayerAppBucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AppBucket, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder>(
                  ipLayerAppBucket_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          ipLayerAppBucket_ = null;
        }
        return ipLayerAppBucketBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:IpLayerAppStat)
    }

    static {
      defaultInstance = new IpLayerAppStat(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:IpLayerAppStat)
  }

  public interface IpLayerNetworkBucketOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int64 bucketStartMsec = 1;
    /**
     * <code>optional int64 bucketStartMsec = 1;</code>
     */
    boolean hasBucketStartMsec();
    /**
     * <code>optional int64 bucketStartMsec = 1;</code>
     */
    long getBucketStartMsec();

    // optional int64 bucketDurationMsec = 2;
    /**
     * <code>optional int64 bucketDurationMsec = 2;</code>
     */
    boolean hasBucketDurationMsec();
    /**
     * <code>optional int64 bucketDurationMsec = 2;</code>
     */
    long getBucketDurationMsec();

    // repeated .StatCounters statCounters = 3;
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters> 
        getStatCountersList();
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.StatCounters getStatCounters(int index);
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    int getStatCountersCount();
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder> 
        getStatCountersOrBuilderList();
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder getStatCountersOrBuilder(
        int index);

    // optional int64 networkActiveDuration = 4;
    /**
     * <code>optional int64 networkActiveDuration = 4;</code>
     */
    boolean hasNetworkActiveDuration();
    /**
     * <code>optional int64 networkActiveDuration = 4;</code>
     */
    long getNetworkActiveDuration();
  }
  /**
   * Protobuf type {@code IpLayerNetworkBucket}
   */
  public static final class IpLayerNetworkBucket extends
      com.google.protobuf.GeneratedMessage
      implements IpLayerNetworkBucketOrBuilder {
    // Use IpLayerNetworkBucket.newBuilder() to construct.
    private IpLayerNetworkBucket(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private IpLayerNetworkBucket(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final IpLayerNetworkBucket defaultInstance;
    public static IpLayerNetworkBucket getDefaultInstance() {
      return defaultInstance;
    }

    public IpLayerNetworkBucket getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private IpLayerNetworkBucket(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              bucketStartMsec_ = input.readInt64();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              bucketDurationMsec_ = input.readInt64();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                statCounters_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters>();
                mutable_bitField0_ |= 0x00000004;
              }
              statCounters_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.PARSER, extensionRegistry));
              break;
            }
            case 32: {
              bitField0_ |= 0x00000004;
              networkActiveDuration_ = input.readInt64();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          statCounters_ = java.util.Collections.unmodifiableList(statCounters_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerNetworkBucket_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerNetworkBucket_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.class, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.Builder.class);
    }

    public static com.google.protobuf.Parser<IpLayerNetworkBucket> PARSER =
        new com.google.protobuf.AbstractParser<IpLayerNetworkBucket>() {
      public IpLayerNetworkBucket parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new IpLayerNetworkBucket(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<IpLayerNetworkBucket> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int64 bucketStartMsec = 1;
    public static final int BUCKETSTARTMSEC_FIELD_NUMBER = 1;
    private long bucketStartMsec_;
    /**
     * <code>optional int64 bucketStartMsec = 1;</code>
     */
    public boolean hasBucketStartMsec() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int64 bucketStartMsec = 1;</code>
     */
    public long getBucketStartMsec() {
      return bucketStartMsec_;
    }

    // optional int64 bucketDurationMsec = 2;
    public static final int BUCKETDURATIONMSEC_FIELD_NUMBER = 2;
    private long bucketDurationMsec_;
    /**
     * <code>optional int64 bucketDurationMsec = 2;</code>
     */
    public boolean hasBucketDurationMsec() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int64 bucketDurationMsec = 2;</code>
     */
    public long getBucketDurationMsec() {
      return bucketDurationMsec_;
    }

    // repeated .StatCounters statCounters = 3;
    public static final int STATCOUNTERS_FIELD_NUMBER = 3;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters> statCounters_;
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters> getStatCountersList() {
      return statCounters_;
    }
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder> 
        getStatCountersOrBuilderList() {
      return statCounters_;
    }
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    public int getStatCountersCount() {
      return statCounters_.size();
    }
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.StatCounters getStatCounters(int index) {
      return statCounters_.get(index);
    }
    /**
     * <code>repeated .StatCounters statCounters = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder getStatCountersOrBuilder(
        int index) {
      return statCounters_.get(index);
    }

    // optional int64 networkActiveDuration = 4;
    public static final int NETWORKACTIVEDURATION_FIELD_NUMBER = 4;
    private long networkActiveDuration_;
    /**
     * <code>optional int64 networkActiveDuration = 4;</code>
     */
    public boolean hasNetworkActiveDuration() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional int64 networkActiveDuration = 4;</code>
     */
    public long getNetworkActiveDuration() {
      return networkActiveDuration_;
    }

    private void initFields() {
      bucketStartMsec_ = 0L;
      bucketDurationMsec_ = 0L;
      statCounters_ = java.util.Collections.emptyList();
      networkActiveDuration_ = 0L;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt64(1, bucketStartMsec_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, bucketDurationMsec_);
      }
      for (int i = 0; i < statCounters_.size(); i++) {
        output.writeMessage(3, statCounters_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(4, networkActiveDuration_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, bucketStartMsec_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, bucketDurationMsec_);
      }
      for (int i = 0; i < statCounters_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, statCounters_.get(i));
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, networkActiveDuration_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code IpLayerNetworkBucket}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucketOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerNetworkBucket_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerNetworkBucket_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.class, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getStatCountersFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        bucketStartMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        bucketDurationMsec_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (statCountersBuilder_ == null) {
          statCounters_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          statCountersBuilder_.clear();
        }
        networkActiveDuration_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerNetworkBucket_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket build() {
        com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket result = new com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.bucketStartMsec_ = bucketStartMsec_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.bucketDurationMsec_ = bucketDurationMsec_;
        if (statCountersBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            statCounters_ = java.util.Collections.unmodifiableList(statCounters_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.statCounters_ = statCounters_;
        } else {
          result.statCounters_ = statCountersBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.networkActiveDuration_ = networkActiveDuration_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.getDefaultInstance()) return this;
        if (other.hasBucketStartMsec()) {
          setBucketStartMsec(other.getBucketStartMsec());
        }
        if (other.hasBucketDurationMsec()) {
          setBucketDurationMsec(other.getBucketDurationMsec());
        }
        if (statCountersBuilder_ == null) {
          if (!other.statCounters_.isEmpty()) {
            if (statCounters_.isEmpty()) {
              statCounters_ = other.statCounters_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureStatCountersIsMutable();
              statCounters_.addAll(other.statCounters_);
            }
            onChanged();
          }
        } else {
          if (!other.statCounters_.isEmpty()) {
            if (statCountersBuilder_.isEmpty()) {
              statCountersBuilder_.dispose();
              statCountersBuilder_ = null;
              statCounters_ = other.statCounters_;
              bitField0_ = (bitField0_ & ~0x00000004);
              statCountersBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getStatCountersFieldBuilder() : null;
            } else {
              statCountersBuilder_.addAllMessages(other.statCounters_);
            }
          }
        }
        if (other.hasNetworkActiveDuration()) {
          setNetworkActiveDuration(other.getNetworkActiveDuration());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int64 bucketStartMsec = 1;
      private long bucketStartMsec_ ;
      /**
       * <code>optional int64 bucketStartMsec = 1;</code>
       */
      public boolean hasBucketStartMsec() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int64 bucketStartMsec = 1;</code>
       */
      public long getBucketStartMsec() {
        return bucketStartMsec_;
      }
      /**
       * <code>optional int64 bucketStartMsec = 1;</code>
       */
      public Builder setBucketStartMsec(long value) {
        bitField0_ |= 0x00000001;
        bucketStartMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 bucketStartMsec = 1;</code>
       */
      public Builder clearBucketStartMsec() {
        bitField0_ = (bitField0_ & ~0x00000001);
        bucketStartMsec_ = 0L;
        onChanged();
        return this;
      }

      // optional int64 bucketDurationMsec = 2;
      private long bucketDurationMsec_ ;
      /**
       * <code>optional int64 bucketDurationMsec = 2;</code>
       */
      public boolean hasBucketDurationMsec() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int64 bucketDurationMsec = 2;</code>
       */
      public long getBucketDurationMsec() {
        return bucketDurationMsec_;
      }
      /**
       * <code>optional int64 bucketDurationMsec = 2;</code>
       */
      public Builder setBucketDurationMsec(long value) {
        bitField0_ |= 0x00000002;
        bucketDurationMsec_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 bucketDurationMsec = 2;</code>
       */
      public Builder clearBucketDurationMsec() {
        bitField0_ = (bitField0_ & ~0x00000002);
        bucketDurationMsec_ = 0L;
        onChanged();
        return this;
      }

      // repeated .StatCounters statCounters = 3;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters> statCounters_ =
        java.util.Collections.emptyList();
      private void ensureStatCountersIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          statCounters_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters>(statCounters_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.StatCounters, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder, com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder> statCountersBuilder_;

      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters> getStatCountersList() {
        if (statCountersBuilder_ == null) {
          return java.util.Collections.unmodifiableList(statCounters_);
        } else {
          return statCountersBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public int getStatCountersCount() {
        if (statCountersBuilder_ == null) {
          return statCounters_.size();
        } else {
          return statCountersBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.StatCounters getStatCounters(int index) {
        if (statCountersBuilder_ == null) {
          return statCounters_.get(index);
        } else {
          return statCountersBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder setStatCounters(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters value) {
        if (statCountersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStatCountersIsMutable();
          statCounters_.set(index, value);
          onChanged();
        } else {
          statCountersBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder setStatCounters(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder builderForValue) {
        if (statCountersBuilder_ == null) {
          ensureStatCountersIsMutable();
          statCounters_.set(index, builderForValue.build());
          onChanged();
        } else {
          statCountersBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder addStatCounters(com.akdeniz.googleplaycrawler.GooglePlay.StatCounters value) {
        if (statCountersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStatCountersIsMutable();
          statCounters_.add(value);
          onChanged();
        } else {
          statCountersBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder addStatCounters(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters value) {
        if (statCountersBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureStatCountersIsMutable();
          statCounters_.add(index, value);
          onChanged();
        } else {
          statCountersBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder addStatCounters(
          com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder builderForValue) {
        if (statCountersBuilder_ == null) {
          ensureStatCountersIsMutable();
          statCounters_.add(builderForValue.build());
          onChanged();
        } else {
          statCountersBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder addStatCounters(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder builderForValue) {
        if (statCountersBuilder_ == null) {
          ensureStatCountersIsMutable();
          statCounters_.add(index, builderForValue.build());
          onChanged();
        } else {
          statCountersBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder addAllStatCounters(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.StatCounters> values) {
        if (statCountersBuilder_ == null) {
          ensureStatCountersIsMutable();
          super.addAll(values, statCounters_);
          onChanged();
        } else {
          statCountersBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder clearStatCounters() {
        if (statCountersBuilder_ == null) {
          statCounters_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          statCountersBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public Builder removeStatCounters(int index) {
        if (statCountersBuilder_ == null) {
          ensureStatCountersIsMutable();
          statCounters_.remove(index);
          onChanged();
        } else {
          statCountersBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder getStatCountersBuilder(
          int index) {
        return getStatCountersFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder getStatCountersOrBuilder(
          int index) {
        if (statCountersBuilder_ == null) {
          return statCounters_.get(index);  } else {
          return statCountersBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder> 
           getStatCountersOrBuilderList() {
        if (statCountersBuilder_ != null) {
          return statCountersBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(statCounters_);
        }
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder addStatCountersBuilder() {
        return getStatCountersFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.getDefaultInstance());
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder addStatCountersBuilder(
          int index) {
        return getStatCountersFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.getDefaultInstance());
      }
      /**
       * <code>repeated .StatCounters statCounters = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder> 
           getStatCountersBuilderList() {
        return getStatCountersFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.StatCounters, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder, com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder> 
          getStatCountersFieldBuilder() {
        if (statCountersBuilder_ == null) {
          statCountersBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.StatCounters, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder, com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder>(
                  statCounters_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          statCounters_ = null;
        }
        return statCountersBuilder_;
      }

      // optional int64 networkActiveDuration = 4;
      private long networkActiveDuration_ ;
      /**
       * <code>optional int64 networkActiveDuration = 4;</code>
       */
      public boolean hasNetworkActiveDuration() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int64 networkActiveDuration = 4;</code>
       */
      public long getNetworkActiveDuration() {
        return networkActiveDuration_;
      }
      /**
       * <code>optional int64 networkActiveDuration = 4;</code>
       */
      public Builder setNetworkActiveDuration(long value) {
        bitField0_ |= 0x00000008;
        networkActiveDuration_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int64 networkActiveDuration = 4;</code>
       */
      public Builder clearNetworkActiveDuration() {
        bitField0_ = (bitField0_ & ~0x00000008);
        networkActiveDuration_ = 0L;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:IpLayerNetworkBucket)
    }

    static {
      defaultInstance = new IpLayerNetworkBucket(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:IpLayerNetworkBucket)
  }

  public interface IpLayerNetworkStatOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string networkDetails = 1;
    /**
     * <code>optional string networkDetails = 1;</code>
     */
    boolean hasNetworkDetails();
    /**
     * <code>optional string networkDetails = 1;</code>
     */
    java.lang.String getNetworkDetails();
    /**
     * <code>optional string networkDetails = 1;</code>
     */
    com.google.protobuf.ByteString
        getNetworkDetailsBytes();

    // optional int32 type = 2;
    /**
     * <code>optional int32 type = 2;</code>
     */
    boolean hasType();
    /**
     * <code>optional int32 type = 2;</code>
     */
    int getType();

    // repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;
    /**
     * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket> 
        getIpLayerNetworkBucketList();
    /**
     * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket getIpLayerNetworkBucket(int index);
    /**
     * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
     */
    int getIpLayerNetworkBucketCount();
    /**
     * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucketOrBuilder> 
        getIpLayerNetworkBucketOrBuilderList();
    /**
     * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucketOrBuilder getIpLayerNetworkBucketOrBuilder(
        int index);

    // repeated .IpLayerAppStat ipLayerAppStat = 4;
    /**
     * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat> 
        getIpLayerAppStatList();
    /**
     * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat getIpLayerAppStat(int index);
    /**
     * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
     */
    int getIpLayerAppStatCount();
    /**
     * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStatOrBuilder> 
        getIpLayerAppStatOrBuilderList();
    /**
     * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStatOrBuilder getIpLayerAppStatOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code IpLayerNetworkStat}
   */
  public static final class IpLayerNetworkStat extends
      com.google.protobuf.GeneratedMessage
      implements IpLayerNetworkStatOrBuilder {
    // Use IpLayerNetworkStat.newBuilder() to construct.
    private IpLayerNetworkStat(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private IpLayerNetworkStat(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final IpLayerNetworkStat defaultInstance;
    public static IpLayerNetworkStat getDefaultInstance() {
      return defaultInstance;
    }

    public IpLayerNetworkStat getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private IpLayerNetworkStat(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              networkDetails_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              type_ = input.readInt32();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                ipLayerNetworkBucket_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket>();
                mutable_bitField0_ |= 0x00000004;
              }
              ipLayerNetworkBucket_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.PARSER, extensionRegistry));
              break;
            }
            case 34: {
              if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
                ipLayerAppStat_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat>();
                mutable_bitField0_ |= 0x00000008;
              }
              ipLayerAppStat_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          ipLayerNetworkBucket_ = java.util.Collections.unmodifiableList(ipLayerNetworkBucket_);
        }
        if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) {
          ipLayerAppStat_ = java.util.Collections.unmodifiableList(ipLayerAppStat_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerNetworkStat_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerNetworkStat_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.class, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.Builder.class);
    }

    public static com.google.protobuf.Parser<IpLayerNetworkStat> PARSER =
        new com.google.protobuf.AbstractParser<IpLayerNetworkStat>() {
      public IpLayerNetworkStat parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new IpLayerNetworkStat(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<IpLayerNetworkStat> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string networkDetails = 1;
    public static final int NETWORKDETAILS_FIELD_NUMBER = 1;
    private java.lang.Object networkDetails_;
    /**
     * <code>optional string networkDetails = 1;</code>
     */
    public boolean hasNetworkDetails() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string networkDetails = 1;</code>
     */
    public java.lang.String getNetworkDetails() {
      java.lang.Object ref = networkDetails_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          networkDetails_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string networkDetails = 1;</code>
     */
    public com.google.protobuf.ByteString
        getNetworkDetailsBytes() {
      java.lang.Object ref = networkDetails_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        networkDetails_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 type = 2;
    public static final int TYPE_FIELD_NUMBER = 2;
    private int type_;
    /**
     * <code>optional int32 type = 2;</code>
     */
    public boolean hasType() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 type = 2;</code>
     */
    public int getType() {
      return type_;
    }

    // repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;
    public static final int IPLAYERNETWORKBUCKET_FIELD_NUMBER = 3;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket> ipLayerNetworkBucket_;
    /**
     * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket> getIpLayerNetworkBucketList() {
      return ipLayerNetworkBucket_;
    }
    /**
     * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucketOrBuilder> 
        getIpLayerNetworkBucketOrBuilderList() {
      return ipLayerNetworkBucket_;
    }
    /**
     * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
     */
    public int getIpLayerNetworkBucketCount() {
      return ipLayerNetworkBucket_.size();
    }
    /**
     * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket getIpLayerNetworkBucket(int index) {
      return ipLayerNetworkBucket_.get(index);
    }
    /**
     * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucketOrBuilder getIpLayerNetworkBucketOrBuilder(
        int index) {
      return ipLayerNetworkBucket_.get(index);
    }

    // repeated .IpLayerAppStat ipLayerAppStat = 4;
    public static final int IPLAYERAPPSTAT_FIELD_NUMBER = 4;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat> ipLayerAppStat_;
    /**
     * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat> getIpLayerAppStatList() {
      return ipLayerAppStat_;
    }
    /**
     * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStatOrBuilder> 
        getIpLayerAppStatOrBuilderList() {
      return ipLayerAppStat_;
    }
    /**
     * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
     */
    public int getIpLayerAppStatCount() {
      return ipLayerAppStat_.size();
    }
    /**
     * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat getIpLayerAppStat(int index) {
      return ipLayerAppStat_.get(index);
    }
    /**
     * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStatOrBuilder getIpLayerAppStatOrBuilder(
        int index) {
      return ipLayerAppStat_.get(index);
    }

    private void initFields() {
      networkDetails_ = "";
      type_ = 0;
      ipLayerNetworkBucket_ = java.util.Collections.emptyList();
      ipLayerAppStat_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getNetworkDetailsBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, type_);
      }
      for (int i = 0; i < ipLayerNetworkBucket_.size(); i++) {
        output.writeMessage(3, ipLayerNetworkBucket_.get(i));
      }
      for (int i = 0; i < ipLayerAppStat_.size(); i++) {
        output.writeMessage(4, ipLayerAppStat_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getNetworkDetailsBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, type_);
      }
      for (int i = 0; i < ipLayerNetworkBucket_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, ipLayerNetworkBucket_.get(i));
      }
      for (int i = 0; i < ipLayerAppStat_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, ipLayerAppStat_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code IpLayerNetworkStat}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStatOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerNetworkStat_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerNetworkStat_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.class, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getIpLayerNetworkBucketFieldBuilder();
          getIpLayerAppStatFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        networkDetails_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        type_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (ipLayerNetworkBucketBuilder_ == null) {
          ipLayerNetworkBucket_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          ipLayerNetworkBucketBuilder_.clear();
        }
        if (ipLayerAppStatBuilder_ == null) {
          ipLayerAppStat_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
        } else {
          ipLayerAppStatBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_IpLayerNetworkStat_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat build() {
        com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat result = new com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.networkDetails_ = networkDetails_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.type_ = type_;
        if (ipLayerNetworkBucketBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            ipLayerNetworkBucket_ = java.util.Collections.unmodifiableList(ipLayerNetworkBucket_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.ipLayerNetworkBucket_ = ipLayerNetworkBucket_;
        } else {
          result.ipLayerNetworkBucket_ = ipLayerNetworkBucketBuilder_.build();
        }
        if (ipLayerAppStatBuilder_ == null) {
          if (((bitField0_ & 0x00000008) == 0x00000008)) {
            ipLayerAppStat_ = java.util.Collections.unmodifiableList(ipLayerAppStat_);
            bitField0_ = (bitField0_ & ~0x00000008);
          }
          result.ipLayerAppStat_ = ipLayerAppStat_;
        } else {
          result.ipLayerAppStat_ = ipLayerAppStatBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat.getDefaultInstance()) return this;
        if (other.hasNetworkDetails()) {
          bitField0_ |= 0x00000001;
          networkDetails_ = other.networkDetails_;
          onChanged();
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        if (ipLayerNetworkBucketBuilder_ == null) {
          if (!other.ipLayerNetworkBucket_.isEmpty()) {
            if (ipLayerNetworkBucket_.isEmpty()) {
              ipLayerNetworkBucket_ = other.ipLayerNetworkBucket_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureIpLayerNetworkBucketIsMutable();
              ipLayerNetworkBucket_.addAll(other.ipLayerNetworkBucket_);
            }
            onChanged();
          }
        } else {
          if (!other.ipLayerNetworkBucket_.isEmpty()) {
            if (ipLayerNetworkBucketBuilder_.isEmpty()) {
              ipLayerNetworkBucketBuilder_.dispose();
              ipLayerNetworkBucketBuilder_ = null;
              ipLayerNetworkBucket_ = other.ipLayerNetworkBucket_;
              bitField0_ = (bitField0_ & ~0x00000004);
              ipLayerNetworkBucketBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getIpLayerNetworkBucketFieldBuilder() : null;
            } else {
              ipLayerNetworkBucketBuilder_.addAllMessages(other.ipLayerNetworkBucket_);
            }
          }
        }
        if (ipLayerAppStatBuilder_ == null) {
          if (!other.ipLayerAppStat_.isEmpty()) {
            if (ipLayerAppStat_.isEmpty()) {
              ipLayerAppStat_ = other.ipLayerAppStat_;
              bitField0_ = (bitField0_ & ~0x00000008);
            } else {
              ensureIpLayerAppStatIsMutable();
              ipLayerAppStat_.addAll(other.ipLayerAppStat_);
            }
            onChanged();
          }
        } else {
          if (!other.ipLayerAppStat_.isEmpty()) {
            if (ipLayerAppStatBuilder_.isEmpty()) {
              ipLayerAppStatBuilder_.dispose();
              ipLayerAppStatBuilder_ = null;
              ipLayerAppStat_ = other.ipLayerAppStat_;
              bitField0_ = (bitField0_ & ~0x00000008);
              ipLayerAppStatBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getIpLayerAppStatFieldBuilder() : null;
            } else {
              ipLayerAppStatBuilder_.addAllMessages(other.ipLayerAppStat_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkStat) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string networkDetails = 1;
      private java.lang.Object networkDetails_ = "";
      /**
       * <code>optional string networkDetails = 1;</code>
       */
      public boolean hasNetworkDetails() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string networkDetails = 1;</code>
       */
      public java.lang.String getNetworkDetails() {
        java.lang.Object ref = networkDetails_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          networkDetails_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string networkDetails = 1;</code>
       */
      public com.google.protobuf.ByteString
          getNetworkDetailsBytes() {
        java.lang.Object ref = networkDetails_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          networkDetails_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string networkDetails = 1;</code>
       */
      public Builder setNetworkDetails(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        networkDetails_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string networkDetails = 1;</code>
       */
      public Builder clearNetworkDetails() {
        bitField0_ = (bitField0_ & ~0x00000001);
        networkDetails_ = getDefaultInstance().getNetworkDetails();
        onChanged();
        return this;
      }
      /**
       * <code>optional string networkDetails = 1;</code>
       */
      public Builder setNetworkDetailsBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        networkDetails_ = value;
        onChanged();
        return this;
      }

      // optional int32 type = 2;
      private int type_ ;
      /**
       * <code>optional int32 type = 2;</code>
       */
      public boolean hasType() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 type = 2;</code>
       */
      public int getType() {
        return type_;
      }
      /**
       * <code>optional int32 type = 2;</code>
       */
      public Builder setType(int value) {
        bitField0_ |= 0x00000002;
        type_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 type = 2;</code>
       */
      public Builder clearType() {
        bitField0_ = (bitField0_ & ~0x00000002);
        type_ = 0;
        onChanged();
        return this;
      }

      // repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket> ipLayerNetworkBucket_ =
        java.util.Collections.emptyList();
      private void ensureIpLayerNetworkBucketIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          ipLayerNetworkBucket_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket>(ipLayerNetworkBucket_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucketOrBuilder> ipLayerNetworkBucketBuilder_;

      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket> getIpLayerNetworkBucketList() {
        if (ipLayerNetworkBucketBuilder_ == null) {
          return java.util.Collections.unmodifiableList(ipLayerNetworkBucket_);
        } else {
          return ipLayerNetworkBucketBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public int getIpLayerNetworkBucketCount() {
        if (ipLayerNetworkBucketBuilder_ == null) {
          return ipLayerNetworkBucket_.size();
        } else {
          return ipLayerNetworkBucketBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket getIpLayerNetworkBucket(int index) {
        if (ipLayerNetworkBucketBuilder_ == null) {
          return ipLayerNetworkBucket_.get(index);
        } else {
          return ipLayerNetworkBucketBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public Builder setIpLayerNetworkBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket value) {
        if (ipLayerNetworkBucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIpLayerNetworkBucketIsMutable();
          ipLayerNetworkBucket_.set(index, value);
          onChanged();
        } else {
          ipLayerNetworkBucketBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public Builder setIpLayerNetworkBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.Builder builderForValue) {
        if (ipLayerNetworkBucketBuilder_ == null) {
          ensureIpLayerNetworkBucketIsMutable();
          ipLayerNetworkBucket_.set(index, builderForValue.build());
          onChanged();
        } else {
          ipLayerNetworkBucketBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public Builder addIpLayerNetworkBucket(com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket value) {
        if (ipLayerNetworkBucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIpLayerNetworkBucketIsMutable();
          ipLayerNetworkBucket_.add(value);
          onChanged();
        } else {
          ipLayerNetworkBucketBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public Builder addIpLayerNetworkBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket value) {
        if (ipLayerNetworkBucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIpLayerNetworkBucketIsMutable();
          ipLayerNetworkBucket_.add(index, value);
          onChanged();
        } else {
          ipLayerNetworkBucketBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public Builder addIpLayerNetworkBucket(
          com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.Builder builderForValue) {
        if (ipLayerNetworkBucketBuilder_ == null) {
          ensureIpLayerNetworkBucketIsMutable();
          ipLayerNetworkBucket_.add(builderForValue.build());
          onChanged();
        } else {
          ipLayerNetworkBucketBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public Builder addIpLayerNetworkBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.Builder builderForValue) {
        if (ipLayerNetworkBucketBuilder_ == null) {
          ensureIpLayerNetworkBucketIsMutable();
          ipLayerNetworkBucket_.add(index, builderForValue.build());
          onChanged();
        } else {
          ipLayerNetworkBucketBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public Builder addAllIpLayerNetworkBucket(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket> values) {
        if (ipLayerNetworkBucketBuilder_ == null) {
          ensureIpLayerNetworkBucketIsMutable();
          super.addAll(values, ipLayerNetworkBucket_);
          onChanged();
        } else {
          ipLayerNetworkBucketBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public Builder clearIpLayerNetworkBucket() {
        if (ipLayerNetworkBucketBuilder_ == null) {
          ipLayerNetworkBucket_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          ipLayerNetworkBucketBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public Builder removeIpLayerNetworkBucket(int index) {
        if (ipLayerNetworkBucketBuilder_ == null) {
          ensureIpLayerNetworkBucketIsMutable();
          ipLayerNetworkBucket_.remove(index);
          onChanged();
        } else {
          ipLayerNetworkBucketBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.Builder getIpLayerNetworkBucketBuilder(
          int index) {
        return getIpLayerNetworkBucketFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucketOrBuilder getIpLayerNetworkBucketOrBuilder(
          int index) {
        if (ipLayerNetworkBucketBuilder_ == null) {
          return ipLayerNetworkBucket_.get(index);  } else {
          return ipLayerNetworkBucketBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucketOrBuilder> 
           getIpLayerNetworkBucketOrBuilderList() {
        if (ipLayerNetworkBucketBuilder_ != null) {
          return ipLayerNetworkBucketBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(ipLayerNetworkBucket_);
        }
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.Builder addIpLayerNetworkBucketBuilder() {
        return getIpLayerNetworkBucketFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.getDefaultInstance());
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.Builder addIpLayerNetworkBucketBuilder(
          int index) {
        return getIpLayerNetworkBucketFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.getDefaultInstance());
      }
      /**
       * <code>repeated .IpLayerNetworkBucket ipLayerNetworkBucket = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.Builder> 
           getIpLayerNetworkBucketBuilderList() {
        return getIpLayerNetworkBucketFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucketOrBuilder> 
          getIpLayerNetworkBucketFieldBuilder() {
        if (ipLayerNetworkBucketBuilder_ == null) {
          ipLayerNetworkBucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerNetworkBucketOrBuilder>(
                  ipLayerNetworkBucket_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          ipLayerNetworkBucket_ = null;
        }
        return ipLayerNetworkBucketBuilder_;
      }

      // repeated .IpLayerAppStat ipLayerAppStat = 4;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat> ipLayerAppStat_ =
        java.util.Collections.emptyList();
      private void ensureIpLayerAppStatIsMutable() {
        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
          ipLayerAppStat_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat>(ipLayerAppStat_);
          bitField0_ |= 0x00000008;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.Builder, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStatOrBuilder> ipLayerAppStatBuilder_;

      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat> getIpLayerAppStatList() {
        if (ipLayerAppStatBuilder_ == null) {
          return java.util.Collections.unmodifiableList(ipLayerAppStat_);
        } else {
          return ipLayerAppStatBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public int getIpLayerAppStatCount() {
        if (ipLayerAppStatBuilder_ == null) {
          return ipLayerAppStat_.size();
        } else {
          return ipLayerAppStatBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat getIpLayerAppStat(int index) {
        if (ipLayerAppStatBuilder_ == null) {
          return ipLayerAppStat_.get(index);
        } else {
          return ipLayerAppStatBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public Builder setIpLayerAppStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat value) {
        if (ipLayerAppStatBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIpLayerAppStatIsMutable();
          ipLayerAppStat_.set(index, value);
          onChanged();
        } else {
          ipLayerAppStatBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public Builder setIpLayerAppStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.Builder builderForValue) {
        if (ipLayerAppStatBuilder_ == null) {
          ensureIpLayerAppStatIsMutable();
          ipLayerAppStat_.set(index, builderForValue.build());
          onChanged();
        } else {
          ipLayerAppStatBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public Builder addIpLayerAppStat(com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat value) {
        if (ipLayerAppStatBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIpLayerAppStatIsMutable();
          ipLayerAppStat_.add(value);
          onChanged();
        } else {
          ipLayerAppStatBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public Builder addIpLayerAppStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat value) {
        if (ipLayerAppStatBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureIpLayerAppStatIsMutable();
          ipLayerAppStat_.add(index, value);
          onChanged();
        } else {
          ipLayerAppStatBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public Builder addIpLayerAppStat(
          com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.Builder builderForValue) {
        if (ipLayerAppStatBuilder_ == null) {
          ensureIpLayerAppStatIsMutable();
          ipLayerAppStat_.add(builderForValue.build());
          onChanged();
        } else {
          ipLayerAppStatBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public Builder addIpLayerAppStat(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.Builder builderForValue) {
        if (ipLayerAppStatBuilder_ == null) {
          ensureIpLayerAppStatIsMutable();
          ipLayerAppStat_.add(index, builderForValue.build());
          onChanged();
        } else {
          ipLayerAppStatBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public Builder addAllIpLayerAppStat(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat> values) {
        if (ipLayerAppStatBuilder_ == null) {
          ensureIpLayerAppStatIsMutable();
          super.addAll(values, ipLayerAppStat_);
          onChanged();
        } else {
          ipLayerAppStatBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public Builder clearIpLayerAppStat() {
        if (ipLayerAppStatBuilder_ == null) {
          ipLayerAppStat_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000008);
          onChanged();
        } else {
          ipLayerAppStatBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public Builder removeIpLayerAppStat(int index) {
        if (ipLayerAppStatBuilder_ == null) {
          ensureIpLayerAppStatIsMutable();
          ipLayerAppStat_.remove(index);
          onChanged();
        } else {
          ipLayerAppStatBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.Builder getIpLayerAppStatBuilder(
          int index) {
        return getIpLayerAppStatFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStatOrBuilder getIpLayerAppStatOrBuilder(
          int index) {
        if (ipLayerAppStatBuilder_ == null) {
          return ipLayerAppStat_.get(index);  } else {
          return ipLayerAppStatBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStatOrBuilder> 
           getIpLayerAppStatOrBuilderList() {
        if (ipLayerAppStatBuilder_ != null) {
          return ipLayerAppStatBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(ipLayerAppStat_);
        }
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.Builder addIpLayerAppStatBuilder() {
        return getIpLayerAppStatFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.getDefaultInstance());
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.Builder addIpLayerAppStatBuilder(
          int index) {
        return getIpLayerAppStatFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.getDefaultInstance());
      }
      /**
       * <code>repeated .IpLayerAppStat ipLayerAppStat = 4;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.Builder> 
           getIpLayerAppStatBuilderList() {
        return getIpLayerAppStatFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.Builder, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStatOrBuilder> 
          getIpLayerAppStatFieldBuilder() {
        if (ipLayerAppStatBuilder_ == null) {
          ipLayerAppStatBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStat.Builder, com.akdeniz.googleplaycrawler.GooglePlay.IpLayerAppStatOrBuilder>(
                  ipLayerAppStat_,
                  ((bitField0_ & 0x00000008) == 0x00000008),
                  getParentForChildren(),
                  isClean());
          ipLayerAppStat_ = null;
        }
        return ipLayerAppStatBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:IpLayerNetworkStat)
    }

    static {
      defaultInstance = new IpLayerNetworkStat(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:IpLayerNetworkStat)
  }

  public interface KeyToPackageNameMappingOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 packageKey = 1;
    /**
     * <code>optional int32 packageKey = 1;</code>
     */
    boolean hasPackageKey();
    /**
     * <code>optional int32 packageKey = 1;</code>
     */
    int getPackageKey();

    // optional string uidName = 2;
    /**
     * <code>optional string uidName = 2;</code>
     */
    boolean hasUidName();
    /**
     * <code>optional string uidName = 2;</code>
     */
    java.lang.String getUidName();
    /**
     * <code>optional string uidName = 2;</code>
     */
    com.google.protobuf.ByteString
        getUidNameBytes();

    // repeated .PackageInfo sharedPackageList = 3;
    /**
     * <code>repeated .PackageInfo sharedPackageList = 3;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo> 
        getSharedPackageListList();
    /**
     * <code>repeated .PackageInfo sharedPackageList = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo getSharedPackageList(int index);
    /**
     * <code>repeated .PackageInfo sharedPackageList = 3;</code>
     */
    int getSharedPackageListCount();
    /**
     * <code>repeated .PackageInfo sharedPackageList = 3;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.PackageInfoOrBuilder> 
        getSharedPackageListOrBuilderList();
    /**
     * <code>repeated .PackageInfo sharedPackageList = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.PackageInfoOrBuilder getSharedPackageListOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code KeyToPackageNameMapping}
   */
  public static final class KeyToPackageNameMapping extends
      com.google.protobuf.GeneratedMessage
      implements KeyToPackageNameMappingOrBuilder {
    // Use KeyToPackageNameMapping.newBuilder() to construct.
    private KeyToPackageNameMapping(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private KeyToPackageNameMapping(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final KeyToPackageNameMapping defaultInstance;
    public static KeyToPackageNameMapping getDefaultInstance() {
      return defaultInstance;
    }

    public KeyToPackageNameMapping getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private KeyToPackageNameMapping(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              packageKey_ = input.readInt32();
              break;
            }
            case 18: {
              bitField0_ |= 0x00000002;
              uidName_ = input.readBytes();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                sharedPackageList_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo>();
                mutable_bitField0_ |= 0x00000004;
              }
              sharedPackageList_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          sharedPackageList_ = java.util.Collections.unmodifiableList(sharedPackageList_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_KeyToPackageNameMapping_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_KeyToPackageNameMapping_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.class, com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.Builder.class);
    }

    public static com.google.protobuf.Parser<KeyToPackageNameMapping> PARSER =
        new com.google.protobuf.AbstractParser<KeyToPackageNameMapping>() {
      public KeyToPackageNameMapping parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new KeyToPackageNameMapping(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<KeyToPackageNameMapping> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 packageKey = 1;
    public static final int PACKAGEKEY_FIELD_NUMBER = 1;
    private int packageKey_;
    /**
     * <code>optional int32 packageKey = 1;</code>
     */
    public boolean hasPackageKey() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 packageKey = 1;</code>
     */
    public int getPackageKey() {
      return packageKey_;
    }

    // optional string uidName = 2;
    public static final int UIDNAME_FIELD_NUMBER = 2;
    private java.lang.Object uidName_;
    /**
     * <code>optional string uidName = 2;</code>
     */
    public boolean hasUidName() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string uidName = 2;</code>
     */
    public java.lang.String getUidName() {
      java.lang.Object ref = uidName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          uidName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string uidName = 2;</code>
     */
    public com.google.protobuf.ByteString
        getUidNameBytes() {
      java.lang.Object ref = uidName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        uidName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // repeated .PackageInfo sharedPackageList = 3;
    public static final int SHAREDPACKAGELIST_FIELD_NUMBER = 3;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo> sharedPackageList_;
    /**
     * <code>repeated .PackageInfo sharedPackageList = 3;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo> getSharedPackageListList() {
      return sharedPackageList_;
    }
    /**
     * <code>repeated .PackageInfo sharedPackageList = 3;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.PackageInfoOrBuilder> 
        getSharedPackageListOrBuilderList() {
      return sharedPackageList_;
    }
    /**
     * <code>repeated .PackageInfo sharedPackageList = 3;</code>
     */
    public int getSharedPackageListCount() {
      return sharedPackageList_.size();
    }
    /**
     * <code>repeated .PackageInfo sharedPackageList = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo getSharedPackageList(int index) {
      return sharedPackageList_.get(index);
    }
    /**
     * <code>repeated .PackageInfo sharedPackageList = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.PackageInfoOrBuilder getSharedPackageListOrBuilder(
        int index) {
      return sharedPackageList_.get(index);
    }

    private void initFields() {
      packageKey_ = 0;
      uidName_ = "";
      sharedPackageList_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, packageKey_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBytes(2, getUidNameBytes());
      }
      for (int i = 0; i < sharedPackageList_.size(); i++) {
        output.writeMessage(3, sharedPackageList_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, packageKey_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getUidNameBytes());
      }
      for (int i = 0; i < sharedPackageList_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, sharedPackageList_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code KeyToPackageNameMapping}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMappingOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_KeyToPackageNameMapping_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_KeyToPackageNameMapping_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.class, com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getSharedPackageListFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        packageKey_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        uidName_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        if (sharedPackageListBuilder_ == null) {
          sharedPackageList_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          sharedPackageListBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_KeyToPackageNameMapping_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping build() {
        com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping result = new com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.packageKey_ = packageKey_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.uidName_ = uidName_;
        if (sharedPackageListBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            sharedPackageList_ = java.util.Collections.unmodifiableList(sharedPackageList_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.sharedPackageList_ = sharedPackageList_;
        } else {
          result.sharedPackageList_ = sharedPackageListBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping.getDefaultInstance()) return this;
        if (other.hasPackageKey()) {
          setPackageKey(other.getPackageKey());
        }
        if (other.hasUidName()) {
          bitField0_ |= 0x00000002;
          uidName_ = other.uidName_;
          onChanged();
        }
        if (sharedPackageListBuilder_ == null) {
          if (!other.sharedPackageList_.isEmpty()) {
            if (sharedPackageList_.isEmpty()) {
              sharedPackageList_ = other.sharedPackageList_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureSharedPackageListIsMutable();
              sharedPackageList_.addAll(other.sharedPackageList_);
            }
            onChanged();
          }
        } else {
          if (!other.sharedPackageList_.isEmpty()) {
            if (sharedPackageListBuilder_.isEmpty()) {
              sharedPackageListBuilder_.dispose();
              sharedPackageListBuilder_ = null;
              sharedPackageList_ = other.sharedPackageList_;
              bitField0_ = (bitField0_ & ~0x00000004);
              sharedPackageListBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getSharedPackageListFieldBuilder() : null;
            } else {
              sharedPackageListBuilder_.addAllMessages(other.sharedPackageList_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.KeyToPackageNameMapping) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 packageKey = 1;
      private int packageKey_ ;
      /**
       * <code>optional int32 packageKey = 1;</code>
       */
      public boolean hasPackageKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 packageKey = 1;</code>
       */
      public int getPackageKey() {
        return packageKey_;
      }
      /**
       * <code>optional int32 packageKey = 1;</code>
       */
      public Builder setPackageKey(int value) {
        bitField0_ |= 0x00000001;
        packageKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 packageKey = 1;</code>
       */
      public Builder clearPackageKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        packageKey_ = 0;
        onChanged();
        return this;
      }

      // optional string uidName = 2;
      private java.lang.Object uidName_ = "";
      /**
       * <code>optional string uidName = 2;</code>
       */
      public boolean hasUidName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string uidName = 2;</code>
       */
      public java.lang.String getUidName() {
        java.lang.Object ref = uidName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          uidName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string uidName = 2;</code>
       */
      public com.google.protobuf.ByteString
          getUidNameBytes() {
        java.lang.Object ref = uidName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          uidName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string uidName = 2;</code>
       */
      public Builder setUidName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        uidName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string uidName = 2;</code>
       */
      public Builder clearUidName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        uidName_ = getDefaultInstance().getUidName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string uidName = 2;</code>
       */
      public Builder setUidNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        uidName_ = value;
        onChanged();
        return this;
      }

      // repeated .PackageInfo sharedPackageList = 3;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo> sharedPackageList_ =
        java.util.Collections.emptyList();
      private void ensureSharedPackageListIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          sharedPackageList_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo>(sharedPackageList_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo, com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PackageInfoOrBuilder> sharedPackageListBuilder_;

      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo> getSharedPackageListList() {
        if (sharedPackageListBuilder_ == null) {
          return java.util.Collections.unmodifiableList(sharedPackageList_);
        } else {
          return sharedPackageListBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public int getSharedPackageListCount() {
        if (sharedPackageListBuilder_ == null) {
          return sharedPackageList_.size();
        } else {
          return sharedPackageListBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo getSharedPackageList(int index) {
        if (sharedPackageListBuilder_ == null) {
          return sharedPackageList_.get(index);
        } else {
          return sharedPackageListBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public Builder setSharedPackageList(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo value) {
        if (sharedPackageListBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSharedPackageListIsMutable();
          sharedPackageList_.set(index, value);
          onChanged();
        } else {
          sharedPackageListBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public Builder setSharedPackageList(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.Builder builderForValue) {
        if (sharedPackageListBuilder_ == null) {
          ensureSharedPackageListIsMutable();
          sharedPackageList_.set(index, builderForValue.build());
          onChanged();
        } else {
          sharedPackageListBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public Builder addSharedPackageList(com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo value) {
        if (sharedPackageListBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSharedPackageListIsMutable();
          sharedPackageList_.add(value);
          onChanged();
        } else {
          sharedPackageListBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public Builder addSharedPackageList(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo value) {
        if (sharedPackageListBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureSharedPackageListIsMutable();
          sharedPackageList_.add(index, value);
          onChanged();
        } else {
          sharedPackageListBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public Builder addSharedPackageList(
          com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.Builder builderForValue) {
        if (sharedPackageListBuilder_ == null) {
          ensureSharedPackageListIsMutable();
          sharedPackageList_.add(builderForValue.build());
          onChanged();
        } else {
          sharedPackageListBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public Builder addSharedPackageList(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.Builder builderForValue) {
        if (sharedPackageListBuilder_ == null) {
          ensureSharedPackageListIsMutable();
          sharedPackageList_.add(index, builderForValue.build());
          onChanged();
        } else {
          sharedPackageListBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public Builder addAllSharedPackageList(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo> values) {
        if (sharedPackageListBuilder_ == null) {
          ensureSharedPackageListIsMutable();
          super.addAll(values, sharedPackageList_);
          onChanged();
        } else {
          sharedPackageListBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public Builder clearSharedPackageList() {
        if (sharedPackageListBuilder_ == null) {
          sharedPackageList_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          sharedPackageListBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public Builder removeSharedPackageList(int index) {
        if (sharedPackageListBuilder_ == null) {
          ensureSharedPackageListIsMutable();
          sharedPackageList_.remove(index);
          onChanged();
        } else {
          sharedPackageListBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.Builder getSharedPackageListBuilder(
          int index) {
        return getSharedPackageListFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PackageInfoOrBuilder getSharedPackageListOrBuilder(
          int index) {
        if (sharedPackageListBuilder_ == null) {
          return sharedPackageList_.get(index);  } else {
          return sharedPackageListBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.PackageInfoOrBuilder> 
           getSharedPackageListOrBuilderList() {
        if (sharedPackageListBuilder_ != null) {
          return sharedPackageListBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(sharedPackageList_);
        }
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.Builder addSharedPackageListBuilder() {
        return getSharedPackageListFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.getDefaultInstance());
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.Builder addSharedPackageListBuilder(
          int index) {
        return getSharedPackageListFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.getDefaultInstance());
      }
      /**
       * <code>repeated .PackageInfo sharedPackageList = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.Builder> 
           getSharedPackageListBuilderList() {
        return getSharedPackageListFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo, com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PackageInfoOrBuilder> 
          getSharedPackageListFieldBuilder() {
        if (sharedPackageListBuilder_ == null) {
          sharedPackageListBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo, com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.Builder, com.akdeniz.googleplaycrawler.GooglePlay.PackageInfoOrBuilder>(
                  sharedPackageList_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          sharedPackageList_ = null;
        }
        return sharedPackageListBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:KeyToPackageNameMapping)
    }

    static {
      defaultInstance = new KeyToPackageNameMapping(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:KeyToPackageNameMapping)
  }

  public interface PackageInfoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional string pkgName = 1;
    /**
     * <code>optional string pkgName = 1;</code>
     */
    boolean hasPkgName();
    /**
     * <code>optional string pkgName = 1;</code>
     */
    java.lang.String getPkgName();
    /**
     * <code>optional string pkgName = 1;</code>
     */
    com.google.protobuf.ByteString
        getPkgNameBytes();

    // optional int32 versionCode = 2;
    /**
     * <code>optional int32 versionCode = 2;</code>
     */
    boolean hasVersionCode();
    /**
     * <code>optional int32 versionCode = 2;</code>
     */
    int getVersionCode();
  }
  /**
   * Protobuf type {@code PackageInfo}
   */
  public static final class PackageInfo extends
      com.google.protobuf.GeneratedMessage
      implements PackageInfoOrBuilder {
    // Use PackageInfo.newBuilder() to construct.
    private PackageInfo(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PackageInfo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final PackageInfo defaultInstance;
    public static PackageInfo getDefaultInstance() {
      return defaultInstance;
    }

    public PackageInfo getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private PackageInfo(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              bitField0_ |= 0x00000001;
              pkgName_ = input.readBytes();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              versionCode_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PackageInfo_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PackageInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.class, com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.Builder.class);
    }

    public static com.google.protobuf.Parser<PackageInfo> PARSER =
        new com.google.protobuf.AbstractParser<PackageInfo>() {
      public PackageInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new PackageInfo(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<PackageInfo> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional string pkgName = 1;
    public static final int PKGNAME_FIELD_NUMBER = 1;
    private java.lang.Object pkgName_;
    /**
     * <code>optional string pkgName = 1;</code>
     */
    public boolean hasPkgName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string pkgName = 1;</code>
     */
    public java.lang.String getPkgName() {
      java.lang.Object ref = pkgName_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        if (bs.isValidUtf8()) {
          pkgName_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string pkgName = 1;</code>
     */
    public com.google.protobuf.ByteString
        getPkgNameBytes() {
      java.lang.Object ref = pkgName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        pkgName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    // optional int32 versionCode = 2;
    public static final int VERSIONCODE_FIELD_NUMBER = 2;
    private int versionCode_;
    /**
     * <code>optional int32 versionCode = 2;</code>
     */
    public boolean hasVersionCode() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 versionCode = 2;</code>
     */
    public int getVersionCode() {
      return versionCode_;
    }

    private void initFields() {
      pkgName_ = "";
      versionCode_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeBytes(1, getPkgNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, versionCode_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getPkgNameBytes());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, versionCode_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code PackageInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.PackageInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PackageInfo_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PackageInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.class, com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        pkgName_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        versionCode_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PackageInfo_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo build() {
        com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo result = new com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.pkgName_ = pkgName_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.versionCode_ = versionCode_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo.getDefaultInstance()) return this;
        if (other.hasPkgName()) {
          bitField0_ |= 0x00000001;
          pkgName_ = other.pkgName_;
          onChanged();
        }
        if (other.hasVersionCode()) {
          setVersionCode(other.getVersionCode());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.PackageInfo) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional string pkgName = 1;
      private java.lang.Object pkgName_ = "";
      /**
       * <code>optional string pkgName = 1;</code>
       */
      public boolean hasPkgName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string pkgName = 1;</code>
       */
      public java.lang.String getPkgName() {
        java.lang.Object ref = pkgName_;
        if (!(ref instanceof java.lang.String)) {
          java.lang.String s = ((com.google.protobuf.ByteString) ref)
              .toStringUtf8();
          pkgName_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string pkgName = 1;</code>
       */
      public com.google.protobuf.ByteString
          getPkgNameBytes() {
        java.lang.Object ref = pkgName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          pkgName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string pkgName = 1;</code>
       */
      public Builder setPkgName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        pkgName_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string pkgName = 1;</code>
       */
      public Builder clearPkgName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        pkgName_ = getDefaultInstance().getPkgName();
        onChanged();
        return this;
      }
      /**
       * <code>optional string pkgName = 1;</code>
       */
      public Builder setPkgNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        pkgName_ = value;
        onChanged();
        return this;
      }

      // optional int32 versionCode = 2;
      private int versionCode_ ;
      /**
       * <code>optional int32 versionCode = 2;</code>
       */
      public boolean hasVersionCode() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 versionCode = 2;</code>
       */
      public int getVersionCode() {
        return versionCode_;
      }
      /**
       * <code>optional int32 versionCode = 2;</code>
       */
      public Builder setVersionCode(int value) {
        bitField0_ |= 0x00000002;
        versionCode_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 versionCode = 2;</code>
       */
      public Builder clearVersionCode() {
        bitField0_ = (bitField0_ & ~0x00000002);
        versionCode_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:PackageInfo)
    }

    static {
      defaultInstance = new PackageInfo(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:PackageInfo)
  }

  public interface PayloadLevelAppStatOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 packageKey = 1;
    /**
     * <code>optional int32 packageKey = 1;</code>
     */
    boolean hasPackageKey();
    /**
     * <code>optional int32 packageKey = 1;</code>
     */
    int getPackageKey();

    // optional int32 applicationTag = 2;
    /**
     * <code>optional int32 applicationTag = 2;</code>
     */
    boolean hasApplicationTag();
    /**
     * <code>optional int32 applicationTag = 2;</code>
     */
    int getApplicationTag();

    // repeated .AppBucket payloadLevelAppBucket = 3;
    /**
     * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
     */
    java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket> 
        getPayloadLevelAppBucketList();
    /**
     * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AppBucket getPayloadLevelAppBucket(int index);
    /**
     * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
     */
    int getPayloadLevelAppBucketCount();
    /**
     * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
     */
    java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder> 
        getPayloadLevelAppBucketOrBuilderList();
    /**
     * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder getPayloadLevelAppBucketOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code PayloadLevelAppStat}
   */
  public static final class PayloadLevelAppStat extends
      com.google.protobuf.GeneratedMessage
      implements PayloadLevelAppStatOrBuilder {
    // Use PayloadLevelAppStat.newBuilder() to construct.
    private PayloadLevelAppStat(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private PayloadLevelAppStat(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final PayloadLevelAppStat defaultInstance;
    public static PayloadLevelAppStat getDefaultInstance() {
      return defaultInstance;
    }

    public PayloadLevelAppStat getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private PayloadLevelAppStat(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              packageKey_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              applicationTag_ = input.readInt32();
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                payloadLevelAppBucket_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket>();
                mutable_bitField0_ |= 0x00000004;
              }
              payloadLevelAppBucket_.add(input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.PARSER, extensionRegistry));
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          payloadLevelAppBucket_ = java.util.Collections.unmodifiableList(payloadLevelAppBucket_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PayloadLevelAppStat_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PayloadLevelAppStat_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.class, com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.Builder.class);
    }

    public static com.google.protobuf.Parser<PayloadLevelAppStat> PARSER =
        new com.google.protobuf.AbstractParser<PayloadLevelAppStat>() {
      public PayloadLevelAppStat parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new PayloadLevelAppStat(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<PayloadLevelAppStat> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 packageKey = 1;
    public static final int PACKAGEKEY_FIELD_NUMBER = 1;
    private int packageKey_;
    /**
     * <code>optional int32 packageKey = 1;</code>
     */
    public boolean hasPackageKey() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 packageKey = 1;</code>
     */
    public int getPackageKey() {
      return packageKey_;
    }

    // optional int32 applicationTag = 2;
    public static final int APPLICATIONTAG_FIELD_NUMBER = 2;
    private int applicationTag_;
    /**
     * <code>optional int32 applicationTag = 2;</code>
     */
    public boolean hasApplicationTag() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 applicationTag = 2;</code>
     */
    public int getApplicationTag() {
      return applicationTag_;
    }

    // repeated .AppBucket payloadLevelAppBucket = 3;
    public static final int PAYLOADLEVELAPPBUCKET_FIELD_NUMBER = 3;
    private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket> payloadLevelAppBucket_;
    /**
     * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
     */
    public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket> getPayloadLevelAppBucketList() {
      return payloadLevelAppBucket_;
    }
    /**
     * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
     */
    public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder> 
        getPayloadLevelAppBucketOrBuilderList() {
      return payloadLevelAppBucket_;
    }
    /**
     * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
     */
    public int getPayloadLevelAppBucketCount() {
      return payloadLevelAppBucket_.size();
    }
    /**
     * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AppBucket getPayloadLevelAppBucket(int index) {
      return payloadLevelAppBucket_.get(index);
    }
    /**
     * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder getPayloadLevelAppBucketOrBuilder(
        int index) {
      return payloadLevelAppBucket_.get(index);
    }

    private void initFields() {
      packageKey_ = 0;
      applicationTag_ = 0;
      payloadLevelAppBucket_ = java.util.Collections.emptyList();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, packageKey_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, applicationTag_);
      }
      for (int i = 0; i < payloadLevelAppBucket_.size(); i++) {
        output.writeMessage(3, payloadLevelAppBucket_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, packageKey_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, applicationTag_);
      }
      for (int i = 0; i < payloadLevelAppBucket_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, payloadLevelAppBucket_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code PayloadLevelAppStat}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStatOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PayloadLevelAppStat_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PayloadLevelAppStat_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.class, com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getPayloadLevelAppBucketFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        packageKey_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        applicationTag_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (payloadLevelAppBucketBuilder_ == null) {
          payloadLevelAppBucket_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          payloadLevelAppBucketBuilder_.clear();
        }
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_PayloadLevelAppStat_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat build() {
        com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat result = new com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.packageKey_ = packageKey_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.applicationTag_ = applicationTag_;
        if (payloadLevelAppBucketBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            payloadLevelAppBucket_ = java.util.Collections.unmodifiableList(payloadLevelAppBucket_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.payloadLevelAppBucket_ = payloadLevelAppBucket_;
        } else {
          result.payloadLevelAppBucket_ = payloadLevelAppBucketBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat.getDefaultInstance()) return this;
        if (other.hasPackageKey()) {
          setPackageKey(other.getPackageKey());
        }
        if (other.hasApplicationTag()) {
          setApplicationTag(other.getApplicationTag());
        }
        if (payloadLevelAppBucketBuilder_ == null) {
          if (!other.payloadLevelAppBucket_.isEmpty()) {
            if (payloadLevelAppBucket_.isEmpty()) {
              payloadLevelAppBucket_ = other.payloadLevelAppBucket_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensurePayloadLevelAppBucketIsMutable();
              payloadLevelAppBucket_.addAll(other.payloadLevelAppBucket_);
            }
            onChanged();
          }
        } else {
          if (!other.payloadLevelAppBucket_.isEmpty()) {
            if (payloadLevelAppBucketBuilder_.isEmpty()) {
              payloadLevelAppBucketBuilder_.dispose();
              payloadLevelAppBucketBuilder_ = null;
              payloadLevelAppBucket_ = other.payloadLevelAppBucket_;
              bitField0_ = (bitField0_ & ~0x00000004);
              payloadLevelAppBucketBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getPayloadLevelAppBucketFieldBuilder() : null;
            } else {
              payloadLevelAppBucketBuilder_.addAllMessages(other.payloadLevelAppBucket_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.PayloadLevelAppStat) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 packageKey = 1;
      private int packageKey_ ;
      /**
       * <code>optional int32 packageKey = 1;</code>
       */
      public boolean hasPackageKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 packageKey = 1;</code>
       */
      public int getPackageKey() {
        return packageKey_;
      }
      /**
       * <code>optional int32 packageKey = 1;</code>
       */
      public Builder setPackageKey(int value) {
        bitField0_ |= 0x00000001;
        packageKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 packageKey = 1;</code>
       */
      public Builder clearPackageKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        packageKey_ = 0;
        onChanged();
        return this;
      }

      // optional int32 applicationTag = 2;
      private int applicationTag_ ;
      /**
       * <code>optional int32 applicationTag = 2;</code>
       */
      public boolean hasApplicationTag() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 applicationTag = 2;</code>
       */
      public int getApplicationTag() {
        return applicationTag_;
      }
      /**
       * <code>optional int32 applicationTag = 2;</code>
       */
      public Builder setApplicationTag(int value) {
        bitField0_ |= 0x00000002;
        applicationTag_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 applicationTag = 2;</code>
       */
      public Builder clearApplicationTag() {
        bitField0_ = (bitField0_ & ~0x00000002);
        applicationTag_ = 0;
        onChanged();
        return this;
      }

      // repeated .AppBucket payloadLevelAppBucket = 3;
      private java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket> payloadLevelAppBucket_ =
        java.util.Collections.emptyList();
      private void ensurePayloadLevelAppBucketIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          payloadLevelAppBucket_ = new java.util.ArrayList<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket>(payloadLevelAppBucket_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AppBucket, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder> payloadLevelAppBucketBuilder_;

      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket> getPayloadLevelAppBucketList() {
        if (payloadLevelAppBucketBuilder_ == null) {
          return java.util.Collections.unmodifiableList(payloadLevelAppBucket_);
        } else {
          return payloadLevelAppBucketBuilder_.getMessageList();
        }
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public int getPayloadLevelAppBucketCount() {
        if (payloadLevelAppBucketBuilder_ == null) {
          return payloadLevelAppBucket_.size();
        } else {
          return payloadLevelAppBucketBuilder_.getCount();
        }
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppBucket getPayloadLevelAppBucket(int index) {
        if (payloadLevelAppBucketBuilder_ == null) {
          return payloadLevelAppBucket_.get(index);
        } else {
          return payloadLevelAppBucketBuilder_.getMessage(index);
        }
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public Builder setPayloadLevelAppBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket value) {
        if (payloadLevelAppBucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePayloadLevelAppBucketIsMutable();
          payloadLevelAppBucket_.set(index, value);
          onChanged();
        } else {
          payloadLevelAppBucketBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public Builder setPayloadLevelAppBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder builderForValue) {
        if (payloadLevelAppBucketBuilder_ == null) {
          ensurePayloadLevelAppBucketIsMutable();
          payloadLevelAppBucket_.set(index, builderForValue.build());
          onChanged();
        } else {
          payloadLevelAppBucketBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public Builder addPayloadLevelAppBucket(com.akdeniz.googleplaycrawler.GooglePlay.AppBucket value) {
        if (payloadLevelAppBucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePayloadLevelAppBucketIsMutable();
          payloadLevelAppBucket_.add(value);
          onChanged();
        } else {
          payloadLevelAppBucketBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public Builder addPayloadLevelAppBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket value) {
        if (payloadLevelAppBucketBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensurePayloadLevelAppBucketIsMutable();
          payloadLevelAppBucket_.add(index, value);
          onChanged();
        } else {
          payloadLevelAppBucketBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public Builder addPayloadLevelAppBucket(
          com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder builderForValue) {
        if (payloadLevelAppBucketBuilder_ == null) {
          ensurePayloadLevelAppBucketIsMutable();
          payloadLevelAppBucket_.add(builderForValue.build());
          onChanged();
        } else {
          payloadLevelAppBucketBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public Builder addPayloadLevelAppBucket(
          int index, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder builderForValue) {
        if (payloadLevelAppBucketBuilder_ == null) {
          ensurePayloadLevelAppBucketIsMutable();
          payloadLevelAppBucket_.add(index, builderForValue.build());
          onChanged();
        } else {
          payloadLevelAppBucketBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public Builder addAllPayloadLevelAppBucket(
          java.lang.Iterable<? extends com.akdeniz.googleplaycrawler.GooglePlay.AppBucket> values) {
        if (payloadLevelAppBucketBuilder_ == null) {
          ensurePayloadLevelAppBucketIsMutable();
          super.addAll(values, payloadLevelAppBucket_);
          onChanged();
        } else {
          payloadLevelAppBucketBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public Builder clearPayloadLevelAppBucket() {
        if (payloadLevelAppBucketBuilder_ == null) {
          payloadLevelAppBucket_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          payloadLevelAppBucketBuilder_.clear();
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public Builder removePayloadLevelAppBucket(int index) {
        if (payloadLevelAppBucketBuilder_ == null) {
          ensurePayloadLevelAppBucketIsMutable();
          payloadLevelAppBucket_.remove(index);
          onChanged();
        } else {
          payloadLevelAppBucketBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder getPayloadLevelAppBucketBuilder(
          int index) {
        return getPayloadLevelAppBucketFieldBuilder().getBuilder(index);
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder getPayloadLevelAppBucketOrBuilder(
          int index) {
        if (payloadLevelAppBucketBuilder_ == null) {
          return payloadLevelAppBucket_.get(index);  } else {
          return payloadLevelAppBucketBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public java.util.List<? extends com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder> 
           getPayloadLevelAppBucketOrBuilderList() {
        if (payloadLevelAppBucketBuilder_ != null) {
          return payloadLevelAppBucketBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(payloadLevelAppBucket_);
        }
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder addPayloadLevelAppBucketBuilder() {
        return getPayloadLevelAppBucketFieldBuilder().addBuilder(
            com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.getDefaultInstance());
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder addPayloadLevelAppBucketBuilder(
          int index) {
        return getPayloadLevelAppBucketFieldBuilder().addBuilder(
            index, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.getDefaultInstance());
      }
      /**
       * <code>repeated .AppBucket payloadLevelAppBucket = 3;</code>
       */
      public java.util.List<com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder> 
           getPayloadLevelAppBucketBuilderList() {
        return getPayloadLevelAppBucketFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AppBucket, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder> 
          getPayloadLevelAppBucketFieldBuilder() {
        if (payloadLevelAppBucketBuilder_ == null) {
          payloadLevelAppBucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AppBucket, com.akdeniz.googleplaycrawler.GooglePlay.AppBucket.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AppBucketOrBuilder>(
                  payloadLevelAppBucket_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          payloadLevelAppBucket_ = null;
        }
        return payloadLevelAppBucketBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:PayloadLevelAppStat)
    }

    static {
      defaultInstance = new PayloadLevelAppStat(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:PayloadLevelAppStat)
  }

  public interface StatCountersOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional int32 networkProto = 1;
    /**
     * <code>optional int32 networkProto = 1;</code>
     */
    boolean hasNetworkProto();
    /**
     * <code>optional int32 networkProto = 1;</code>
     */
    int getNetworkProto();

    // optional int32 direction = 2;
    /**
     * <code>optional int32 direction = 2;</code>
     */
    boolean hasDirection();
    /**
     * <code>optional int32 direction = 2;</code>
     */
    int getDirection();

    // optional .CounterData counterData = 3;
    /**
     * <code>optional .CounterData counterData = 3;</code>
     */
    boolean hasCounterData();
    /**
     * <code>optional .CounterData counterData = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CounterData getCounterData();
    /**
     * <code>optional .CounterData counterData = 3;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.CounterDataOrBuilder getCounterDataOrBuilder();

    // optional int32 fgBg = 4;
    /**
     * <code>optional int32 fgBg = 4;</code>
     */
    boolean hasFgBg();
    /**
     * <code>optional int32 fgBg = 4;</code>
     */
    int getFgBg();
  }
  /**
   * Protobuf type {@code StatCounters}
   */
  public static final class StatCounters extends
      com.google.protobuf.GeneratedMessage
      implements StatCountersOrBuilder {
    // Use StatCounters.newBuilder() to construct.
    private StatCounters(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private StatCounters(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final StatCounters defaultInstance;
    public static StatCounters getDefaultInstance() {
      return defaultInstance;
    }

    public StatCounters getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private StatCounters(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 8: {
              bitField0_ |= 0x00000001;
              networkProto_ = input.readInt32();
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              direction_ = input.readInt32();
              break;
            }
            case 26: {
              com.akdeniz.googleplaycrawler.GooglePlay.CounterData.Builder subBuilder = null;
              if (((bitField0_ & 0x00000004) == 0x00000004)) {
                subBuilder = counterData_.toBuilder();
              }
              counterData_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.CounterData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(counterData_);
                counterData_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000004;
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              fgBg_ = input.readInt32();
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_StatCounters_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_StatCounters_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.class, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder.class);
    }

    public static com.google.protobuf.Parser<StatCounters> PARSER =
        new com.google.protobuf.AbstractParser<StatCounters>() {
      public StatCounters parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new StatCounters(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<StatCounters> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional int32 networkProto = 1;
    public static final int NETWORKPROTO_FIELD_NUMBER = 1;
    private int networkProto_;
    /**
     * <code>optional int32 networkProto = 1;</code>
     */
    public boolean hasNetworkProto() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional int32 networkProto = 1;</code>
     */
    public int getNetworkProto() {
      return networkProto_;
    }

    // optional int32 direction = 2;
    public static final int DIRECTION_FIELD_NUMBER = 2;
    private int direction_;
    /**
     * <code>optional int32 direction = 2;</code>
     */
    public boolean hasDirection() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional int32 direction = 2;</code>
     */
    public int getDirection() {
      return direction_;
    }

    // optional .CounterData counterData = 3;
    public static final int COUNTERDATA_FIELD_NUMBER = 3;
    private com.akdeniz.googleplaycrawler.GooglePlay.CounterData counterData_;
    /**
     * <code>optional .CounterData counterData = 3;</code>
     */
    public boolean hasCounterData() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <code>optional .CounterData counterData = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CounterData getCounterData() {
      return counterData_;
    }
    /**
     * <code>optional .CounterData counterData = 3;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.CounterDataOrBuilder getCounterDataOrBuilder() {
      return counterData_;
    }

    // optional int32 fgBg = 4;
    public static final int FGBG_FIELD_NUMBER = 4;
    private int fgBg_;
    /**
     * <code>optional int32 fgBg = 4;</code>
     */
    public boolean hasFgBg() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <code>optional int32 fgBg = 4;</code>
     */
    public int getFgBg() {
      return fgBg_;
    }

    private void initFields() {
      networkProto_ = 0;
      direction_ = 0;
      counterData_ = com.akdeniz.googleplaycrawler.GooglePlay.CounterData.getDefaultInstance();
      fgBg_ = 0;
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeInt32(1, networkProto_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt32(2, direction_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeMessage(3, counterData_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt32(4, fgBg_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, networkProto_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, direction_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, counterData_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, fgBg_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.StatCounters parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.StatCounters parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.StatCounters parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.StatCounters parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.StatCounters parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.StatCounters parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.StatCounters parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.StatCounters parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.StatCounters parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.StatCounters parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.StatCounters prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code StatCounters}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.StatCountersOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_StatCounters_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_StatCounters_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.class, com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getCounterDataFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        networkProto_ = 0;
        bitField0_ = (bitField0_ & ~0x00000001);
        direction_ = 0;
        bitField0_ = (bitField0_ & ~0x00000002);
        if (counterDataBuilder_ == null) {
          counterData_ = com.akdeniz.googleplaycrawler.GooglePlay.CounterData.getDefaultInstance();
        } else {
          counterDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        fgBg_ = 0;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_StatCounters_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.StatCounters getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.StatCounters build() {
        com.akdeniz.googleplaycrawler.GooglePlay.StatCounters result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.StatCounters buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.StatCounters result = new com.akdeniz.googleplaycrawler.GooglePlay.StatCounters(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.networkProto_ = networkProto_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.direction_ = direction_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        if (counterDataBuilder_ == null) {
          result.counterData_ = counterData_;
        } else {
          result.counterData_ = counterDataBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.fgBg_ = fgBg_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.StatCounters) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.StatCounters)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.StatCounters other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.StatCounters.getDefaultInstance()) return this;
        if (other.hasNetworkProto()) {
          setNetworkProto(other.getNetworkProto());
        }
        if (other.hasDirection()) {
          setDirection(other.getDirection());
        }
        if (other.hasCounterData()) {
          mergeCounterData(other.getCounterData());
        }
        if (other.hasFgBg()) {
          setFgBg(other.getFgBg());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.StatCounters parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.StatCounters) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional int32 networkProto = 1;
      private int networkProto_ ;
      /**
       * <code>optional int32 networkProto = 1;</code>
       */
      public boolean hasNetworkProto() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional int32 networkProto = 1;</code>
       */
      public int getNetworkProto() {
        return networkProto_;
      }
      /**
       * <code>optional int32 networkProto = 1;</code>
       */
      public Builder setNetworkProto(int value) {
        bitField0_ |= 0x00000001;
        networkProto_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 networkProto = 1;</code>
       */
      public Builder clearNetworkProto() {
        bitField0_ = (bitField0_ & ~0x00000001);
        networkProto_ = 0;
        onChanged();
        return this;
      }

      // optional int32 direction = 2;
      private int direction_ ;
      /**
       * <code>optional int32 direction = 2;</code>
       */
      public boolean hasDirection() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional int32 direction = 2;</code>
       */
      public int getDirection() {
        return direction_;
      }
      /**
       * <code>optional int32 direction = 2;</code>
       */
      public Builder setDirection(int value) {
        bitField0_ |= 0x00000002;
        direction_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 direction = 2;</code>
       */
      public Builder clearDirection() {
        bitField0_ = (bitField0_ & ~0x00000002);
        direction_ = 0;
        onChanged();
        return this;
      }

      // optional .CounterData counterData = 3;
      private com.akdeniz.googleplaycrawler.GooglePlay.CounterData counterData_ = com.akdeniz.googleplaycrawler.GooglePlay.CounterData.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CounterData, com.akdeniz.googleplaycrawler.GooglePlay.CounterData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CounterDataOrBuilder> counterDataBuilder_;
      /**
       * <code>optional .CounterData counterData = 3;</code>
       */
      public boolean hasCounterData() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .CounterData counterData = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CounterData getCounterData() {
        if (counterDataBuilder_ == null) {
          return counterData_;
        } else {
          return counterDataBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .CounterData counterData = 3;</code>
       */
      public Builder setCounterData(com.akdeniz.googleplaycrawler.GooglePlay.CounterData value) {
        if (counterDataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          counterData_ = value;
          onChanged();
        } else {
          counterDataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .CounterData counterData = 3;</code>
       */
      public Builder setCounterData(
          com.akdeniz.googleplaycrawler.GooglePlay.CounterData.Builder builderForValue) {
        if (counterDataBuilder_ == null) {
          counterData_ = builderForValue.build();
          onChanged();
        } else {
          counterDataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .CounterData counterData = 3;</code>
       */
      public Builder mergeCounterData(com.akdeniz.googleplaycrawler.GooglePlay.CounterData value) {
        if (counterDataBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004) &&
              counterData_ != com.akdeniz.googleplaycrawler.GooglePlay.CounterData.getDefaultInstance()) {
            counterData_ =
              com.akdeniz.googleplaycrawler.GooglePlay.CounterData.newBuilder(counterData_).mergeFrom(value).buildPartial();
          } else {
            counterData_ = value;
          }
          onChanged();
        } else {
          counterDataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000004;
        return this;
      }
      /**
       * <code>optional .CounterData counterData = 3;</code>
       */
      public Builder clearCounterData() {
        if (counterDataBuilder_ == null) {
          counterData_ = com.akdeniz.googleplaycrawler.GooglePlay.CounterData.getDefaultInstance();
          onChanged();
        } else {
          counterDataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }
      /**
       * <code>optional .CounterData counterData = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CounterData.Builder getCounterDataBuilder() {
        bitField0_ |= 0x00000004;
        onChanged();
        return getCounterDataFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .CounterData counterData = 3;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.CounterDataOrBuilder getCounterDataOrBuilder() {
        if (counterDataBuilder_ != null) {
          return counterDataBuilder_.getMessageOrBuilder();
        } else {
          return counterData_;
        }
      }
      /**
       * <code>optional .CounterData counterData = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.CounterData, com.akdeniz.googleplaycrawler.GooglePlay.CounterData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CounterDataOrBuilder> 
          getCounterDataFieldBuilder() {
        if (counterDataBuilder_ == null) {
          counterDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.CounterData, com.akdeniz.googleplaycrawler.GooglePlay.CounterData.Builder, com.akdeniz.googleplaycrawler.GooglePlay.CounterDataOrBuilder>(
                  counterData_,
                  getParentForChildren(),
                  isClean());
          counterData_ = null;
        }
        return counterDataBuilder_;
      }

      // optional int32 fgBg = 4;
      private int fgBg_ ;
      /**
       * <code>optional int32 fgBg = 4;</code>
       */
      public boolean hasFgBg() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <code>optional int32 fgBg = 4;</code>
       */
      public int getFgBg() {
        return fgBg_;
      }
      /**
       * <code>optional int32 fgBg = 4;</code>
       */
      public Builder setFgBg(int value) {
        bitField0_ |= 0x00000008;
        fgBg_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional int32 fgBg = 4;</code>
       */
      public Builder clearFgBg() {
        bitField0_ = (bitField0_ & ~0x00000008);
        fgBg_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:StatCounters)
    }

    static {
      defaultInstance = new StatCounters(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:StatCounters)
  }

  public interface UsageStatsExtensionProtoOrBuilder
      extends com.google.protobuf.MessageOrBuilder {

    // optional .AndroidDataUsageProto dataUsage = 1;
    /**
     * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
     */
    boolean hasDataUsage();
    /**
     * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto getDataUsage();
    /**
     * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
     */
    com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProtoOrBuilder getDataUsageOrBuilder();
  }
  /**
   * Protobuf type {@code UsageStatsExtensionProto}
   */
  public static final class UsageStatsExtensionProto extends
      com.google.protobuf.GeneratedMessage
      implements UsageStatsExtensionProtoOrBuilder {
    // Use UsageStatsExtensionProto.newBuilder() to construct.
    private UsageStatsExtensionProto(com.google.protobuf.GeneratedMessage.Builder<?> builder) {
      super(builder);
      this.unknownFields = builder.getUnknownFields();
    }
    private UsageStatsExtensionProto(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); }

    private static final UsageStatsExtensionProto defaultInstance;
    public static UsageStatsExtensionProto getDefaultInstance() {
      return defaultInstance;
    }

    public UsageStatsExtensionProto getDefaultInstanceForType() {
      return defaultInstance;
    }

    private final com.google.protobuf.UnknownFieldSet unknownFields;
    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
        getUnknownFields() {
      return this.unknownFields;
    }
    private UsageStatsExtensionProto(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      initFields();
      int mutable_bitField0_ = 0;
      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder();
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                done = true;
              }
              break;
            }
            case 10: {
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = dataUsage_.toBuilder();
              }
              dataUsage_ = input.readMessage(com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(dataUsage_);
                dataUsage_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
          }
        }
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(this);
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(
            e.getMessage()).setUnfinishedMessage(this);
      } finally {
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UsageStatsExtensionProto_descriptor;
    }

    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UsageStatsExtensionProto_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.class, com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.Builder.class);
    }

    public static com.google.protobuf.Parser<UsageStatsExtensionProto> PARSER =
        new com.google.protobuf.AbstractParser<UsageStatsExtensionProto>() {
      public UsageStatsExtensionProto parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UsageStatsExtensionProto(input, extensionRegistry);
      }
    };

    @java.lang.Override
    public com.google.protobuf.Parser<UsageStatsExtensionProto> getParserForType() {
      return PARSER;
    }

    private int bitField0_;
    // optional .AndroidDataUsageProto dataUsage = 1;
    public static final int DATAUSAGE_FIELD_NUMBER = 1;
    private com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto dataUsage_;
    /**
     * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
     */
    public boolean hasDataUsage() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto getDataUsage() {
      return dataUsage_;
    }
    /**
     * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
     */
    public com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProtoOrBuilder getDataUsageOrBuilder() {
      return dataUsage_;
    }

    private void initFields() {
      dataUsage_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.getDefaultInstance();
    }
    private byte memoizedIsInitialized = -1;
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized != -1) return isInitialized == 1;

      memoizedIsInitialized = 1;
      return true;
    }

    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeMessage(1, dataUsage_);
      }
      getUnknownFields().writeTo(output);
    }

    private int memoizedSerializedSize = -1;
    public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, dataUsage_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }

    private static final long serialVersionUID = 0L;
    @java.lang.Override
    protected java.lang.Object writeReplace()
        throws java.io.ObjectStreamException {
      return super.writeReplace();
    }

    public static com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseDelimitedFrom(input, extensionRegistry);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return PARSER.parseFrom(input);
    }
    public static com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return PARSER.parseFrom(input, extensionRegistry);
    }

    public static Builder newBuilder() { return Builder.create(); }
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    public Builder toBuilder() { return newBuilder(this); }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code UsageStatsExtensionProto}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder>
       implements com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProtoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UsageStatsExtensionProto_descriptor;
      }

      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UsageStatsExtensionProto_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.class, com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.Builder.class);
      }

      // Construct using com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
          getDataUsageFieldBuilder();
        }
      }
      private static Builder create() {
        return new Builder();
      }

      public Builder clear() {
        super.clear();
        if (dataUsageBuilder_ == null) {
          dataUsage_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.getDefaultInstance();
        } else {
          dataUsageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      public Builder clone() {
        return create().mergeFrom(buildPartial());
      }

      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.internal_static_UsageStatsExtensionProto_descriptor;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto getDefaultInstanceForType() {
        return com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.getDefaultInstance();
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto build() {
        com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      public com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto buildPartial() {
        com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto result = new com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (dataUsageBuilder_ == null) {
          result.dataUsage_ = dataUsage_;
        } else {
          result.dataUsage_ = dataUsageBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto) {
          return mergeFrom((com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto other) {
        if (other == com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto.getDefaultInstance()) return this;
        if (other.hasDataUsage()) {
          mergeDataUsage(other.getDataUsage());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }

      public final boolean isInitialized() {
        return true;
      }

      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (com.akdeniz.googleplaycrawler.GooglePlay.UsageStatsExtensionProto) e.getUnfinishedMessage();
          throw e;
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      // optional .AndroidDataUsageProto dataUsage = 1;
      private com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto dataUsage_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.getDefaultInstance();
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProtoOrBuilder> dataUsageBuilder_;
      /**
       * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
       */
      public boolean hasDataUsage() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto getDataUsage() {
        if (dataUsageBuilder_ == null) {
          return dataUsage_;
        } else {
          return dataUsageBuilder_.getMessage();
        }
      }
      /**
       * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
       */
      public Builder setDataUsage(com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto value) {
        if (dataUsageBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          dataUsage_ = value;
          onChanged();
        } else {
          dataUsageBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
       */
      public Builder setDataUsage(
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.Builder builderForValue) {
        if (dataUsageBuilder_ == null) {
          dataUsage_ = builderForValue.build();
          onChanged();
        } else {
          dataUsageBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
       */
      public Builder mergeDataUsage(com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto value) {
        if (dataUsageBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              dataUsage_ != com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.getDefaultInstance()) {
            dataUsage_ =
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.newBuilder(dataUsage_).mergeFrom(value).buildPartial();
          } else {
            dataUsage_ = value;
          }
          onChanged();
        } else {
          dataUsageBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
       */
      public Builder clearDataUsage() {
        if (dataUsageBuilder_ == null) {
          dataUsage_ = com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.getDefaultInstance();
          onChanged();
        } else {
          dataUsageBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.Builder getDataUsageBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getDataUsageFieldBuilder().getBuilder();
      }
      /**
       * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
       */
      public com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProtoOrBuilder getDataUsageOrBuilder() {
        if (dataUsageBuilder_ != null) {
          return dataUsageBuilder_.getMessageOrBuilder();
        } else {
          return dataUsage_;
        }
      }
      /**
       * <code>optional .AndroidDataUsageProto dataUsage = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilder<
          com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProtoOrBuilder> 
          getDataUsageFieldBuilder() {
        if (dataUsageBuilder_ == null) {
          dataUsageBuilder_ = new com.google.protobuf.SingleFieldBuilder<
              com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto, com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProto.Builder, com.akdeniz.googleplaycrawler.GooglePlay.AndroidDataUsageProtoOrBuilder>(
                  dataUsage_,
                  getParentForChildren(),
                  isClean());
          dataUsage_ = null;
        }
        return dataUsageBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:UsageStatsExtensionProto)
    }

    static {
      defaultInstance = new UsageStatsExtensionProto(true);
      defaultInstance.initFields();
    }

    // @@protoc_insertion_point(class_scope:UsageStatsExtensionProto)
  }

  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AndroidAppDeliveryData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AndroidAppDeliveryData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AndroidAppPatchData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AndroidAppPatchData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AppFileMetadata_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AppFileMetadata_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_EncryptionParams_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_EncryptionParams_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_HttpCookie_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_HttpCookie_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Address_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Address_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BookAuthor_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BookAuthor_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BookDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BookDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BookDetails_Identifier_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BookDetails_Identifier_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BookSubject_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BookSubject_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BrowseLink_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BrowseLink_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BrowseResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BrowseResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AddressChallenge_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AddressChallenge_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AuthenticationChallenge_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AuthenticationChallenge_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BuyResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BuyResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BuyResponse_CheckoutInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BuyResponse_CheckoutInfo_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BuyResponse_CheckoutInfo_CheckoutOption_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BuyResponse_CheckoutInfo_CheckoutOption_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_DeliveryResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_DeliveryResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Challenge_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Challenge_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_FormCheckbox_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_FormCheckbox_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_LineItem_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_LineItem_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Money_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Money_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_PurchaseNotificationResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_PurchaseNotificationResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_PurchaseStatusResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_PurchaseStatusResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Docid_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Docid_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Install_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Install_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Offer_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Offer_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OwnershipInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OwnershipInfo_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_RentalTerms_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_RentalTerms_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_SubscriptionTerms_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_SubscriptionTerms_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TimePeriod_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TimePeriod_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BillingAddressSpec_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BillingAddressSpec_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_CarrierBillingCredentials_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_CarrierBillingCredentials_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_CarrierBillingInstrument_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_CarrierBillingInstrument_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_CarrierBillingInstrumentStatus_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_CarrierBillingInstrumentStatus_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_CarrierTos_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_CarrierTos_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_CarrierTosEntry_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_CarrierTosEntry_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_CreditCardInstrument_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_CreditCardInstrument_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_EfeParam_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_EfeParam_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_InputValidationError_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_InputValidationError_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Instrument_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Instrument_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_PasswordPrompt_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_PasswordPrompt_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_ContainerMetadata_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_ContainerMetadata_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_DebugInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_DebugInfo_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_DebugInfo_Timing_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_DebugInfo_Timing_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BulkDetailsEntry_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BulkDetailsEntry_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BulkDetailsRequest_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BulkDetailsRequest_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BulkDetailsResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BulkDetailsResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_DetailsResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_DetailsResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_DeviceConfigurationProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_DeviceConfigurationProto_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Document_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Document_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_DocumentVariant_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_DocumentVariant_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Image_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Image_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Image_Dimension_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Image_Dimension_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Image_Citation_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Image_Citation_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TranslatedText_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TranslatedText_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_PlusOneData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_PlusOneData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_PlusPerson_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_PlusPerson_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AlbumDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AlbumDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AppDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AppDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_ArtistDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_ArtistDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_ArtistExternalLinks_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_ArtistExternalLinks_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_DocumentDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_DocumentDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_FileMetadata_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_FileMetadata_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_MagazineDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_MagazineDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_MusicDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_MusicDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_SongDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_SongDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_SubscriptionDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_SubscriptionDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Trailer_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Trailer_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TvEpisodeDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TvEpisodeDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TvSeasonDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TvSeasonDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TvShowDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TvShowDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_VideoCredit_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_VideoCredit_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_VideoDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_VideoDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_VideoRentalTerm_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_VideoRentalTerm_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_VideoRentalTerm_Term_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_VideoRentalTerm_Term_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Bucket_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Bucket_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_ListResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_ListResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_DocV1_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_DocV1_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_DocV2_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_DocV2_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_EncryptedSubscriberInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_EncryptedSubscriberInfo_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Availability_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Availability_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Availability_PerDeviceAvailabilityRestriction_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Availability_PerDeviceAvailabilityRestriction_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_FilterEvaluationInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_FilterEvaluationInfo_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Rule_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Rule_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_RuleEvaluation_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_RuleEvaluation_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_LibraryAppDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_LibraryAppDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_LibraryInAppDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_LibraryInAppDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_LibraryMutation_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_LibraryMutation_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_LibrarySubscriptionDetails_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_LibrarySubscriptionDetails_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_LibraryUpdate_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_LibraryUpdate_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AndroidAppNotificationData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AndroidAppNotificationData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_InAppNotificationData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_InAppNotificationData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_LibraryDirtyData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_LibraryDirtyData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Notification_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Notification_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_PurchaseDeclinedData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_PurchaseDeclinedData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_PurchaseRemovalData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_PurchaseRemovalData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_UserNotificationData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_UserNotificationData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AggregateRating_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AggregateRating_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Payload_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Payload_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_PreFetch_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_PreFetch_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_ResponseWrapper_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_ResponseWrapper_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_ServerCommands_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_ServerCommands_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_GetReviewsResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_GetReviewsResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Review_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Review_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Author_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Author_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_Avatar_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_Avatar_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_ReviewResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_ReviewResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_RelatedSearch_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_RelatedSearch_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_SearchResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_SearchResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_UploadDeviceConfigRequest_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_UploadDeviceConfigRequest_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_UploadDeviceConfigResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_UploadDeviceConfigResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AndroidCheckinRequest_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AndroidCheckinRequest_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AndroidCheckinResponse_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AndroidCheckinResponse_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_GservicesSetting_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_GservicesSetting_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AndroidBuildProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AndroidBuildProto_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AndroidCheckinProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AndroidCheckinProto_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AndroidEventProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AndroidEventProto_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AndroidIntentProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AndroidIntentProto_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AndroidIntentProto_Extra_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AndroidIntentProto_Extra_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AndroidStatisticProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AndroidStatisticProto_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_ClientLibraryState_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_ClientLibraryState_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AndroidDataUsageProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AndroidDataUsageProto_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AndroidUsageStatsReport_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AndroidUsageStatsReport_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_AppBucket_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_AppBucket_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_CounterData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_CounterData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_IpLayerAppStat_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_IpLayerAppStat_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_IpLayerNetworkBucket_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_IpLayerNetworkBucket_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_IpLayerNetworkStat_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_IpLayerNetworkStat_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_KeyToPackageNameMapping_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_KeyToPackageNameMapping_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_PackageInfo_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_PackageInfo_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_PayloadLevelAppStat_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_PayloadLevelAppStat_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_StatCounters_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_StatCounters_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_UsageStatsExtensionProto_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_UsageStatsExtensionProto_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\020GooglePlay.proto\032\035GoogleServicesFramew" +
      "ork.proto\"\213\003\n\026AndroidAppDeliveryData\022\024\n\014" +
      "downloadSize\030\001 \001(\003\022\021\n\tsignature\030\002 \001(\t\022\023\n" +
      "\013downloadUrl\030\003 \001(\t\022(\n\016additionalFile\030\004 \003" +
      "(\0132\020.AppFileMetadata\022\'\n\022downloadAuthCook" +
      "ie\030\005 \003(\0132\013.HttpCookie\022\025\n\rforwardLocked\030\006" +
      " \001(\010\022\025\n\rrefundTimeout\030\007 \001(\003\022\027\n\017serverIni" +
      "tiated\030\010 \001(\010\022%\n\035postInstallRefundWindowM" +
      "illis\030\t \001(\003\022\034\n\024immediateStartNeeded\030\n \001(" +
      "\010\022\'\n\tpatchData\030\013 \001(\0132\024.AndroidAppPatchDa",
      "ta\022+\n\020encryptionParams\030\014 \001(\0132\021.Encryptio" +
      "nParams\"\205\001\n\023AndroidAppPatchData\022\027\n\017baseV" +
      "ersionCode\030\001 \001(\005\022\025\n\rbaseSignature\030\002 \001(\t\022" +
      "\023\n\013downloadUrl\030\003 \001(\t\022\023\n\013patchFormat\030\004 \001(" +
      "\005\022\024\n\014maxPatchSize\030\005 \001(\003\"[\n\017AppFileMetada" +
      "ta\022\020\n\010fileType\030\001 \001(\005\022\023\n\013versionCode\030\002 \001(" +
      "\005\022\014\n\004size\030\003 \001(\003\022\023\n\013downloadUrl\030\004 \001(\t\"K\n\020" +
      "EncryptionParams\022\017\n\007version\030\001 \001(\005\022\025\n\renc" +
      "ryptionKey\030\002 \001(\t\022\017\n\007hmacKey\030\003 \001(\t\")\n\nHtt" +
      "pCookie\022\014\n\004name\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\"\255\002\n",
      "\007Address\022\014\n\004name\030\001 \001(\t\022\024\n\014addressLine1\030\002" +
      " \001(\t\022\024\n\014addressLine2\030\003 \001(\t\022\014\n\004city\030\004 \001(\t" +
      "\022\r\n\005state\030\005 \001(\t\022\022\n\npostalCode\030\006 \001(\t\022\025\n\rp" +
      "ostalCountry\030\007 \001(\t\022\031\n\021dependentLocality\030" +
      "\010 \001(\t\022\023\n\013sortingCode\030\t \001(\t\022\024\n\014languageCo" +
      "de\030\n \001(\t\022\023\n\013phoneNumber\030\013 \001(\t\022\021\n\tisReduc" +
      "ed\030\014 \001(\010\022\021\n\tfirstName\030\r \001(\t\022\020\n\010lastName\030" +
      "\016 \001(\t\022\r\n\005email\030\017 \001(\t\"J\n\nBookAuthor\022\014\n\004na" +
      "me\030\001 \001(\t\022\027\n\017deprecatedQuery\030\002 \001(\t\022\025\n\005doc" +
      "id\030\003 \001(\0132\006.Docid\"\303\003\n\013BookDetails\022\035\n\007subj",
      "ect\030\003 \003(\0132\014.BookSubject\022\021\n\tpublisher\030\004 \001" +
      "(\t\022\027\n\017publicationDate\030\005 \001(\t\022\014\n\004isbn\030\006 \001(" +
      "\t\022\025\n\rnumberOfPages\030\007 \001(\005\022\020\n\010subtitle\030\010 \001" +
      "(\t\022\033\n\006author\030\t \003(\0132\013.BookAuthor\022\021\n\treade" +
      "rUrl\030\n \001(\t\022\027\n\017downloadEpubUrl\030\013 \001(\t\022\026\n\016d" +
      "ownloadPdfUrl\030\014 \001(\t\022\027\n\017acsEpubTokenUrl\030\r" +
      " \001(\t\022\026\n\016acsPdfTokenUrl\030\016 \001(\t\022\025\n\repubAvai" +
      "lable\030\017 \001(\010\022\024\n\014pdfAvailable\030\020 \001(\010\022\026\n\016abo" +
      "utTheAuthor\030\021 \001(\t\022+\n\nidentifier\030\022 \003(\n2\027." +
      "BookDetails.Identifier\032.\n\nIdentifier\022\014\n\004",
      "type\030\023 \001(\005\022\022\n\nidentifier\030\024 \001(\t\"=\n\013BookSu" +
      "bject\022\014\n\004name\030\001 \001(\t\022\r\n\005query\030\002 \001(\t\022\021\n\tsu" +
      "bjectId\030\003 \001(\t\"+\n\nBrowseLink\022\014\n\004name\030\001 \001(" +
      "\t\022\017\n\007dataUrl\030\003 \001(\t\"w\n\016BrowseResponse\022\023\n\013" +
      "contentsUrl\030\001 \001(\t\022\020\n\010promoUrl\030\002 \001(\t\022\035\n\010c" +
      "ategory\030\003 \003(\0132\013.BrowseLink\022\037\n\nbreadcrumb" +
      "\030\004 \003(\0132\013.BrowseLink\"\217\002\n\020AddressChallenge" +
      "\022\034\n\024responseAddressParam\030\001 \001(\t\022\037\n\027respon" +
      "seCheckboxesParam\030\002 \001(\t\022\r\n\005title\030\003 \001(\t\022\027" +
      "\n\017descriptionHtml\030\004 \001(\t\022\037\n\010checkbox\030\005 \003(",
      "\0132\r.FormCheckbox\022\031\n\007address\030\006 \001(\0132\010.Addr" +
      "ess\022.\n\017errorInputField\030\007 \003(\0132\025.InputVali" +
      "dationError\022\021\n\terrorHtml\030\010 \001(\t\022\025\n\rrequir" +
      "edField\030\t \003(\005\"\357\001\n\027AuthenticationChalleng" +
      "e\022\032\n\022authenticationType\030\001 \001(\005\022\'\n\037respons" +
      "eAuthenticationTypeParam\030\002 \001(\t\022\037\n\027respon" +
      "seRetryCountParam\030\003 \001(\t\022\025\n\rpinHeaderText" +
      "\030\004 \001(\t\022\036\n\026pinDescriptionTextHtml\030\005 \001(\t\022\026" +
      "\n\016gaiaHeaderText\030\006 \001(\t\022\037\n\027gaiaDescriptio" +
      "nTextHtml\030\007 \001(\t\"\201\t\n\013BuyResponse\0227\n\020purch",
      "aseResponse\030\001 \001(\0132\035.PurchaseNotification" +
      "Response\022/\n\014checkoutinfo\030\002 \001(\n2\031.BuyResp" +
      "onse.CheckoutInfo\022\026\n\016continueViaUrl\030\010 \001(" +
      "\t\022\031\n\021purchaseStatusUrl\030\t \001(\t\022\031\n\021checkout" +
      "ServiceId\030\014 \001(\t\022\035\n\025checkoutTokenRequired" +
      "\030\r \001(\010\022\027\n\017baseCheckoutUrl\030\016 \001(\t\022\027\n\017tosCh" +
      "eckboxHtml\030% \003(\t\022\032\n\022iabPermissionError\030&" +
      " \001(\005\0227\n\026purchaseStatusResponse\030\' \001(\0132\027.P" +
      "urchaseStatusResponse\022\026\n\016purchaseCookie\030" +
      ". \001(\t\022\035\n\tchallenge\0301 \001(\0132\n.Challenge\032\334\005\n",
      "\014CheckoutInfo\022\027\n\004item\030\003 \001(\0132\t.LineItem\022\032" +
      "\n\007subItem\030\004 \003(\0132\t.LineItem\022@\n\016checkoutop" +
      "tion\030\005 \003(\n2(.BuyResponse.CheckoutInfo.Ch" +
      "eckoutOption\022\035\n\025deprecatedCheckoutUrl\030\n " +
      "\001(\t\022\030\n\020addInstrumentUrl\030\013 \001(\t\022\022\n\nfooterH" +
      "tml\030\024 \003(\t\022 \n\030eligibleInstrumentFamily\030\037 " +
      "\003(\005\022\024\n\014footnoteHtml\030$ \003(\t\022\'\n\022eligibleIns" +
      "trument\030, \003(\0132\013.Instrument\032\246\003\n\016CheckoutO" +
      "ption\022\025\n\rformOfPayment\030\006 \001(\t\022\033\n\023encodedA" +
      "djustedCart\030\007 \001(\t\022\024\n\014instrumentId\030\017 \001(\t\022",
      "\027\n\004item\030\020 \003(\0132\t.LineItem\022\032\n\007subItem\030\021 \003(" +
      "\0132\t.LineItem\022\030\n\005total\030\022 \001(\0132\t.LineItem\022\022" +
      "\n\nfooterHtml\030\023 \003(\t\022\030\n\020instrumentFamily\030\035" +
      " \001(\005\022.\n&deprecatedInstrumentInapplicable" +
      "Reason\030\036 \003(\005\022\032\n\022selectedInstrument\030  \001(\010" +
      "\022\032\n\007summary\030! \001(\0132\t.LineItem\022\024\n\014footnote" +
      "Html\030# \003(\t\022\037\n\ninstrument\030+ \001(\0132\013.Instrum" +
      "ent\022\026\n\016purchaseCookie\030- \001(\t\022\026\n\016disabledR" +
      "eason\0300 \003(\t\"D\n\020DeliveryResponse\0220\n\017appDe" +
      "liveryData\030\002 \001(\0132\027.AndroidAppDeliveryDat",
      "a\"s\n\tChallenge\022+\n\020addressChallenge\030\001 \001(\013" +
      "2\021.AddressChallenge\0229\n\027authenticationCha" +
      "llenge\030\002 \001(\0132\030.AuthenticationChallenge\"F" +
      "\n\014FormCheckbox\022\023\n\013description\030\001 \001(\t\022\017\n\007c" +
      "hecked\030\002 \001(\010\022\020\n\010required\030\003 \001(\010\"\\\n\010LineIt" +
      "em\022\014\n\004name\030\001 \001(\t\022\023\n\013description\030\002 \001(\t\022\025\n" +
      "\005offer\030\003 \001(\0132\006.Offer\022\026\n\006amount\030\004 \001(\0132\006.M" +
      "oney\"F\n\005Money\022\016\n\006micros\030\001 \001(\003\022\024\n\014currenc" +
      "yCode\030\002 \001(\t\022\027\n\017formattedAmount\030\003 \001(\t\"\200\001\n" +
      "\034PurchaseNotificationResponse\022\016\n\006status\030",
      "\001 \001(\005\022\035\n\tdebugInfo\030\002 \001(\0132\n.DebugInfo\022\035\n\025" +
      "localizedErrorMessage\030\003 \001(\t\022\022\n\npurchaseI" +
      "d\030\004 \001(\t\"\371\001\n\026PurchaseStatusResponse\022\016\n\006st" +
      "atus\030\001 \001(\005\022\021\n\tstatusMsg\030\002 \001(\t\022\023\n\013statusT" +
      "itle\030\003 \001(\t\022\024\n\014briefMessage\030\004 \001(\t\022\017\n\007info" +
      "Url\030\005 \001(\t\022%\n\rlibraryUpdate\030\006 \001(\0132\016.Libra" +
      "ryUpdate\022\'\n\022rejectedInstrument\030\007 \001(\0132\013.I" +
      "nstrument\0220\n\017appDeliveryData\030\010 \001(\0132\027.And" +
      "roidAppDeliveryData\"<\n\005Docid\022\024\n\014backendD" +
      "ocid\030\001 \001(\t\022\014\n\004type\030\002 \001(\005\022\017\n\007backend\030\003 \001(",
      "\005\">\n\007Install\022\021\n\tandroidId\030\001 \001(\006\022\017\n\007versi" +
      "on\030\002 \001(\005\022\017\n\007bundled\030\003 \001(\010\"\200\003\n\005Offer\022\016\n\006m" +
      "icros\030\001 \001(\003\022\024\n\014currencyCode\030\002 \001(\t\022\027\n\017for" +
      "mattedAmount\030\003 \001(\t\022\036\n\016convertedPrice\030\004 \003" +
      "(\0132\006.Offer\022\034\n\024checkoutFlowRequired\030\005 \001(\010" +
      "\022\027\n\017fullPriceMicros\030\006 \001(\003\022\033\n\023formattedFu" +
      "llAmount\030\007 \001(\t\022\021\n\tofferType\030\010 \001(\005\022!\n\013ren" +
      "talTerms\030\t \001(\0132\014.RentalTerms\022\022\n\nonSaleDa" +
      "te\030\n \001(\003\022\026\n\016promotionLabel\030\013 \003(\t\022-\n\021subs" +
      "criptionTerms\030\014 \001(\0132\022.SubscriptionTerms\022",
      "\025\n\rformattedName\030\r \001(\t\022\034\n\024formattedDescr" +
      "iption\030\016 \001(\t\"\261\001\n\rOwnershipInfo\022\037\n\027initia" +
      "tionTimestampMsec\030\001 \001(\003\022\037\n\027validUntilTim" +
      "estampMsec\030\002 \001(\003\022\024\n\014autoRenewing\030\003 \001(\010\022\"" +
      "\n\032refundTimeoutTimestampMsec\030\004 \001(\003\022$\n\034po" +
      "stDeliveryRefundWindowMsec\030\005 \001(\003\"H\n\013Rent" +
      "alTerms\022\032\n\022grantPeriodSeconds\030\001 \001(\005\022\035\n\025a" +
      "ctivatePeriodSeconds\030\002 \001(\005\"[\n\021Subscripti" +
      "onTerms\022$\n\017recurringPeriod\030\001 \001(\0132\013.TimeP" +
      "eriod\022 \n\013trialPeriod\030\002 \001(\0132\013.TimePeriod\"",
      ")\n\nTimePeriod\022\014\n\004unit\030\001 \001(\005\022\r\n\005count\030\002 \001" +
      "(\005\"G\n\022BillingAddressSpec\022\032\n\022billingAddre" +
      "ssType\030\001 \001(\005\022\025\n\rrequiredField\030\002 \003(\005\">\n\031C" +
      "arrierBillingCredentials\022\r\n\005value\030\001 \001(\t\022" +
      "\022\n\nexpiration\030\002 \001(\003\"\251\002\n\030CarrierBillingIn" +
      "strument\022\025\n\rinstrumentKey\030\001 \001(\t\022\023\n\013accou" +
      "ntType\030\002 \001(\t\022\024\n\014currencyCode\030\003 \001(\t\022\030\n\020tr" +
      "ansactionLimit\030\004 \001(\003\022\034\n\024subscriberIdenti" +
      "fier\030\005 \001(\t\0229\n\027encryptedSubscriberInfo\030\006 " +
      "\001(\0132\030.EncryptedSubscriberInfo\022/\n\013credent",
      "ials\030\007 \001(\0132\032.CarrierBillingCredentials\022\'" +
      "\n\022acceptedCarrierTos\030\010 \001(\0132\013.CarrierTos\"" +
      "\312\001\n\036CarrierBillingInstrumentStatus\022\037\n\nca" +
      "rrierTos\030\001 \001(\0132\013.CarrierTos\022\033\n\023associati" +
      "onRequired\030\002 \001(\010\022\030\n\020passwordRequired\030\003 \001" +
      "(\010\022.\n\025carrierPasswordPrompt\030\004 \001(\0132\017.Pass" +
      "wordPrompt\022\022\n\napiVersion\030\005 \001(\005\022\014\n\004name\030\006" +
      " \001(\t\"\216\001\n\nCarrierTos\022 \n\006dcbTos\030\001 \001(\0132\020.Ca" +
      "rrierTosEntry\022 \n\006piiTos\030\002 \001(\0132\020.CarrierT" +
      "osEntry\022\035\n\025needsDcbTosAcceptance\030\003 \001(\010\022\035",
      "\n\025needsPiiTosAcceptance\030\004 \001(\010\"/\n\017Carrier" +
      "TosEntry\022\013\n\003url\030\001 \001(\t\022\017\n\007version\030\002 \001(\t\"\242" +
      "\001\n\024CreditCardInstrument\022\014\n\004type\030\001 \001(\005\022\024\n" +
      "\014escrowHandle\030\002 \001(\t\022\022\n\nlastDigits\030\003 \001(\t\022" +
      "\027\n\017expirationMonth\030\004 \001(\005\022\026\n\016expirationYe" +
      "ar\030\005 \001(\005\022!\n\016escrowEfeParam\030\006 \003(\0132\t.EfePa" +
      "ram\"&\n\010EfeParam\022\013\n\003key\030\001 \001(\005\022\r\n\005value\030\002 " +
      "\001(\t\"@\n\024InputValidationError\022\022\n\ninputFiel" +
      "d\030\001 \001(\005\022\024\n\014errorMessage\030\002 \001(\t\"\302\002\n\nInstru" +
      "ment\022\024\n\014instrumentId\030\001 \001(\t\022 \n\016billingAdd",
      "ress\030\002 \001(\0132\010.Address\022)\n\ncreditCard\030\003 \001(\013" +
      "2\025.CreditCardInstrument\0221\n\016carrierBillin" +
      "g\030\004 \001(\0132\031.CarrierBillingInstrument\022/\n\022bi" +
      "llingAddressSpec\030\005 \001(\0132\023.BillingAddressS" +
      "pec\022\030\n\020instrumentFamily\030\006 \001(\005\022=\n\024carrier" +
      "BillingStatus\030\007 \001(\0132\037.CarrierBillingInst" +
      "rumentStatus\022\024\n\014displayTitle\030\010 \001(\t\";\n\016Pa" +
      "sswordPrompt\022\016\n\006prompt\030\001 \001(\t\022\031\n\021forgotPa" +
      "sswordUrl\030\002 \001(\t\"\222\001\n\021ContainerMetadata\022\021\n" +
      "\tbrowseUrl\030\001 \001(\t\022\023\n\013nextPageUrl\030\002 \001(\t\022\021\n",
      "\trelevance\030\003 \001(\001\022\030\n\020estimatedResults\030\004 \001" +
      "(\003\022\027\n\017analyticsCookie\030\005 \001(\t\022\017\n\007ordered\030\006" +
      " \001(\010\"i\n\tDebugInfo\022\017\n\007message\030\001 \003(\t\022!\n\006ti" +
      "ming\030\002 \003(\n2\021.DebugInfo.Timing\032(\n\006Timing\022" +
      "\014\n\004name\030\003 \001(\t\022\020\n\010timeInMs\030\004 \001(\001\"\'\n\020BulkD" +
      "etailsEntry\022\023\n\003doc\030\001 \001(\0132\006.DocV2\"=\n\022Bulk" +
      "DetailsRequest\022\r\n\005docid\030\001 \003(\t\022\030\n\020include" +
      "ChildDocs\030\002 \001(\010\"7\n\023BulkDetailsResponse\022 " +
      "\n\005entry\030\001 \003(\0132\021.BulkDetailsEntry\"\211\001\n\017Det" +
      "ailsResponse\022\025\n\005docV1\030\001 \001(\0132\006.DocV1\022\027\n\017a",
      "nalyticsCookie\030\002 \001(\t\022\033\n\nuserReview\030\003 \001(\013" +
      "2\007.Review\022\025\n\005docV2\030\004 \001(\0132\006.DocV2\022\022\n\nfoot" +
      "erHtml\030\005 \001(\t\"\265\003\n\030DeviceConfigurationProt" +
      "o\022\023\n\013touchScreen\030\001 \001(\005\022\020\n\010keyboard\030\002 \001(\005" +
      "\022\022\n\nnavigation\030\003 \001(\005\022\024\n\014screenLayout\030\004 \001" +
      "(\005\022\027\n\017hasHardKeyboard\030\005 \001(\010\022\034\n\024hasFiveWa" +
      "yNavigation\030\006 \001(\010\022\025\n\rscreenDensity\030\007 \001(\005" +
      "\022\023\n\013glEsVersion\030\010 \001(\005\022\033\n\023systemSharedLib" +
      "rary\030\t \003(\t\022\036\n\026systemAvailableFeature\030\n \003" +
      "(\t\022\026\n\016nativePlatform\030\013 \003(\t\022\023\n\013screenWidt",
      "h\030\014 \001(\005\022\024\n\014screenHeight\030\r \001(\005\022\035\n\025systemS" +
      "upportedLocale\030\016 \003(\t\022\023\n\013glExtension\030\017 \003(" +
      "\t\022\023\n\013deviceClass\030\020 \001(\005\022\034\n\024maxApkDownload" +
      "SizeMb\030\021 \001(\005\"\377\003\n\010Document\022\025\n\005docid\030\001 \001(\013" +
      "2\006.Docid\022\032\n\nfetchDocid\030\002 \001(\0132\006.Docid\022\033\n\013" +
      "sampleDocid\030\003 \001(\0132\006.Docid\022\r\n\005title\030\004 \001(\t" +
      "\022\013\n\003url\030\005 \001(\t\022\017\n\007snippet\030\006 \003(\t\022\037\n\017priceD" +
      "eprecated\030\007 \001(\0132\006.Offer\022#\n\014availability\030" +
      "\t \001(\0132\r.Availability\022\025\n\005image\030\n \003(\0132\006.Im" +
      "age\022\030\n\005child\030\013 \003(\0132\t.Document\022)\n\017aggrega",
      "teRating\030\r \001(\0132\020.AggregateRating\022\025\n\005offe" +
      "r\030\016 \003(\0132\006.Offer\022*\n\021translatedSnippet\030\017 \003" +
      "(\0132\017.TranslatedText\022)\n\017documentVariant\030\020" +
      " \003(\0132\020.DocumentVariant\022\022\n\ncategoryId\030\021 \003" +
      "(\t\022\035\n\ndecoration\030\022 \003(\0132\t.Document\022\031\n\006par" +
      "ent\030\023 \003(\0132\t.Document\022\030\n\020privacyPolicyUrl" +
      "\030\024 \001(\t\"\201\002\n\017DocumentVariant\022\025\n\rvariationT" +
      "ype\030\001 \001(\005\022\023\n\004rule\030\002 \001(\0132\005.Rule\022\r\n\005title\030" +
      "\003 \001(\t\022\017\n\007snippet\030\004 \003(\t\022\025\n\rrecentChanges\030" +
      "\005 \001(\t\022(\n\017autoTranslation\030\006 \003(\0132\017.Transla",
      "tedText\022\025\n\005offer\030\007 \003(\0132\006.Offer\022\021\n\tchanne" +
      "lId\030\t \001(\003\022\030\n\005child\030\n \003(\0132\t.Document\022\035\n\nd" +
      "ecoration\030\013 \003(\0132\t.Document\"\272\002\n\005Image\022\021\n\t" +
      "imageType\030\001 \001(\005\022#\n\tdimension\030\002 \001(\n2\020.Ima" +
      "ge.Dimension\022\020\n\010imageUrl\030\005 \001(\t\022\030\n\020altTex" +
      "tLocalized\030\006 \001(\t\022\021\n\tsecureUrl\030\007 \001(\t\022\032\n\022p" +
      "ositionInSequence\030\010 \001(\005\022\036\n\026supportsFifeU" +
      "rlOptions\030\t \001(\010\022!\n\010citation\030\n \001(\n2\017.Imag" +
      "e.Citation\032*\n\tDimension\022\r\n\005width\030\003 \001(\005\022\016" +
      "\n\006height\030\004 \001(\005\032/\n\010Citation\022\026\n\016titleLocal",
      "ized\030\013 \001(\t\022\013\n\003url\030\014 \001(\t\"J\n\016TranslatedTex" +
      "t\022\014\n\004text\030\001 \001(\t\022\024\n\014sourceLocale\030\002 \001(\t\022\024\n" +
      "\014targetLocale\030\003 \001(\t\"i\n\013PlusOneData\022\021\n\tse" +
      "tByUser\030\001 \001(\010\022\r\n\005total\030\002 \001(\003\022\024\n\014circlesT" +
      "otal\030\003 \001(\003\022\"\n\rcirclesPeople\030\004 \003(\0132\013.Plus" +
      "Person\":\n\nPlusPerson\022\023\n\013displayName\030\002 \001(" +
      "\t\022\027\n\017profileImageUrl\030\004 \001(\t\"c\n\014AlbumDetai" +
      "ls\022\014\n\004name\030\001 \001(\t\022\036\n\007details\030\002 \001(\0132\r.Musi" +
      "cDetails\022%\n\rdisplayArtist\030\003 \001(\0132\016.Artist" +
      "Details\"\216\003\n\nAppDetails\022\025\n\rdeveloperName\030",
      "\001 \001(\t\022\032\n\022majorVersionNumber\030\002 \001(\005\022\023\n\013ver" +
      "sionCode\030\003 \001(\005\022\025\n\rversionString\030\004 \001(\t\022\r\n" +
      "\005title\030\005 \001(\t\022\023\n\013appCategory\030\007 \003(\t\022\025\n\rcon" +
      "tentRating\030\010 \001(\005\022\030\n\020installationSize\030\t \001" +
      "(\003\022\022\n\npermission\030\n \003(\t\022\026\n\016developerEmail" +
      "\030\013 \001(\t\022\030\n\020developerWebsite\030\014 \001(\t\022\024\n\014numD" +
      "ownloads\030\r \001(\t\022\023\n\013packageName\030\016 \001(\t\022\031\n\021r" +
      "ecentChangesHtml\030\017 \001(\t\022\022\n\nuploadDate\030\020 \001" +
      "(\t\022\033\n\004file\030\021 \003(\0132\r.FileMetadata\022\017\n\007appTy" +
      "pe\030\022 \001(\t\"^\n\rArtistDetails\022\022\n\ndetailsUrl\030",
      "\001 \001(\t\022\014\n\004name\030\002 \001(\t\022+\n\rexternalLinks\030\003 \001" +
      "(\0132\024.ArtistExternalLinks\"b\n\023ArtistExtern" +
      "alLinks\022\022\n\nwebsiteUrl\030\001 \003(\t\022\034\n\024googlePlu" +
      "sProfileUrl\030\002 \001(\t\022\031\n\021youtubeChannelUrl\030\003" +
      " \001(\t\"\306\003\n\017DocumentDetails\022\037\n\nappDetails\030\001" +
      " \001(\0132\013.AppDetails\022#\n\014albumDetails\030\002 \001(\0132" +
      "\r.AlbumDetails\022%\n\rartistDetails\030\003 \001(\0132\016." +
      "ArtistDetails\022!\n\013songDetails\030\004 \001(\0132\014.Son" +
      "gDetails\022!\n\013bookDetails\030\005 \001(\0132\014.BookDeta" +
      "ils\022#\n\014videoDetails\030\006 \001(\0132\r.VideoDetails",
      "\0221\n\023subscriptionDetails\030\007 \001(\0132\024.Subscrip" +
      "tionDetails\022)\n\017magazineDetails\030\010 \001(\0132\020.M" +
      "agazineDetails\022%\n\rtvShowDetails\030\t \001(\0132\016." +
      "TvShowDetails\022)\n\017tvSeasonDetails\030\n \001(\0132\020" +
      ".TvSeasonDetails\022+\n\020tvEpisodeDetails\030\013 \001" +
      "(\0132\021.TvEpisodeDetails\"C\n\014FileMetadata\022\020\n" +
      "\010fileType\030\001 \001(\005\022\023\n\013versionCode\030\002 \001(\005\022\014\n\004" +
      "size\030\003 \001(\003\"\224\001\n\017MagazineDetails\022\030\n\020parent" +
      "DetailsUrl\030\001 \001(\t\022)\n!deviceAvailabilityDe" +
      "scriptionHtml\030\002 \001(\t\022\026\n\016psvDescription\030\003 ",
      "\001(\t\022$\n\034deliveryFrequencyDescription\030\004 \001(" +
      "\t\"\273\001\n\014MusicDetails\022\021\n\tcensoring\030\001 \001(\005\022\023\n" +
      "\013durationSec\030\002 \001(\005\022\033\n\023originalReleaseDat" +
      "e\030\003 \001(\t\022\r\n\005label\030\004 \001(\t\022\036\n\006artist\030\005 \003(\0132\016" +
      ".ArtistDetails\022\r\n\005genre\030\006 \003(\t\022\023\n\013release" +
      "Date\030\007 \001(\t\022\023\n\013releaseType\030\010 \003(\005\"\236\001\n\013Song" +
      "Details\022\014\n\004name\030\001 \001(\t\022\036\n\007details\030\002 \001(\0132\r" +
      ".MusicDetails\022\021\n\talbumName\030\003 \001(\t\022\023\n\013trac" +
      "kNumber\030\004 \001(\005\022\022\n\npreviewUrl\030\005 \001(\t\022%\n\rdis" +
      "playArtist\030\006 \001(\0132\016.ArtistDetails\"1\n\023Subs",
      "criptionDetails\022\032\n\022subscriptionPeriod\030\001 " +
      "\001(\005\"e\n\007Trailer\022\021\n\ttrailerId\030\001 \001(\t\022\r\n\005tit" +
      "le\030\002 \001(\t\022\024\n\014thumbnailUrl\030\003 \001(\t\022\020\n\010watchU" +
      "rl\030\004 \001(\t\022\020\n\010duration\030\005 \001(\t\"W\n\020TvEpisodeD" +
      "etails\022\030\n\020parentDetailsUrl\030\001 \001(\t\022\024\n\014epis" +
      "odeIndex\030\002 \001(\005\022\023\n\013releaseDate\030\003 \001(\t\"j\n\017T" +
      "vSeasonDetails\022\030\n\020parentDetailsUrl\030\001 \001(\t" +
      "\022\023\n\013seasonIndex\030\002 \001(\005\022\023\n\013releaseDate\030\003 \001" +
      "(\t\022\023\n\013broadcaster\030\004 \001(\t\"]\n\rTvShowDetails" +
      "\022\023\n\013seasonCount\030\001 \001(\005\022\021\n\tstartYear\030\002 \001(\005",
      "\022\017\n\007endYear\030\003 \001(\005\022\023\n\013broadcaster\030\004 \001(\t\"?" +
      "\n\013VideoCredit\022\022\n\ncreditType\030\001 \001(\005\022\016\n\006cre" +
      "dit\030\002 \001(\t\022\014\n\004name\030\003 \003(\t\"\333\001\n\014VideoDetails" +
      "\022\034\n\006credit\030\001 \003(\0132\014.VideoCredit\022\020\n\010durati" +
      "on\030\002 \001(\t\022\023\n\013releaseDate\030\003 \001(\t\022\025\n\rcontent" +
      "Rating\030\004 \001(\t\022\r\n\005likes\030\005 \001(\003\022\020\n\010dislikes\030" +
      "\006 \001(\003\022\r\n\005genre\030\007 \003(\t\022\031\n\007trailer\030\010 \003(\0132\010." +
      "Trailer\022$\n\nrentalTerm\030\t \003(\0132\020.VideoRenta" +
      "lTerm\"\240\001\n\017VideoRentalTerm\022\021\n\tofferType\030\001" +
      " \001(\005\022\031\n\021offerAbbreviation\030\002 \001(\t\022\024\n\014renta",
      "lHeader\030\003 \001(\t\022#\n\004term\030\004 \003(\n2\025.VideoRenta" +
      "lTerm.Term\032$\n\004Term\022\016\n\006header\030\005 \001(\t\022\014\n\004bo" +
      "dy\030\006 \001(\t\"\371\001\n\006Bucket\022\030\n\010document\030\001 \003(\0132\006." +
      "DocV1\022\023\n\013multiCorpus\030\002 \001(\010\022\r\n\005title\030\003 \001(" +
      "\t\022\017\n\007iconUrl\030\004 \001(\t\022\027\n\017fullContentsUrl\030\005 " +
      "\001(\t\022\021\n\trelevance\030\006 \001(\001\022\030\n\020estimatedResul" +
      "ts\030\007 \001(\003\022\027\n\017analyticsCookie\030\010 \001(\t\022\033\n\023ful" +
      "lContentsListUrl\030\t \001(\t\022\023\n\013nextPageUrl\030\n " +
      "\001(\t\022\017\n\007ordered\030\013 \001(\010\"<\n\014ListResponse\022\027\n\006" +
      "bucket\030\001 \003(\0132\007.Bucket\022\023\n\003doc\030\002 \003(\0132\006.Doc",
      "V2\"\224\003\n\005DocV1\022\034\n\tfinskyDoc\030\001 \001(\0132\t.Docume" +
      "nt\022\r\n\005docid\030\002 \001(\t\022\022\n\ndetailsUrl\030\003 \001(\t\022\022\n" +
      "\nreviewsUrl\030\004 \001(\t\022\026\n\016relatedListUrl\030\005 \001(" +
      "\t\022\025\n\rmoreByListUrl\030\006 \001(\t\022\020\n\010shareUrl\030\007 \001" +
      "(\t\022\017\n\007creator\030\010 \001(\t\022!\n\007details\030\t \001(\0132\020.D" +
      "ocumentDetails\022\027\n\017descriptionHtml\030\n \001(\t\022" +
      "\030\n\020relatedBrowseUrl\030\013 \001(\t\022\027\n\017moreByBrows" +
      "eUrl\030\014 \001(\t\022\025\n\rrelatedHeader\030\r \001(\t\022\024\n\014mor" +
      "eByHeader\030\016 \001(\t\022\r\n\005title\030\017 \001(\t\022!\n\013plusOn" +
      "eData\030\020 \001(\0132\014.PlusOneData\022\026\n\016warningMess",
      "age\030\021 \001(\t\"\205\004\n\005DocV2\022\r\n\005docid\030\001 \001(\t\022\024\n\014ba" +
      "ckendDocid\030\002 \001(\t\022\017\n\007docType\030\003 \001(\005\022\021\n\tbac" +
      "kendId\030\004 \001(\005\022\r\n\005title\030\005 \001(\t\022\017\n\007creator\030\006" +
      " \001(\t\022\027\n\017descriptionHtml\030\007 \001(\t\022\025\n\005offer\030\010" +
      " \003(\0132\006.Offer\022#\n\014availability\030\t \001(\0132\r.Ava" +
      "ilability\022\025\n\005image\030\n \003(\0132\006.Image\022\025\n\005chil" +
      "d\030\013 \003(\0132\006.DocV2\022-\n\021containerMetadata\030\014 \001" +
      "(\0132\022.ContainerMetadata\022!\n\007details\030\r \001(\0132" +
      "\020.DocumentDetails\022)\n\017aggregateRating\030\016 \001" +
      "(\0132\020.AggregateRating\022\022\n\ndetailsUrl\030\020 \001(\t",
      "\022\020\n\010shareUrl\030\021 \001(\t\022\022\n\nreviewsUrl\030\022 \001(\t\022\022" +
      "\n\nbackendUrl\030\023 \001(\t\022\032\n\022purchaseDetailsUrl" +
      "\030\024 \001(\t\022\027\n\017detailsReusable\030\025 \001(\010\022\020\n\010subti" +
      "tle\030\026 \001(\t\"\231\001\n\027EncryptedSubscriberInfo\022\014\n" +
      "\004data\030\001 \001(\t\022\024\n\014encryptedKey\030\002 \001(\t\022\021\n\tsig" +
      "nature\030\003 \001(\t\022\022\n\ninitVector\030\004 \001(\t\022\030\n\020goog" +
      "leKeyVersion\030\005 \001(\005\022\031\n\021carrierKeyVersion\030" +
      "\006 \001(\005\"\275\003\n\014Availability\022\023\n\013restriction\030\005 " +
      "\001(\005\022\021\n\tofferType\030\006 \001(\005\022\023\n\004rule\030\007 \001(\0132\005.R" +
      "ule\022X\n perdeviceavailabilityrestriction\030",
      "\t \003(\n2..Availability.PerDeviceAvailabili" +
      "tyRestriction\022\030\n\020availableIfOwned\030\r \001(\010\022" +
      "\031\n\007install\030\016 \003(\0132\010.Install\022)\n\nfilterInfo" +
      "\030\020 \001(\0132\025.FilterEvaluationInfo\022%\n\rownersh" +
      "ipInfo\030\021 \001(\0132\016.OwnershipInfo\032\216\001\n PerDevi" +
      "ceAvailabilityRestriction\022\021\n\tandroidId\030\n" +
      " \001(\006\022\031\n\021deviceRestriction\030\013 \001(\005\022\021\n\tchann" +
      "elId\030\014 \001(\003\022)\n\nfilterInfo\030\017 \001(\0132\025.FilterE" +
      "valuationInfo\"?\n\024FilterEvaluationInfo\022\'\n" +
      "\016ruleEvaluation\030\001 \003(\0132\017.RuleEvaluation\"\324",
      "\001\n\004Rule\022\016\n\006negate\030\001 \001(\010\022\020\n\010operator\030\002 \001(" +
      "\005\022\013\n\003key\030\003 \001(\005\022\021\n\tstringArg\030\004 \003(\t\022\017\n\007lon" +
      "gArg\030\005 \003(\003\022\021\n\tdoubleArg\030\006 \003(\001\022\026\n\007subrule" +
      "\030\007 \003(\0132\005.Rule\022\024\n\014responseCode\030\010 \001(\005\022\017\n\007c" +
      "omment\030\t \001(\t\022\025\n\rstringArgHash\030\n \003(\006\022\020\n\010c" +
      "onstArg\030\013 \003(\005\"\215\001\n\016RuleEvaluation\022\023\n\004rule" +
      "\030\001 \001(\0132\005.Rule\022\031\n\021actualStringValue\030\002 \003(\t" +
      "\022\027\n\017actualLongValue\030\003 \003(\003\022\027\n\017actualBoolV" +
      "alue\030\004 \003(\010\022\031\n\021actualDoubleValue\030\005 \003(\001\"v\n" +
      "\021LibraryAppDetails\022\027\n\017certificateHash\030\002 ",
      "\001(\t\022\"\n\032refundTimeoutTimestampMsec\030\003 \001(\003\022" +
      "$\n\034postDeliveryRefundWindowMsec\030\004 \001(\003\"D\n" +
      "\023LibraryInAppDetails\022\032\n\022signedPurchaseDa" +
      "ta\030\001 \001(\t\022\021\n\tsignature\030\002 \001(\t\"\360\001\n\017LibraryM" +
      "utation\022\025\n\005docid\030\001 \001(\0132\006.Docid\022\021\n\tofferT" +
      "ype\030\002 \001(\005\022\024\n\014documentHash\030\003 \001(\003\022\017\n\007delet" +
      "ed\030\004 \001(\010\022&\n\nappDetails\030\005 \001(\0132\022.LibraryAp" +
      "pDetails\0228\n\023subscriptionDetails\030\006 \001(\0132\033." +
      "LibrarySubscriptionDetails\022*\n\014inAppDetai" +
      "ls\030\007 \001(\0132\024.LibraryInAppDetails\"\225\001\n\032Libra",
      "rySubscriptionDetails\022\037\n\027initiationTimes" +
      "tampMsec\030\001 \001(\003\022\037\n\027validUntilTimestampMse" +
      "c\030\002 \001(\003\022\024\n\014autoRenewing\030\003 \001(\010\022\037\n\027trialUn" +
      "tilTimestampMsec\030\004 \001(\003\"\214\001\n\rLibraryUpdate" +
      "\022\016\n\006status\030\001 \001(\005\022\016\n\006corpus\030\002 \001(\005\022\023\n\013serv" +
      "erToken\030\003 \001(\014\022\"\n\010mutation\030\004 \003(\0132\020.Librar" +
      "yMutation\022\017\n\007hasMore\030\005 \001(\010\022\021\n\tlibraryId\030" +
      "\006 \001(\t\"B\n\032AndroidAppNotificationData\022\023\n\013v" +
      "ersionCode\030\001 \001(\005\022\017\n\007assetId\030\002 \001(\t\"M\n\025InA" +
      "ppNotificationData\022\027\n\017checkoutOrderId\030\001 ",
      "\001(\t\022\033\n\023inAppNotificationId\030\002 \001(\t\"#\n\020Libr" +
      "aryDirtyData\022\017\n\007backend\030\001 \001(\005\"\227\004\n\014Notifi" +
      "cation\022\030\n\020notificationType\030\001 \001(\005\022\021\n\ttime" +
      "stamp\030\003 \001(\003\022\025\n\005docid\030\004 \001(\0132\006.Docid\022\020\n\010do" +
      "cTitle\030\005 \001(\t\022\021\n\tuserEmail\030\006 \001(\t\022,\n\007appDa" +
      "ta\030\007 \001(\0132\033.AndroidAppNotificationData\0220\n" +
      "\017appDeliveryData\030\010 \001(\0132\027.AndroidAppDeliv" +
      "eryData\0221\n\023purchaseRemovalData\030\t \001(\0132\024.P" +
      "urchaseRemovalData\0223\n\024userNotificationDa" +
      "ta\030\n \001(\0132\025.UserNotificationData\0225\n\025inApp",
      "NotificationData\030\013 \001(\0132\026.InAppNotificati" +
      "onData\0223\n\024purchaseDeclinedData\030\014 \001(\0132\025.P" +
      "urchaseDeclinedData\022\026\n\016notificationId\030\r " +
      "\001(\t\022%\n\rlibraryUpdate\030\016 \001(\0132\016.LibraryUpda" +
      "te\022+\n\020libraryDirtyData\030\017 \001(\0132\021.LibraryDi" +
      "rtyData\"@\n\024PurchaseDeclinedData\022\016\n\006reaso" +
      "n\030\001 \001(\005\022\030\n\020showNotification\030\002 \001(\010\"(\n\023Pur" +
      "chaseRemovalData\022\021\n\tmalicious\030\001 \001(\010\"\210\001\n\024" +
      "UserNotificationData\022\031\n\021notificationTitl" +
      "e\030\001 \001(\t\022\030\n\020notificationText\030\002 \001(\t\022\022\n\ntic",
      "kerText\030\003 \001(\t\022\023\n\013dialogTitle\030\004 \001(\t\022\022\n\ndi" +
      "alogText\030\005 \001(\t\"\247\002\n\017AggregateRating\022\014\n\004ty" +
      "pe\030\001 \001(\005\022\022\n\nstarRating\030\002 \001(\002\022\024\n\014ratingsC" +
      "ount\030\003 \001(\004\022\026\n\016oneStarRatings\030\004 \001(\004\022\026\n\016tw" +
      "oStarRatings\030\005 \001(\004\022\030\n\020threeStarRatings\030\006" +
      " \001(\004\022\027\n\017fourStarRatings\030\007 \001(\004\022\027\n\017fiveSta" +
      "rRatings\030\010 \001(\004\022\025\n\rthumbsUpCount\030\t \001(\004\022\027\n" +
      "\017thumbsDownCount\030\n \001(\004\022\024\n\014commentCount\030\013" +
      " \001(\004\022\032\n\022bayesianMeanRating\030\014 \001(\001\"\212\004\n\007Pay" +
      "load\022#\n\014listResponse\030\001 \001(\0132\r.ListRespons",
      "e\022)\n\017detailsResponse\030\002 \001(\0132\020.DetailsResp" +
      "onse\022\'\n\016reviewResponse\030\003 \001(\0132\017.ReviewRes" +
      "ponse\022!\n\013buyResponse\030\004 \001(\0132\014.BuyResponse" +
      "\022\'\n\016searchResponse\030\005 \001(\0132\017.SearchRespons" +
      "e\022\'\n\016browseResponse\030\007 \001(\0132\017.BrowseRespon" +
      "se\0227\n\026purchaseStatusResponse\030\010 \001(\0132\027.Pur" +
      "chaseStatusResponse\0221\n\023bulkDetailsRespon" +
      "se\030\023 \001(\0132\024.BulkDetailsResponse\022?\n\032upload" +
      "DeviceConfigResponse\030\031 \001(\0132\033.UploadDevic" +
      "eConfigResponse\0227\n\026androidCheckinRespons",
      "e\030\032 \001(\0132\027.AndroidCheckinResponse\022+\n\020deli" +
      "veryResponse\030\025 \001(\0132\021.DeliveryResponse\"U\n" +
      "\010PreFetch\022\013\n\003url\030\001 \001(\t\022\020\n\010response\030\002 \001(\014" +
      "\022\014\n\004etag\030\003 \001(\t\022\013\n\003ttl\030\004 \001(\003\022\017\n\007softTtl\030\005" +
      " \001(\003\"\221\001\n\017ResponseWrapper\022\031\n\007payload\030\001 \001(" +
      "\0132\010.Payload\022!\n\010commands\030\002 \001(\0132\017.ServerCo" +
      "mmands\022\033\n\010preFetch\030\003 \003(\0132\t.PreFetch\022#\n\014n" +
      "otification\030\004 \003(\0132\r.Notification\"]\n\016Serv" +
      "erCommands\022\022\n\nclearCache\030\001 \001(\010\022\033\n\023displa" +
      "yErrorMessage\030\002 \001(\t\022\032\n\022logErrorStacktrac",
      "e\030\003 \001(\t\"D\n\022GetReviewsResponse\022\027\n\006review\030" +
      "\001 \003(\0132\007.Review\022\025\n\rmatchingCount\030\002 \001(\003\"\214\002" +
      "\n\006Review\022\022\n\nauthorName\030\001 \001(\t\022\013\n\003url\030\002 \001(" +
      "\t\022\016\n\006source\030\003 \001(\t\022\027\n\017documentVersion\030\004 \001" +
      "(\t\022\025\n\rtimestampMsec\030\005 \001(\003\022\022\n\nstarRating\030" +
      "\006 \001(\005\022\r\n\005title\030\007 \001(\t\022\017\n\007comment\030\010 \001(\t\022\021\n" +
      "\tcommentId\030\t \001(\t\022\022\n\ndeviceName\030\023 \001(\t\022\021\n\t" +
      "replyText\030\035 \001(\t\022\032\n\022replyTimestampMsec\030\036 " +
      "\001(\003\022\027\n\006author\030\037 \001(\0132\007.Author\"-\n\006Author\022\014" +
      "\n\004name\030\002 \001(\t\022\025\n\004urls\030\005 \001(\0132\007.Avatar\"L\n\006A",
      "vatar\022\020\n\010unknown1\030\001 \001(\010\022\013\n\003url\030\005 \001(\t\022\021\n\t" +
      "secureUrl\030\007 \001(\t\022\020\n\010unknown2\030\t \001(\010\"O\n\016Rev" +
      "iewResponse\022(\n\013getResponse\030\001 \001(\0132\023.GetRe" +
      "viewsResponse\022\023\n\013nextPageUrl\030\002 \001(\t\"g\n\rRe" +
      "latedSearch\022\021\n\tsearchUrl\030\001 \001(\t\022\016\n\006header" +
      "\030\002 \001(\t\022\021\n\tbackendId\030\003 \001(\005\022\017\n\007docType\030\004 \001" +
      "(\005\022\017\n\007current\030\005 \001(\010\"\254\001\n\016SearchResponse\022\025" +
      "\n\roriginalQuery\030\001 \001(\t\022\026\n\016suggestedQuery\030" +
      "\002 \001(\t\022\026\n\016aggregateQuery\030\003 \001(\010\022\027\n\006bucket\030" +
      "\004 \003(\0132\007.Bucket\022\023\n\003doc\030\005 \003(\0132\006.DocV2\022%\n\rr",
      "elatedSearch\030\006 \003(\0132\016.RelatedSearch\"\204\001\n\031U" +
      "ploadDeviceConfigRequest\0226\n\023deviceConfig" +
      "uration\030\001 \001(\0132\031.DeviceConfigurationProto" +
      "\022\024\n\014manufacturer\030\002 \001(\t\022\031\n\021gcmRegistratio" +
      "nId\030\003 \001(\t\"=\n\032UploadDeviceConfigResponse\022" +
      "\037\n\027uploadDeviceConfigToken\030\001 \001(\t\"\347\003\n\025And" +
      "roidCheckinRequest\022\014\n\004imei\030\001 \001(\t\022\n\n\002id\030\002" +
      " \001(\003\022\016\n\006digest\030\003 \001(\t\022%\n\007checkin\030\004 \001(\0132\024." +
      "AndroidCheckinProto\022\024\n\014desiredBuild\030\005 \001(" +
      "\t\022\016\n\006locale\030\006 \001(\t\022\021\n\tloggingId\030\007 \001(\003\022\025\n\r",
      "marketCheckin\030\010 \001(\t\022\017\n\007macAddr\030\t \003(\t\022\014\n\004" +
      "meid\030\n \001(\t\022\025\n\raccountCookie\030\013 \003(\t\022\020\n\010tim" +
      "eZone\030\014 \001(\t\022\025\n\rsecurityToken\030\r \001(\006\022\017\n\007ve" +
      "rsion\030\016 \001(\005\022\017\n\007otaCert\030\017 \003(\t\022\024\n\014serialNu" +
      "mber\030\020 \001(\t\022\013\n\003esn\030\021 \001(\t\0226\n\023deviceConfigu" +
      "ration\030\022 \001(\0132\031.DeviceConfigurationProto\022" +
      "\023\n\013macAddrType\030\023 \003(\t\022\020\n\010fragment\030\024 \001(\005\022\020" +
      "\n\010userName\030\025 \001(\t\022\030\n\020userSerialNumber\030\026 \001" +
      "(\005\"\375\001\n\026AndroidCheckinResponse\022\017\n\007statsOk" +
      "\030\001 \001(\010\022#\n\006intent\030\002 \003(\0132\023.AndroidIntentPr",
      "oto\022\020\n\010timeMsec\030\003 \001(\003\022\016\n\006digest\030\004 \001(\t\022\"\n" +
      "\007setting\030\005 \003(\0132\021.GservicesSetting\022\020\n\010mar" +
      "ketOk\030\006 \001(\010\022\021\n\tandroidId\030\007 \001(\006\022\025\n\rsecuri" +
      "tyToken\030\010 \001(\006\022\024\n\014settingsDiff\030\t \001(\010\022\025\n\rd" +
      "eleteSetting\030\n \003(\t\"/\n\020GservicesSetting\022\014" +
      "\n\004name\030\001 \001(\014\022\r\n\005value\030\002 \001(\014\"\224\002\n\021AndroidB" +
      "uildProto\022\n\n\002id\030\001 \001(\t\022\017\n\007product\030\002 \001(\t\022\017" +
      "\n\007carrier\030\003 \001(\t\022\r\n\005radio\030\004 \001(\t\022\022\n\nbootlo" +
      "ader\030\005 \001(\t\022\016\n\006client\030\006 \001(\t\022\021\n\ttimestamp\030" +
      "\007 \001(\003\022\026\n\016googleServices\030\010 \001(\005\022\016\n\006device\030",
      "\t \001(\t\022\022\n\nsdkVersion\030\n \001(\005\022\r\n\005model\030\013 \001(\t" +
      "\022\024\n\014manufacturer\030\014 \001(\t\022\024\n\014buildProduct\030\r" +
      " \001(\t\022\024\n\014otaInstalled\030\016 \001(\010\"\202\002\n\023AndroidCh" +
      "eckinProto\022!\n\005build\030\001 \001(\0132\022.AndroidBuild" +
      "Proto\022\027\n\017lastCheckinMsec\030\002 \001(\003\022!\n\005event\030" +
      "\003 \003(\0132\022.AndroidEventProto\022$\n\004stat\030\004 \003(\0132" +
      "\026.AndroidStatisticProto\022\026\n\016requestedGrou" +
      "p\030\005 \003(\t\022\024\n\014cellOperator\030\006 \001(\t\022\023\n\013simOper" +
      "ator\030\007 \001(\t\022\017\n\007roaming\030\010 \001(\t\022\022\n\nuserNumbe" +
      "r\030\t \001(\005\"A\n\021AndroidEventProto\022\013\n\003tag\030\001 \001(",
      "\t\022\r\n\005value\030\002 \001(\t\022\020\n\010timeMsec\030\003 \001(\003\"\252\001\n\022A" +
      "ndroidIntentProto\022\016\n\006action\030\001 \001(\t\022\017\n\007dat" +
      "aUri\030\002 \001(\t\022\020\n\010mimeType\030\003 \001(\t\022\021\n\tjavaClas" +
      "s\030\004 \001(\t\022(\n\005extra\030\005 \003(\n2\031.AndroidIntentPr" +
      "oto.Extra\032$\n\005Extra\022\014\n\004name\030\006 \001(\t\022\r\n\005valu" +
      "e\030\007 \001(\t\"@\n\025AndroidStatisticProto\022\013\n\003tag\030" +
      "\001 \001(\t\022\r\n\005count\030\002 \001(\005\022\013\n\003sum\030\003 \001(\002\"v\n\022Cli" +
      "entLibraryState\022\016\n\006corpus\030\001 \001(\005\022\023\n\013serve" +
      "rToken\030\002 \001(\014\022\023\n\013hashCodeSum\030\003 \001(\003\022\023\n\013lib" +
      "rarySize\030\004 \001(\005\022\021\n\tlibraryId\030\005 \001(\t\"\342\001\n\025An",
      "droidDataUsageProto\022\017\n\007version\030\001 \001(\005\022\031\n\021" +
      "currentReportMsec\030\002 \001(\003\0229\n\027keyToPackageN" +
      "ameMapping\030\003 \003(\0132\030.KeyToPackageNameMappi" +
      "ng\0221\n\023payloadLevelAppStat\030\004 \003(\0132\024.Payloa" +
      "dLevelAppStat\022/\n\022ipLayerNetworkStat\030\005 \003(" +
      "\0132\023.IpLayerNetworkStat\"n\n\027AndroidUsageSt" +
      "atsReport\022\021\n\tandroidId\030\001 \001(\003\022\021\n\tloggingI" +
      "d\030\002 \001(\003\022-\n\nusageStats\030\003 \001(\0132\031.UsageStats" +
      "ExtensionProto\"}\n\tAppBucket\022\027\n\017bucketSta" +
      "rtMsec\030\001 \001(\003\022\032\n\022bucketDurationMsec\030\002 \001(\003",
      "\022#\n\014statCounters\030\003 \003(\0132\r.StatCounters\022\026\n" +
      "\016operationCount\030\004 \001(\003\"-\n\013CounterData\022\r\n\005" +
      "bytes\030\001 \001(\003\022\017\n\007packets\030\002 \001(\003\"b\n\016IpLayerA" +
      "ppStat\022\022\n\npackageKey\030\001 \001(\005\022\026\n\016applicatio" +
      "nTag\030\002 \001(\005\022$\n\020ipLayerAppBucket\030\003 \003(\0132\n.A" +
      "ppBucket\"\217\001\n\024IpLayerNetworkBucket\022\027\n\017buc" +
      "ketStartMsec\030\001 \001(\003\022\032\n\022bucketDurationMsec" +
      "\030\002 \001(\003\022#\n\014statCounters\030\003 \003(\0132\r.StatCount" +
      "ers\022\035\n\025networkActiveDuration\030\004 \001(\003\"\230\001\n\022I" +
      "pLayerNetworkStat\022\026\n\016networkDetails\030\001 \001(",
      "\t\022\014\n\004type\030\002 \001(\005\0223\n\024ipLayerNetworkBucket\030" +
      "\003 \003(\0132\025.IpLayerNetworkBucket\022\'\n\016ipLayerA" +
      "ppStat\030\004 \003(\0132\017.IpLayerAppStat\"g\n\027KeyToPa" +
      "ckageNameMapping\022\022\n\npackageKey\030\001 \001(\005\022\017\n\007" +
      "uidName\030\002 \001(\t\022\'\n\021sharedPackageList\030\003 \003(\013" +
      "2\014.PackageInfo\"3\n\013PackageInfo\022\017\n\007pkgName" +
      "\030\001 \001(\t\022\023\n\013versionCode\030\002 \001(\005\"l\n\023PayloadLe" +
      "velAppStat\022\022\n\npackageKey\030\001 \001(\005\022\026\n\016applic" +
      "ationTag\030\002 \001(\005\022)\n\025payloadLevelAppBucket\030" +
      "\003 \003(\0132\n.AppBucket\"h\n\014StatCounters\022\024\n\014net",
      "workProto\030\001 \001(\005\022\021\n\tdirection\030\002 \001(\005\022!\n\013co" +
      "unterData\030\003 \001(\0132\014.CounterData\022\014\n\004fgBg\030\004 " +
      "\001(\005\"E\n\030UsageStatsExtensionProto\022)\n\tdataU" +
      "sage\030\001 \001(\0132\026.AndroidDataUsageProtoB\037\n\035co" +
      "m.akdeniz.googleplaycrawler"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
        public com.google.protobuf.ExtensionRegistry assignDescriptors(
            com.google.protobuf.Descriptors.FileDescriptor root) {
          descriptor = root;
          internal_static_AndroidAppDeliveryData_descriptor =
            getDescriptor().getMessageTypes().get(0);
          internal_static_AndroidAppDeliveryData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AndroidAppDeliveryData_descriptor,
              new java.lang.String[] { "DownloadSize", "Signature", "DownloadUrl", "AdditionalFile", "DownloadAuthCookie", "ForwardLocked", "RefundTimeout", "ServerInitiated", "PostInstallRefundWindowMillis", "ImmediateStartNeeded", "PatchData", "EncryptionParams", });
          internal_static_AndroidAppPatchData_descriptor =
            getDescriptor().getMessageTypes().get(1);
          internal_static_AndroidAppPatchData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AndroidAppPatchData_descriptor,
              new java.lang.String[] { "BaseVersionCode", "BaseSignature", "DownloadUrl", "PatchFormat", "MaxPatchSize", });
          internal_static_AppFileMetadata_descriptor =
            getDescriptor().getMessageTypes().get(2);
          internal_static_AppFileMetadata_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AppFileMetadata_descriptor,
              new java.lang.String[] { "FileType", "VersionCode", "Size", "DownloadUrl", });
          internal_static_EncryptionParams_descriptor =
            getDescriptor().getMessageTypes().get(3);
          internal_static_EncryptionParams_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_EncryptionParams_descriptor,
              new java.lang.String[] { "Version", "EncryptionKey", "HmacKey", });
          internal_static_HttpCookie_descriptor =
            getDescriptor().getMessageTypes().get(4);
          internal_static_HttpCookie_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_HttpCookie_descriptor,
              new java.lang.String[] { "Name", "Value", });
          internal_static_Address_descriptor =
            getDescriptor().getMessageTypes().get(5);
          internal_static_Address_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Address_descriptor,
              new java.lang.String[] { "Name", "AddressLine1", "AddressLine2", "City", "State", "PostalCode", "PostalCountry", "DependentLocality", "SortingCode", "LanguageCode", "PhoneNumber", "IsReduced", "FirstName", "LastName", "Email", });
          internal_static_BookAuthor_descriptor =
            getDescriptor().getMessageTypes().get(6);
          internal_static_BookAuthor_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BookAuthor_descriptor,
              new java.lang.String[] { "Name", "DeprecatedQuery", "Docid", });
          internal_static_BookDetails_descriptor =
            getDescriptor().getMessageTypes().get(7);
          internal_static_BookDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BookDetails_descriptor,
              new java.lang.String[] { "Subject", "Publisher", "PublicationDate", "Isbn", "NumberOfPages", "Subtitle", "Author", "ReaderUrl", "DownloadEpubUrl", "DownloadPdfUrl", "AcsEpubTokenUrl", "AcsPdfTokenUrl", "EpubAvailable", "PdfAvailable", "AboutTheAuthor", "Identifier", });
          internal_static_BookDetails_Identifier_descriptor =
            internal_static_BookDetails_descriptor.getNestedTypes().get(0);
          internal_static_BookDetails_Identifier_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BookDetails_Identifier_descriptor,
              new java.lang.String[] { "Type", "Identifier", });
          internal_static_BookSubject_descriptor =
            getDescriptor().getMessageTypes().get(8);
          internal_static_BookSubject_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BookSubject_descriptor,
              new java.lang.String[] { "Name", "Query", "SubjectId", });
          internal_static_BrowseLink_descriptor =
            getDescriptor().getMessageTypes().get(9);
          internal_static_BrowseLink_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BrowseLink_descriptor,
              new java.lang.String[] { "Name", "DataUrl", });
          internal_static_BrowseResponse_descriptor =
            getDescriptor().getMessageTypes().get(10);
          internal_static_BrowseResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BrowseResponse_descriptor,
              new java.lang.String[] { "ContentsUrl", "PromoUrl", "Category", "Breadcrumb", });
          internal_static_AddressChallenge_descriptor =
            getDescriptor().getMessageTypes().get(11);
          internal_static_AddressChallenge_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AddressChallenge_descriptor,
              new java.lang.String[] { "ResponseAddressParam", "ResponseCheckboxesParam", "Title", "DescriptionHtml", "Checkbox", "Address", "ErrorInputField", "ErrorHtml", "RequiredField", });
          internal_static_AuthenticationChallenge_descriptor =
            getDescriptor().getMessageTypes().get(12);
          internal_static_AuthenticationChallenge_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AuthenticationChallenge_descriptor,
              new java.lang.String[] { "AuthenticationType", "ResponseAuthenticationTypeParam", "ResponseRetryCountParam", "PinHeaderText", "PinDescriptionTextHtml", "GaiaHeaderText", "GaiaDescriptionTextHtml", });
          internal_static_BuyResponse_descriptor =
            getDescriptor().getMessageTypes().get(13);
          internal_static_BuyResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BuyResponse_descriptor,
              new java.lang.String[] { "PurchaseResponse", "CheckoutInfo", "ContinueViaUrl", "PurchaseStatusUrl", "CheckoutServiceId", "CheckoutTokenRequired", "BaseCheckoutUrl", "TosCheckboxHtml", "IabPermissionError", "PurchaseStatusResponse", "PurchaseCookie", "Challenge", });
          internal_static_BuyResponse_CheckoutInfo_descriptor =
            internal_static_BuyResponse_descriptor.getNestedTypes().get(0);
          internal_static_BuyResponse_CheckoutInfo_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BuyResponse_CheckoutInfo_descriptor,
              new java.lang.String[] { "Item", "SubItem", "CheckoutOption", "DeprecatedCheckoutUrl", "AddInstrumentUrl", "FooterHtml", "EligibleInstrumentFamily", "FootnoteHtml", "EligibleInstrument", });
          internal_static_BuyResponse_CheckoutInfo_CheckoutOption_descriptor =
            internal_static_BuyResponse_CheckoutInfo_descriptor.getNestedTypes().get(0);
          internal_static_BuyResponse_CheckoutInfo_CheckoutOption_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BuyResponse_CheckoutInfo_CheckoutOption_descriptor,
              new java.lang.String[] { "FormOfPayment", "EncodedAdjustedCart", "InstrumentId", "Item", "SubItem", "Total", "FooterHtml", "InstrumentFamily", "DeprecatedInstrumentInapplicableReason", "SelectedInstrument", "Summary", "FootnoteHtml", "Instrument", "PurchaseCookie", "DisabledReason", });
          internal_static_DeliveryResponse_descriptor =
            getDescriptor().getMessageTypes().get(14);
          internal_static_DeliveryResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_DeliveryResponse_descriptor,
              new java.lang.String[] { "AppDeliveryData", });
          internal_static_Challenge_descriptor =
            getDescriptor().getMessageTypes().get(15);
          internal_static_Challenge_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Challenge_descriptor,
              new java.lang.String[] { "AddressChallenge", "AuthenticationChallenge", });
          internal_static_FormCheckbox_descriptor =
            getDescriptor().getMessageTypes().get(16);
          internal_static_FormCheckbox_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_FormCheckbox_descriptor,
              new java.lang.String[] { "Description", "Checked", "Required", });
          internal_static_LineItem_descriptor =
            getDescriptor().getMessageTypes().get(17);
          internal_static_LineItem_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_LineItem_descriptor,
              new java.lang.String[] { "Name", "Description", "Offer", "Amount", });
          internal_static_Money_descriptor =
            getDescriptor().getMessageTypes().get(18);
          internal_static_Money_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Money_descriptor,
              new java.lang.String[] { "Micros", "CurrencyCode", "FormattedAmount", });
          internal_static_PurchaseNotificationResponse_descriptor =
            getDescriptor().getMessageTypes().get(19);
          internal_static_PurchaseNotificationResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_PurchaseNotificationResponse_descriptor,
              new java.lang.String[] { "Status", "DebugInfo", "LocalizedErrorMessage", "PurchaseId", });
          internal_static_PurchaseStatusResponse_descriptor =
            getDescriptor().getMessageTypes().get(20);
          internal_static_PurchaseStatusResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_PurchaseStatusResponse_descriptor,
              new java.lang.String[] { "Status", "StatusMsg", "StatusTitle", "BriefMessage", "InfoUrl", "LibraryUpdate", "RejectedInstrument", "AppDeliveryData", });
          internal_static_Docid_descriptor =
            getDescriptor().getMessageTypes().get(21);
          internal_static_Docid_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Docid_descriptor,
              new java.lang.String[] { "BackendDocid", "Type", "Backend", });
          internal_static_Install_descriptor =
            getDescriptor().getMessageTypes().get(22);
          internal_static_Install_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Install_descriptor,
              new java.lang.String[] { "AndroidId", "Version", "Bundled", });
          internal_static_Offer_descriptor =
            getDescriptor().getMessageTypes().get(23);
          internal_static_Offer_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Offer_descriptor,
              new java.lang.String[] { "Micros", "CurrencyCode", "FormattedAmount", "ConvertedPrice", "CheckoutFlowRequired", "FullPriceMicros", "FormattedFullAmount", "OfferType", "RentalTerms", "OnSaleDate", "PromotionLabel", "SubscriptionTerms", "FormattedName", "FormattedDescription", });
          internal_static_OwnershipInfo_descriptor =
            getDescriptor().getMessageTypes().get(24);
          internal_static_OwnershipInfo_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OwnershipInfo_descriptor,
              new java.lang.String[] { "InitiationTimestampMsec", "ValidUntilTimestampMsec", "AutoRenewing", "RefundTimeoutTimestampMsec", "PostDeliveryRefundWindowMsec", });
          internal_static_RentalTerms_descriptor =
            getDescriptor().getMessageTypes().get(25);
          internal_static_RentalTerms_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_RentalTerms_descriptor,
              new java.lang.String[] { "GrantPeriodSeconds", "ActivatePeriodSeconds", });
          internal_static_SubscriptionTerms_descriptor =
            getDescriptor().getMessageTypes().get(26);
          internal_static_SubscriptionTerms_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_SubscriptionTerms_descriptor,
              new java.lang.String[] { "RecurringPeriod", "TrialPeriod", });
          internal_static_TimePeriod_descriptor =
            getDescriptor().getMessageTypes().get(27);
          internal_static_TimePeriod_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TimePeriod_descriptor,
              new java.lang.String[] { "Unit", "Count", });
          internal_static_BillingAddressSpec_descriptor =
            getDescriptor().getMessageTypes().get(28);
          internal_static_BillingAddressSpec_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BillingAddressSpec_descriptor,
              new java.lang.String[] { "BillingAddressType", "RequiredField", });
          internal_static_CarrierBillingCredentials_descriptor =
            getDescriptor().getMessageTypes().get(29);
          internal_static_CarrierBillingCredentials_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_CarrierBillingCredentials_descriptor,
              new java.lang.String[] { "Value", "Expiration", });
          internal_static_CarrierBillingInstrument_descriptor =
            getDescriptor().getMessageTypes().get(30);
          internal_static_CarrierBillingInstrument_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_CarrierBillingInstrument_descriptor,
              new java.lang.String[] { "InstrumentKey", "AccountType", "CurrencyCode", "TransactionLimit", "SubscriberIdentifier", "EncryptedSubscriberInfo", "Credentials", "AcceptedCarrierTos", });
          internal_static_CarrierBillingInstrumentStatus_descriptor =
            getDescriptor().getMessageTypes().get(31);
          internal_static_CarrierBillingInstrumentStatus_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_CarrierBillingInstrumentStatus_descriptor,
              new java.lang.String[] { "CarrierTos", "AssociationRequired", "PasswordRequired", "CarrierPasswordPrompt", "ApiVersion", "Name", });
          internal_static_CarrierTos_descriptor =
            getDescriptor().getMessageTypes().get(32);
          internal_static_CarrierTos_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_CarrierTos_descriptor,
              new java.lang.String[] { "DcbTos", "PiiTos", "NeedsDcbTosAcceptance", "NeedsPiiTosAcceptance", });
          internal_static_CarrierTosEntry_descriptor =
            getDescriptor().getMessageTypes().get(33);
          internal_static_CarrierTosEntry_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_CarrierTosEntry_descriptor,
              new java.lang.String[] { "Url", "Version", });
          internal_static_CreditCardInstrument_descriptor =
            getDescriptor().getMessageTypes().get(34);
          internal_static_CreditCardInstrument_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_CreditCardInstrument_descriptor,
              new java.lang.String[] { "Type", "EscrowHandle", "LastDigits", "ExpirationMonth", "ExpirationYear", "EscrowEfeParam", });
          internal_static_EfeParam_descriptor =
            getDescriptor().getMessageTypes().get(35);
          internal_static_EfeParam_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_EfeParam_descriptor,
              new java.lang.String[] { "Key", "Value", });
          internal_static_InputValidationError_descriptor =
            getDescriptor().getMessageTypes().get(36);
          internal_static_InputValidationError_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_InputValidationError_descriptor,
              new java.lang.String[] { "InputField", "ErrorMessage", });
          internal_static_Instrument_descriptor =
            getDescriptor().getMessageTypes().get(37);
          internal_static_Instrument_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Instrument_descriptor,
              new java.lang.String[] { "InstrumentId", "BillingAddress", "CreditCard", "CarrierBilling", "BillingAddressSpec", "InstrumentFamily", "CarrierBillingStatus", "DisplayTitle", });
          internal_static_PasswordPrompt_descriptor =
            getDescriptor().getMessageTypes().get(38);
          internal_static_PasswordPrompt_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_PasswordPrompt_descriptor,
              new java.lang.String[] { "Prompt", "ForgotPasswordUrl", });
          internal_static_ContainerMetadata_descriptor =
            getDescriptor().getMessageTypes().get(39);
          internal_static_ContainerMetadata_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_ContainerMetadata_descriptor,
              new java.lang.String[] { "BrowseUrl", "NextPageUrl", "Relevance", "EstimatedResults", "AnalyticsCookie", "Ordered", });
          internal_static_DebugInfo_descriptor =
            getDescriptor().getMessageTypes().get(40);
          internal_static_DebugInfo_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_DebugInfo_descriptor,
              new java.lang.String[] { "Message", "Timing", });
          internal_static_DebugInfo_Timing_descriptor =
            internal_static_DebugInfo_descriptor.getNestedTypes().get(0);
          internal_static_DebugInfo_Timing_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_DebugInfo_Timing_descriptor,
              new java.lang.String[] { "Name", "TimeInMs", });
          internal_static_BulkDetailsEntry_descriptor =
            getDescriptor().getMessageTypes().get(41);
          internal_static_BulkDetailsEntry_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BulkDetailsEntry_descriptor,
              new java.lang.String[] { "Doc", });
          internal_static_BulkDetailsRequest_descriptor =
            getDescriptor().getMessageTypes().get(42);
          internal_static_BulkDetailsRequest_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BulkDetailsRequest_descriptor,
              new java.lang.String[] { "Docid", "IncludeChildDocs", });
          internal_static_BulkDetailsResponse_descriptor =
            getDescriptor().getMessageTypes().get(43);
          internal_static_BulkDetailsResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BulkDetailsResponse_descriptor,
              new java.lang.String[] { "Entry", });
          internal_static_DetailsResponse_descriptor =
            getDescriptor().getMessageTypes().get(44);
          internal_static_DetailsResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_DetailsResponse_descriptor,
              new java.lang.String[] { "DocV1", "AnalyticsCookie", "UserReview", "DocV2", "FooterHtml", });
          internal_static_DeviceConfigurationProto_descriptor =
            getDescriptor().getMessageTypes().get(45);
          internal_static_DeviceConfigurationProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_DeviceConfigurationProto_descriptor,
              new java.lang.String[] { "TouchScreen", "Keyboard", "Navigation", "ScreenLayout", "HasHardKeyboard", "HasFiveWayNavigation", "ScreenDensity", "GlEsVersion", "SystemSharedLibrary", "SystemAvailableFeature", "NativePlatform", "ScreenWidth", "ScreenHeight", "SystemSupportedLocale", "GlExtension", "DeviceClass", "MaxApkDownloadSizeMb", });
          internal_static_Document_descriptor =
            getDescriptor().getMessageTypes().get(46);
          internal_static_Document_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Document_descriptor,
              new java.lang.String[] { "Docid", "FetchDocid", "SampleDocid", "Title", "Url", "Snippet", "PriceDeprecated", "Availability", "Image", "Child", "AggregateRating", "Offer", "TranslatedSnippet", "DocumentVariant", "CategoryId", "Decoration", "Parent", "PrivacyPolicyUrl", });
          internal_static_DocumentVariant_descriptor =
            getDescriptor().getMessageTypes().get(47);
          internal_static_DocumentVariant_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_DocumentVariant_descriptor,
              new java.lang.String[] { "VariationType", "Rule", "Title", "Snippet", "RecentChanges", "AutoTranslation", "Offer", "ChannelId", "Child", "Decoration", });
          internal_static_Image_descriptor =
            getDescriptor().getMessageTypes().get(48);
          internal_static_Image_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Image_descriptor,
              new java.lang.String[] { "ImageType", "Dimension", "ImageUrl", "AltTextLocalized", "SecureUrl", "PositionInSequence", "SupportsFifeUrlOptions", "Citation", });
          internal_static_Image_Dimension_descriptor =
            internal_static_Image_descriptor.getNestedTypes().get(0);
          internal_static_Image_Dimension_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Image_Dimension_descriptor,
              new java.lang.String[] { "Width", "Height", });
          internal_static_Image_Citation_descriptor =
            internal_static_Image_descriptor.getNestedTypes().get(1);
          internal_static_Image_Citation_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Image_Citation_descriptor,
              new java.lang.String[] { "TitleLocalized", "Url", });
          internal_static_TranslatedText_descriptor =
            getDescriptor().getMessageTypes().get(49);
          internal_static_TranslatedText_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TranslatedText_descriptor,
              new java.lang.String[] { "Text", "SourceLocale", "TargetLocale", });
          internal_static_PlusOneData_descriptor =
            getDescriptor().getMessageTypes().get(50);
          internal_static_PlusOneData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_PlusOneData_descriptor,
              new java.lang.String[] { "SetByUser", "Total", "CirclesTotal", "CirclesPeople", });
          internal_static_PlusPerson_descriptor =
            getDescriptor().getMessageTypes().get(51);
          internal_static_PlusPerson_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_PlusPerson_descriptor,
              new java.lang.String[] { "DisplayName", "ProfileImageUrl", });
          internal_static_AlbumDetails_descriptor =
            getDescriptor().getMessageTypes().get(52);
          internal_static_AlbumDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AlbumDetails_descriptor,
              new java.lang.String[] { "Name", "Details", "DisplayArtist", });
          internal_static_AppDetails_descriptor =
            getDescriptor().getMessageTypes().get(53);
          internal_static_AppDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AppDetails_descriptor,
              new java.lang.String[] { "DeveloperName", "MajorVersionNumber", "VersionCode", "VersionString", "Title", "AppCategory", "ContentRating", "InstallationSize", "Permission", "DeveloperEmail", "DeveloperWebsite", "NumDownloads", "PackageName", "RecentChangesHtml", "UploadDate", "File", "AppType", });
          internal_static_ArtistDetails_descriptor =
            getDescriptor().getMessageTypes().get(54);
          internal_static_ArtistDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_ArtistDetails_descriptor,
              new java.lang.String[] { "DetailsUrl", "Name", "ExternalLinks", });
          internal_static_ArtistExternalLinks_descriptor =
            getDescriptor().getMessageTypes().get(55);
          internal_static_ArtistExternalLinks_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_ArtistExternalLinks_descriptor,
              new java.lang.String[] { "WebsiteUrl", "GooglePlusProfileUrl", "YoutubeChannelUrl", });
          internal_static_DocumentDetails_descriptor =
            getDescriptor().getMessageTypes().get(56);
          internal_static_DocumentDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_DocumentDetails_descriptor,
              new java.lang.String[] { "AppDetails", "AlbumDetails", "ArtistDetails", "SongDetails", "BookDetails", "VideoDetails", "SubscriptionDetails", "MagazineDetails", "TvShowDetails", "TvSeasonDetails", "TvEpisodeDetails", });
          internal_static_FileMetadata_descriptor =
            getDescriptor().getMessageTypes().get(57);
          internal_static_FileMetadata_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_FileMetadata_descriptor,
              new java.lang.String[] { "FileType", "VersionCode", "Size", });
          internal_static_MagazineDetails_descriptor =
            getDescriptor().getMessageTypes().get(58);
          internal_static_MagazineDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_MagazineDetails_descriptor,
              new java.lang.String[] { "ParentDetailsUrl", "DeviceAvailabilityDescriptionHtml", "PsvDescription", "DeliveryFrequencyDescription", });
          internal_static_MusicDetails_descriptor =
            getDescriptor().getMessageTypes().get(59);
          internal_static_MusicDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_MusicDetails_descriptor,
              new java.lang.String[] { "Censoring", "DurationSec", "OriginalReleaseDate", "Label", "Artist", "Genre", "ReleaseDate", "ReleaseType", });
          internal_static_SongDetails_descriptor =
            getDescriptor().getMessageTypes().get(60);
          internal_static_SongDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_SongDetails_descriptor,
              new java.lang.String[] { "Name", "Details", "AlbumName", "TrackNumber", "PreviewUrl", "DisplayArtist", });
          internal_static_SubscriptionDetails_descriptor =
            getDescriptor().getMessageTypes().get(61);
          internal_static_SubscriptionDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_SubscriptionDetails_descriptor,
              new java.lang.String[] { "SubscriptionPeriod", });
          internal_static_Trailer_descriptor =
            getDescriptor().getMessageTypes().get(62);
          internal_static_Trailer_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Trailer_descriptor,
              new java.lang.String[] { "TrailerId", "Title", "ThumbnailUrl", "WatchUrl", "Duration", });
          internal_static_TvEpisodeDetails_descriptor =
            getDescriptor().getMessageTypes().get(63);
          internal_static_TvEpisodeDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TvEpisodeDetails_descriptor,
              new java.lang.String[] { "ParentDetailsUrl", "EpisodeIndex", "ReleaseDate", });
          internal_static_TvSeasonDetails_descriptor =
            getDescriptor().getMessageTypes().get(64);
          internal_static_TvSeasonDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TvSeasonDetails_descriptor,
              new java.lang.String[] { "ParentDetailsUrl", "SeasonIndex", "ReleaseDate", "Broadcaster", });
          internal_static_TvShowDetails_descriptor =
            getDescriptor().getMessageTypes().get(65);
          internal_static_TvShowDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TvShowDetails_descriptor,
              new java.lang.String[] { "SeasonCount", "StartYear", "EndYear", "Broadcaster", });
          internal_static_VideoCredit_descriptor =
            getDescriptor().getMessageTypes().get(66);
          internal_static_VideoCredit_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_VideoCredit_descriptor,
              new java.lang.String[] { "CreditType", "Credit", "Name", });
          internal_static_VideoDetails_descriptor =
            getDescriptor().getMessageTypes().get(67);
          internal_static_VideoDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_VideoDetails_descriptor,
              new java.lang.String[] { "Credit", "Duration", "ReleaseDate", "ContentRating", "Likes", "Dislikes", "Genre", "Trailer", "RentalTerm", });
          internal_static_VideoRentalTerm_descriptor =
            getDescriptor().getMessageTypes().get(68);
          internal_static_VideoRentalTerm_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_VideoRentalTerm_descriptor,
              new java.lang.String[] { "OfferType", "OfferAbbreviation", "RentalHeader", "Term", });
          internal_static_VideoRentalTerm_Term_descriptor =
            internal_static_VideoRentalTerm_descriptor.getNestedTypes().get(0);
          internal_static_VideoRentalTerm_Term_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_VideoRentalTerm_Term_descriptor,
              new java.lang.String[] { "Header", "Body", });
          internal_static_Bucket_descriptor =
            getDescriptor().getMessageTypes().get(69);
          internal_static_Bucket_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Bucket_descriptor,
              new java.lang.String[] { "Document", "MultiCorpus", "Title", "IconUrl", "FullContentsUrl", "Relevance", "EstimatedResults", "AnalyticsCookie", "FullContentsListUrl", "NextPageUrl", "Ordered", });
          internal_static_ListResponse_descriptor =
            getDescriptor().getMessageTypes().get(70);
          internal_static_ListResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_ListResponse_descriptor,
              new java.lang.String[] { "Bucket", "Doc", });
          internal_static_DocV1_descriptor =
            getDescriptor().getMessageTypes().get(71);
          internal_static_DocV1_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_DocV1_descriptor,
              new java.lang.String[] { "FinskyDoc", "Docid", "DetailsUrl", "ReviewsUrl", "RelatedListUrl", "MoreByListUrl", "ShareUrl", "Creator", "Details", "DescriptionHtml", "RelatedBrowseUrl", "MoreByBrowseUrl", "RelatedHeader", "MoreByHeader", "Title", "PlusOneData", "WarningMessage", });
          internal_static_DocV2_descriptor =
            getDescriptor().getMessageTypes().get(72);
          internal_static_DocV2_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_DocV2_descriptor,
              new java.lang.String[] { "Docid", "BackendDocid", "DocType", "BackendId", "Title", "Creator", "DescriptionHtml", "Offer", "Availability", "Image", "Child", "ContainerMetadata", "Details", "AggregateRating", "DetailsUrl", "ShareUrl", "ReviewsUrl", "BackendUrl", "PurchaseDetailsUrl", "DetailsReusable", "Subtitle", });
          internal_static_EncryptedSubscriberInfo_descriptor =
            getDescriptor().getMessageTypes().get(73);
          internal_static_EncryptedSubscriberInfo_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_EncryptedSubscriberInfo_descriptor,
              new java.lang.String[] { "Data", "EncryptedKey", "Signature", "InitVector", "GoogleKeyVersion", "CarrierKeyVersion", });
          internal_static_Availability_descriptor =
            getDescriptor().getMessageTypes().get(74);
          internal_static_Availability_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Availability_descriptor,
              new java.lang.String[] { "Restriction", "OfferType", "Rule", "PerDeviceAvailabilityRestriction", "AvailableIfOwned", "Install", "FilterInfo", "OwnershipInfo", });
          internal_static_Availability_PerDeviceAvailabilityRestriction_descriptor =
            internal_static_Availability_descriptor.getNestedTypes().get(0);
          internal_static_Availability_PerDeviceAvailabilityRestriction_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Availability_PerDeviceAvailabilityRestriction_descriptor,
              new java.lang.String[] { "AndroidId", "DeviceRestriction", "ChannelId", "FilterInfo", });
          internal_static_FilterEvaluationInfo_descriptor =
            getDescriptor().getMessageTypes().get(75);
          internal_static_FilterEvaluationInfo_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_FilterEvaluationInfo_descriptor,
              new java.lang.String[] { "RuleEvaluation", });
          internal_static_Rule_descriptor =
            getDescriptor().getMessageTypes().get(76);
          internal_static_Rule_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Rule_descriptor,
              new java.lang.String[] { "Negate", "Operator", "Key", "StringArg", "LongArg", "DoubleArg", "Subrule", "ResponseCode", "Comment", "StringArgHash", "ConstArg", });
          internal_static_RuleEvaluation_descriptor =
            getDescriptor().getMessageTypes().get(77);
          internal_static_RuleEvaluation_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_RuleEvaluation_descriptor,
              new java.lang.String[] { "Rule", "ActualStringValue", "ActualLongValue", "ActualBoolValue", "ActualDoubleValue", });
          internal_static_LibraryAppDetails_descriptor =
            getDescriptor().getMessageTypes().get(78);
          internal_static_LibraryAppDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_LibraryAppDetails_descriptor,
              new java.lang.String[] { "CertificateHash", "RefundTimeoutTimestampMsec", "PostDeliveryRefundWindowMsec", });
          internal_static_LibraryInAppDetails_descriptor =
            getDescriptor().getMessageTypes().get(79);
          internal_static_LibraryInAppDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_LibraryInAppDetails_descriptor,
              new java.lang.String[] { "SignedPurchaseData", "Signature", });
          internal_static_LibraryMutation_descriptor =
            getDescriptor().getMessageTypes().get(80);
          internal_static_LibraryMutation_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_LibraryMutation_descriptor,
              new java.lang.String[] { "Docid", "OfferType", "DocumentHash", "Deleted", "AppDetails", "SubscriptionDetails", "InAppDetails", });
          internal_static_LibrarySubscriptionDetails_descriptor =
            getDescriptor().getMessageTypes().get(81);
          internal_static_LibrarySubscriptionDetails_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_LibrarySubscriptionDetails_descriptor,
              new java.lang.String[] { "InitiationTimestampMsec", "ValidUntilTimestampMsec", "AutoRenewing", "TrialUntilTimestampMsec", });
          internal_static_LibraryUpdate_descriptor =
            getDescriptor().getMessageTypes().get(82);
          internal_static_LibraryUpdate_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_LibraryUpdate_descriptor,
              new java.lang.String[] { "Status", "Corpus", "ServerToken", "Mutation", "HasMore", "LibraryId", });
          internal_static_AndroidAppNotificationData_descriptor =
            getDescriptor().getMessageTypes().get(83);
          internal_static_AndroidAppNotificationData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AndroidAppNotificationData_descriptor,
              new java.lang.String[] { "VersionCode", "AssetId", });
          internal_static_InAppNotificationData_descriptor =
            getDescriptor().getMessageTypes().get(84);
          internal_static_InAppNotificationData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_InAppNotificationData_descriptor,
              new java.lang.String[] { "CheckoutOrderId", "InAppNotificationId", });
          internal_static_LibraryDirtyData_descriptor =
            getDescriptor().getMessageTypes().get(85);
          internal_static_LibraryDirtyData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_LibraryDirtyData_descriptor,
              new java.lang.String[] { "Backend", });
          internal_static_Notification_descriptor =
            getDescriptor().getMessageTypes().get(86);
          internal_static_Notification_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Notification_descriptor,
              new java.lang.String[] { "NotificationType", "Timestamp", "Docid", "DocTitle", "UserEmail", "AppData", "AppDeliveryData", "PurchaseRemovalData", "UserNotificationData", "InAppNotificationData", "PurchaseDeclinedData", "NotificationId", "LibraryUpdate", "LibraryDirtyData", });
          internal_static_PurchaseDeclinedData_descriptor =
            getDescriptor().getMessageTypes().get(87);
          internal_static_PurchaseDeclinedData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_PurchaseDeclinedData_descriptor,
              new java.lang.String[] { "Reason", "ShowNotification", });
          internal_static_PurchaseRemovalData_descriptor =
            getDescriptor().getMessageTypes().get(88);
          internal_static_PurchaseRemovalData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_PurchaseRemovalData_descriptor,
              new java.lang.String[] { "Malicious", });
          internal_static_UserNotificationData_descriptor =
            getDescriptor().getMessageTypes().get(89);
          internal_static_UserNotificationData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_UserNotificationData_descriptor,
              new java.lang.String[] { "NotificationTitle", "NotificationText", "TickerText", "DialogTitle", "DialogText", });
          internal_static_AggregateRating_descriptor =
            getDescriptor().getMessageTypes().get(90);
          internal_static_AggregateRating_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AggregateRating_descriptor,
              new java.lang.String[] { "Type", "StarRating", "RatingsCount", "OneStarRatings", "TwoStarRatings", "ThreeStarRatings", "FourStarRatings", "FiveStarRatings", "ThumbsUpCount", "ThumbsDownCount", "CommentCount", "BayesianMeanRating", });
          internal_static_Payload_descriptor =
            getDescriptor().getMessageTypes().get(91);
          internal_static_Payload_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Payload_descriptor,
              new java.lang.String[] { "ListResponse", "DetailsResponse", "ReviewResponse", "BuyResponse", "SearchResponse", "BrowseResponse", "PurchaseStatusResponse", "BulkDetailsResponse", "UploadDeviceConfigResponse", "AndroidCheckinResponse", "DeliveryResponse", });
          internal_static_PreFetch_descriptor =
            getDescriptor().getMessageTypes().get(92);
          internal_static_PreFetch_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_PreFetch_descriptor,
              new java.lang.String[] { "Url", "Response", "Etag", "Ttl", "SoftTtl", });
          internal_static_ResponseWrapper_descriptor =
            getDescriptor().getMessageTypes().get(93);
          internal_static_ResponseWrapper_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_ResponseWrapper_descriptor,
              new java.lang.String[] { "Payload", "Commands", "PreFetch", "Notification", });
          internal_static_ServerCommands_descriptor =
            getDescriptor().getMessageTypes().get(94);
          internal_static_ServerCommands_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_ServerCommands_descriptor,
              new java.lang.String[] { "ClearCache", "DisplayErrorMessage", "LogErrorStacktrace", });
          internal_static_GetReviewsResponse_descriptor =
            getDescriptor().getMessageTypes().get(95);
          internal_static_GetReviewsResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_GetReviewsResponse_descriptor,
              new java.lang.String[] { "Review", "MatchingCount", });
          internal_static_Review_descriptor =
            getDescriptor().getMessageTypes().get(96);
          internal_static_Review_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Review_descriptor,
              new java.lang.String[] { "AuthorName", "Url", "Source", "DocumentVersion", "TimestampMsec", "StarRating", "Title", "Comment", "CommentId", "DeviceName", "ReplyText", "ReplyTimestampMsec", "Author", });
          internal_static_Author_descriptor =
            getDescriptor().getMessageTypes().get(97);
          internal_static_Author_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Author_descriptor,
              new java.lang.String[] { "Name", "Urls", });
          internal_static_Avatar_descriptor =
            getDescriptor().getMessageTypes().get(98);
          internal_static_Avatar_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_Avatar_descriptor,
              new java.lang.String[] { "Unknown1", "Url", "SecureUrl", "Unknown2", });
          internal_static_ReviewResponse_descriptor =
            getDescriptor().getMessageTypes().get(99);
          internal_static_ReviewResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_ReviewResponse_descriptor,
              new java.lang.String[] { "GetResponse", "NextPageUrl", });
          internal_static_RelatedSearch_descriptor =
            getDescriptor().getMessageTypes().get(100);
          internal_static_RelatedSearch_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_RelatedSearch_descriptor,
              new java.lang.String[] { "SearchUrl", "Header", "BackendId", "DocType", "Current", });
          internal_static_SearchResponse_descriptor =
            getDescriptor().getMessageTypes().get(101);
          internal_static_SearchResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_SearchResponse_descriptor,
              new java.lang.String[] { "OriginalQuery", "SuggestedQuery", "AggregateQuery", "Bucket", "Doc", "RelatedSearch", });
          internal_static_UploadDeviceConfigRequest_descriptor =
            getDescriptor().getMessageTypes().get(102);
          internal_static_UploadDeviceConfigRequest_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_UploadDeviceConfigRequest_descriptor,
              new java.lang.String[] { "DeviceConfiguration", "Manufacturer", "GcmRegistrationId", });
          internal_static_UploadDeviceConfigResponse_descriptor =
            getDescriptor().getMessageTypes().get(103);
          internal_static_UploadDeviceConfigResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_UploadDeviceConfigResponse_descriptor,
              new java.lang.String[] { "UploadDeviceConfigToken", });
          internal_static_AndroidCheckinRequest_descriptor =
            getDescriptor().getMessageTypes().get(104);
          internal_static_AndroidCheckinRequest_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AndroidCheckinRequest_descriptor,
              new java.lang.String[] { "Imei", "Id", "Digest", "Checkin", "DesiredBuild", "Locale", "LoggingId", "MarketCheckin", "MacAddr", "Meid", "AccountCookie", "TimeZone", "SecurityToken", "Version", "OtaCert", "SerialNumber", "Esn", "DeviceConfiguration", "MacAddrType", "Fragment", "UserName", "UserSerialNumber", });
          internal_static_AndroidCheckinResponse_descriptor =
            getDescriptor().getMessageTypes().get(105);
          internal_static_AndroidCheckinResponse_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AndroidCheckinResponse_descriptor,
              new java.lang.String[] { "StatsOk", "Intent", "TimeMsec", "Digest", "Setting", "MarketOk", "AndroidId", "SecurityToken", "SettingsDiff", "DeleteSetting", });
          internal_static_GservicesSetting_descriptor =
            getDescriptor().getMessageTypes().get(106);
          internal_static_GservicesSetting_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_GservicesSetting_descriptor,
              new java.lang.String[] { "Name", "Value", });
          internal_static_AndroidBuildProto_descriptor =
            getDescriptor().getMessageTypes().get(107);
          internal_static_AndroidBuildProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AndroidBuildProto_descriptor,
              new java.lang.String[] { "Id", "Product", "Carrier", "Radio", "Bootloader", "Client", "Timestamp", "GoogleServices", "Device", "SdkVersion", "Model", "Manufacturer", "BuildProduct", "OtaInstalled", });
          internal_static_AndroidCheckinProto_descriptor =
            getDescriptor().getMessageTypes().get(108);
          internal_static_AndroidCheckinProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AndroidCheckinProto_descriptor,
              new java.lang.String[] { "Build", "LastCheckinMsec", "Event", "Stat", "RequestedGroup", "CellOperator", "SimOperator", "Roaming", "UserNumber", });
          internal_static_AndroidEventProto_descriptor =
            getDescriptor().getMessageTypes().get(109);
          internal_static_AndroidEventProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AndroidEventProto_descriptor,
              new java.lang.String[] { "Tag", "Value", "TimeMsec", });
          internal_static_AndroidIntentProto_descriptor =
            getDescriptor().getMessageTypes().get(110);
          internal_static_AndroidIntentProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AndroidIntentProto_descriptor,
              new java.lang.String[] { "Action", "DataUri", "MimeType", "JavaClass", "Extra", });
          internal_static_AndroidIntentProto_Extra_descriptor =
            internal_static_AndroidIntentProto_descriptor.getNestedTypes().get(0);
          internal_static_AndroidIntentProto_Extra_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AndroidIntentProto_Extra_descriptor,
              new java.lang.String[] { "Name", "Value", });
          internal_static_AndroidStatisticProto_descriptor =
            getDescriptor().getMessageTypes().get(111);
          internal_static_AndroidStatisticProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AndroidStatisticProto_descriptor,
              new java.lang.String[] { "Tag", "Count", "Sum", });
          internal_static_ClientLibraryState_descriptor =
            getDescriptor().getMessageTypes().get(112);
          internal_static_ClientLibraryState_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_ClientLibraryState_descriptor,
              new java.lang.String[] { "Corpus", "ServerToken", "HashCodeSum", "LibrarySize", "LibraryId", });
          internal_static_AndroidDataUsageProto_descriptor =
            getDescriptor().getMessageTypes().get(113);
          internal_static_AndroidDataUsageProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AndroidDataUsageProto_descriptor,
              new java.lang.String[] { "Version", "CurrentReportMsec", "KeyToPackageNameMapping", "PayloadLevelAppStat", "IpLayerNetworkStat", });
          internal_static_AndroidUsageStatsReport_descriptor =
            getDescriptor().getMessageTypes().get(114);
          internal_static_AndroidUsageStatsReport_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AndroidUsageStatsReport_descriptor,
              new java.lang.String[] { "AndroidId", "LoggingId", "UsageStats", });
          internal_static_AppBucket_descriptor =
            getDescriptor().getMessageTypes().get(115);
          internal_static_AppBucket_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_AppBucket_descriptor,
              new java.lang.String[] { "BucketStartMsec", "BucketDurationMsec", "StatCounters", "OperationCount", });
          internal_static_CounterData_descriptor =
            getDescriptor().getMessageTypes().get(116);
          internal_static_CounterData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_CounterData_descriptor,
              new java.lang.String[] { "Bytes", "Packets", });
          internal_static_IpLayerAppStat_descriptor =
            getDescriptor().getMessageTypes().get(117);
          internal_static_IpLayerAppStat_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_IpLayerAppStat_descriptor,
              new java.lang.String[] { "PackageKey", "ApplicationTag", "IpLayerAppBucket", });
          internal_static_IpLayerNetworkBucket_descriptor =
            getDescriptor().getMessageTypes().get(118);
          internal_static_IpLayerNetworkBucket_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_IpLayerNetworkBucket_descriptor,
              new java.lang.String[] { "BucketStartMsec", "BucketDurationMsec", "StatCounters", "NetworkActiveDuration", });
          internal_static_IpLayerNetworkStat_descriptor =
            getDescriptor().getMessageTypes().get(119);
          internal_static_IpLayerNetworkStat_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_IpLayerNetworkStat_descriptor,
              new java.lang.String[] { "NetworkDetails", "Type", "IpLayerNetworkBucket", "IpLayerAppStat", });
          internal_static_KeyToPackageNameMapping_descriptor =
            getDescriptor().getMessageTypes().get(120);
          internal_static_KeyToPackageNameMapping_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_KeyToPackageNameMapping_descriptor,
              new java.lang.String[] { "PackageKey", "UidName", "SharedPackageList", });
          internal_static_PackageInfo_descriptor =
            getDescriptor().getMessageTypes().get(121);
          internal_static_PackageInfo_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_PackageInfo_descriptor,
              new java.lang.String[] { "PkgName", "VersionCode", });
          internal_static_PayloadLevelAppStat_descriptor =
            getDescriptor().getMessageTypes().get(122);
          internal_static_PayloadLevelAppStat_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_PayloadLevelAppStat_descriptor,
              new java.lang.String[] { "PackageKey", "ApplicationTag", "PayloadLevelAppBucket", });
          internal_static_StatCounters_descriptor =
            getDescriptor().getMessageTypes().get(123);
          internal_static_StatCounters_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_StatCounters_descriptor,
              new java.lang.String[] { "NetworkProto", "Direction", "CounterData", "FgBg", });
          internal_static_UsageStatsExtensionProto_descriptor =
            getDescriptor().getMessageTypes().get(124);
          internal_static_UsageStatsExtensionProto_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_UsageStatsExtensionProto_descriptor,
              new java.lang.String[] { "DataUsage", });
          return null;
        }
      };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          com.akdeniz.googleplaycrawler.gsf.GoogleServicesFramework.getDescriptor(),
        }, assigner);
  }

  // @@protoc_insertion_point(outer_class_scope)
}
