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

package net.osmand.binary;

public final class OsmandOdb {
  private OsmandOdb() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
  }
  public static final class OsmAndStructure extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndStructure.newBuilder() to construct.
    private OsmAndStructure() {
      initFields();
    }
    private OsmAndStructure(boolean noInit) {}
    
    private static final OsmAndStructure defaultInstance;
    public static OsmAndStructure getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndStructure getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndStructure_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndStructure_fieldAccessorTable;
    }
    
    // required uint32 version = 1;
    public static final int VERSION_FIELD_NUMBER = 1;
    private boolean hasVersion;
    private int version_ = 0;
    public boolean hasVersion() { return hasVersion; }
    public int getVersion() { return version_; }
    
    // repeated .OsmAndMapIndex mapIndex = 2;
    public static final int MAPINDEX_FIELD_NUMBER = 2;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex> mapIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex> getMapIndexList() {
      return mapIndex_;
    }
    public int getMapIndexCount() { return mapIndex_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndMapIndex getMapIndex(int index) {
      return mapIndex_.get(index);
    }
    
    // repeated .OsmAndAddressIndex addressIndex = 3;
    public static final int ADDRESSINDEX_FIELD_NUMBER = 3;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndAddressIndex> addressIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndAddressIndex> getAddressIndexList() {
      return addressIndex_;
    }
    public int getAddressIndexCount() { return addressIndex_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndAddressIndex getAddressIndex(int index) {
      return addressIndex_.get(index);
    }
    
    // repeated .OsmAndTransportIndex transportIndex = 4;
    public static final int TRANSPORTINDEX_FIELD_NUMBER = 4;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndTransportIndex> transportIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndTransportIndex> getTransportIndexList() {
      return transportIndex_;
    }
    public int getTransportIndexCount() { return transportIndex_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndTransportIndex getTransportIndex(int index) {
      return transportIndex_.get(index);
    }
    
    // repeated .OsmAndPoiIndex poiIndex = 5;
    public static final int POIINDEX_FIELD_NUMBER = 5;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiIndex> poiIndex_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiIndex> getPoiIndexList() {
      return poiIndex_;
    }
    public int getPoiIndexCount() { return poiIndex_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndPoiIndex getPoiIndex(int index) {
      return poiIndex_.get(index);
    }
    
    // required uint32 versionConfirm = 32;
    public static final int VERSIONCONFIRM_FIELD_NUMBER = 32;
    private boolean hasVersionConfirm;
    private int versionConfirm_ = 0;
    public boolean hasVersionConfirm() { return hasVersionConfirm; }
    public int getVersionConfirm() { return versionConfirm_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasVersion) return false;
      if (!hasVersionConfirm) return false;
      for (net.osmand.binary.OsmandOdb.OsmAndMapIndex element : getMapIndexList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex element : getAddressIndexList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndTransportIndex element : getTransportIndexList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiIndex element : getPoiIndexList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasVersion()) {
        output.writeUInt32(1, getVersion());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndMapIndex element : getMapIndexList()) {
        output.writeMessage(2, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex element : getAddressIndexList()) {
        output.writeMessage(3, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndTransportIndex element : getTransportIndexList()) {
        output.writeMessage(4, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiIndex element : getPoiIndexList()) {
        output.writeMessage(5, element);
      }
      if (hasVersionConfirm()) {
        output.writeUInt32(32, getVersionConfirm());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasVersion()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, getVersion());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndMapIndex element : getMapIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndAddressIndex element : getAddressIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndTransportIndex element : getTransportIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiIndex element : getPoiIndexList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      if (hasVersionConfirm()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(32, getVersionConfirm());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndStructure parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndStructure prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndStructure result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndStructure.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndStructure();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndStructure internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndStructure();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndStructure.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndStructure getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndStructure.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndStructure build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndStructure buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndStructure buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.mapIndex_ != java.util.Collections.EMPTY_LIST) {
          result.mapIndex_ =
            java.util.Collections.unmodifiableList(result.mapIndex_);
        }
        if (result.addressIndex_ != java.util.Collections.EMPTY_LIST) {
          result.addressIndex_ =
            java.util.Collections.unmodifiableList(result.addressIndex_);
        }
        if (result.transportIndex_ != java.util.Collections.EMPTY_LIST) {
          result.transportIndex_ =
            java.util.Collections.unmodifiableList(result.transportIndex_);
        }
        if (result.poiIndex_ != java.util.Collections.EMPTY_LIST) {
          result.poiIndex_ =
            java.util.Collections.unmodifiableList(result.poiIndex_);
        }
        net.osmand.binary.OsmandOdb.OsmAndStructure returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndStructure) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndStructure)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndStructure other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndStructure.getDefaultInstance()) return this;
        if (other.hasVersion()) {
          setVersion(other.getVersion());
        }
        if (!other.mapIndex_.isEmpty()) {
          if (result.mapIndex_.isEmpty()) {
            result.mapIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex>();
          }
          result.mapIndex_.addAll(other.mapIndex_);
        }
        if (!other.addressIndex_.isEmpty()) {
          if (result.addressIndex_.isEmpty()) {
            result.addressIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressIndex>();
          }
          result.addressIndex_.addAll(other.addressIndex_);
        }
        if (!other.transportIndex_.isEmpty()) {
          if (result.transportIndex_.isEmpty()) {
            result.transportIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndTransportIndex>();
          }
          result.transportIndex_.addAll(other.transportIndex_);
        }
        if (!other.poiIndex_.isEmpty()) {
          if (result.poiIndex_.isEmpty()) {
            result.poiIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiIndex>();
          }
          result.poiIndex_.addAll(other.poiIndex_);
        }
        if (other.hasVersionConfirm()) {
          setVersionConfirm(other.getVersionConfirm());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setVersion(input.readUInt32());
              break;
            }
            case 18: {
              net.osmand.binary.OsmandOdb.OsmAndMapIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndMapIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addMapIndex(subBuilder.buildPartial());
              break;
            }
            case 26: {
              net.osmand.binary.OsmandOdb.OsmAndAddressIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndAddressIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addAddressIndex(subBuilder.buildPartial());
              break;
            }
            case 34: {
              net.osmand.binary.OsmandOdb.OsmAndTransportIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndTransportIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addTransportIndex(subBuilder.buildPartial());
              break;
            }
            case 42: {
              net.osmand.binary.OsmandOdb.OsmAndPoiIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addPoiIndex(subBuilder.buildPartial());
              break;
            }
            case 256: {
              setVersionConfirm(input.readUInt32());
              break;
            }
          }
        }
      }
      
      
      // required uint32 version = 1;
      public boolean hasVersion() {
        return result.hasVersion();
      }
      public int getVersion() {
        return result.getVersion();
      }
      public Builder setVersion(int value) {
        result.hasVersion = true;
        result.version_ = value;
        return this;
      }
      public Builder clearVersion() {
        result.hasVersion = false;
        result.version_ = 0;
        return this;
      }
      
      // repeated .OsmAndMapIndex mapIndex = 2;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndMapIndex> getMapIndexList() {
        return java.util.Collections.unmodifiableList(result.mapIndex_);
      }
      public int getMapIndexCount() {
        return result.getMapIndexCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndMapIndex getMapIndex(int index) {
        return result.getMapIndex(index);
      }
      public Builder setMapIndex(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.mapIndex_.set(index, value);
        return this;
      }
      public Builder setMapIndex(int index, net.osmand.binary.OsmandOdb.OsmAndMapIndex.Builder builderForValue) {
        result.mapIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addMapIndex(net.osmand.binary.OsmandOdb.OsmAndMapIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.mapIndex_.isEmpty()) {
          result.mapIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex>();
        }
        result.mapIndex_.add(value);
        return this;
      }
      public Builder addMapIndex(net.osmand.binary.OsmandOdb.OsmAndMapIndex.Builder builderForValue) {
        if (result.mapIndex_.isEmpty()) {
          result.mapIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex>();
        }
        result.mapIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllMapIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndMapIndex> values) {
        if (result.mapIndex_.isEmpty()) {
          result.mapIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndMapIndex>();
        }
        super.addAll(values, result.mapIndex_);
        return this;
      }
      public Builder clearMapIndex() {
        result.mapIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .OsmAndAddressIndex addressIndex = 3;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndAddressIndex> getAddressIndexList() {
        return java.util.Collections.unmodifiableList(result.addressIndex_);
      }
      public int getAddressIndexCount() {
        return result.getAddressIndexCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndAddressIndex getAddressIndex(int index) {
        return result.getAddressIndex(index);
      }
      public Builder setAddressIndex(int index, net.osmand.binary.OsmandOdb.OsmAndAddressIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.addressIndex_.set(index, value);
        return this;
      }
      public Builder setAddressIndex(int index, net.osmand.binary.OsmandOdb.OsmAndAddressIndex.Builder builderForValue) {
        result.addressIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addAddressIndex(net.osmand.binary.OsmandOdb.OsmAndAddressIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.addressIndex_.isEmpty()) {
          result.addressIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressIndex>();
        }
        result.addressIndex_.add(value);
        return this;
      }
      public Builder addAddressIndex(net.osmand.binary.OsmandOdb.OsmAndAddressIndex.Builder builderForValue) {
        if (result.addressIndex_.isEmpty()) {
          result.addressIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressIndex>();
        }
        result.addressIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllAddressIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndAddressIndex> values) {
        if (result.addressIndex_.isEmpty()) {
          result.addressIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndAddressIndex>();
        }
        super.addAll(values, result.addressIndex_);
        return this;
      }
      public Builder clearAddressIndex() {
        result.addressIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .OsmAndTransportIndex transportIndex = 4;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndTransportIndex> getTransportIndexList() {
        return java.util.Collections.unmodifiableList(result.transportIndex_);
      }
      public int getTransportIndexCount() {
        return result.getTransportIndexCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndTransportIndex getTransportIndex(int index) {
        return result.getTransportIndex(index);
      }
      public Builder setTransportIndex(int index, net.osmand.binary.OsmandOdb.OsmAndTransportIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.transportIndex_.set(index, value);
        return this;
      }
      public Builder setTransportIndex(int index, net.osmand.binary.OsmandOdb.OsmAndTransportIndex.Builder builderForValue) {
        result.transportIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addTransportIndex(net.osmand.binary.OsmandOdb.OsmAndTransportIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.transportIndex_.isEmpty()) {
          result.transportIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndTransportIndex>();
        }
        result.transportIndex_.add(value);
        return this;
      }
      public Builder addTransportIndex(net.osmand.binary.OsmandOdb.OsmAndTransportIndex.Builder builderForValue) {
        if (result.transportIndex_.isEmpty()) {
          result.transportIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndTransportIndex>();
        }
        result.transportIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllTransportIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndTransportIndex> values) {
        if (result.transportIndex_.isEmpty()) {
          result.transportIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndTransportIndex>();
        }
        super.addAll(values, result.transportIndex_);
        return this;
      }
      public Builder clearTransportIndex() {
        result.transportIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .OsmAndPoiIndex poiIndex = 5;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiIndex> getPoiIndexList() {
        return java.util.Collections.unmodifiableList(result.poiIndex_);
      }
      public int getPoiIndexCount() {
        return result.getPoiIndexCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiIndex getPoiIndex(int index) {
        return result.getPoiIndex(index);
      }
      public Builder setPoiIndex(int index, net.osmand.binary.OsmandOdb.OsmAndPoiIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.poiIndex_.set(index, value);
        return this;
      }
      public Builder setPoiIndex(int index, net.osmand.binary.OsmandOdb.OsmAndPoiIndex.Builder builderForValue) {
        result.poiIndex_.set(index, builderForValue.build());
        return this;
      }
      public Builder addPoiIndex(net.osmand.binary.OsmandOdb.OsmAndPoiIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.poiIndex_.isEmpty()) {
          result.poiIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiIndex>();
        }
        result.poiIndex_.add(value);
        return this;
      }
      public Builder addPoiIndex(net.osmand.binary.OsmandOdb.OsmAndPoiIndex.Builder builderForValue) {
        if (result.poiIndex_.isEmpty()) {
          result.poiIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiIndex>();
        }
        result.poiIndex_.add(builderForValue.build());
        return this;
      }
      public Builder addAllPoiIndex(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndPoiIndex> values) {
        if (result.poiIndex_.isEmpty()) {
          result.poiIndex_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiIndex>();
        }
        super.addAll(values, result.poiIndex_);
        return this;
      }
      public Builder clearPoiIndex() {
        result.poiIndex_ = java.util.Collections.emptyList();
        return this;
      }
      
      // required uint32 versionConfirm = 32;
      public boolean hasVersionConfirm() {
        return result.hasVersionConfirm();
      }
      public int getVersionConfirm() {
        return result.getVersionConfirm();
      }
      public Builder setVersionConfirm(int value) {
        result.hasVersionConfirm = true;
        result.versionConfirm_ = value;
        return this;
      }
      public Builder clearVersionConfirm() {
        result.hasVersionConfirm = false;
        result.versionConfirm_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndStructure)
    }
    
    static {
      defaultInstance = new OsmAndStructure(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndStructure)
  }
  
  public static final class StringTable extends
      com.google.protobuf.GeneratedMessage {
    // Use StringTable.newBuilder() to construct.
    private StringTable() {
      initFields();
    }
    private StringTable(boolean noInit) {}
    
    private static final StringTable defaultInstance;
    public static StringTable getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public StringTable getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_StringTable_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_StringTable_fieldAccessorTable;
    }
    
    // repeated string s = 1;
    public static final int S_FIELD_NUMBER = 1;
    private java.util.List<java.lang.String> s_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.String> getSList() {
      return s_;
    }
    public int getSCount() { return s_.size(); }
    public java.lang.String getS(int index) {
      return s_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (java.lang.String element : getSList()) {
        output.writeString(1, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      {
        int dataSize = 0;
        for (java.lang.String element : getSList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeStringSizeNoTag(element);
        }
        size += dataSize;
        size += 1 * getSList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StringTable parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.StringTable prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.StringTable result;
      
      // Construct using net.osmand.binary.OsmandOdb.StringTable.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.StringTable();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.StringTable internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.StringTable();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.StringTable.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.StringTable getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.StringTable build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.StringTable buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.StringTable buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.s_ != java.util.Collections.EMPTY_LIST) {
          result.s_ =
            java.util.Collections.unmodifiableList(result.s_);
        }
        net.osmand.binary.OsmandOdb.StringTable returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.StringTable) {
          return mergeFrom((net.osmand.binary.OsmandOdb.StringTable)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.StringTable other) {
        if (other == net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance()) return this;
        if (!other.s_.isEmpty()) {
          if (result.s_.isEmpty()) {
            result.s_ = new java.util.ArrayList<java.lang.String>();
          }
          result.s_.addAll(other.s_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              addS(input.readString());
              break;
            }
          }
        }
      }
      
      
      // repeated string s = 1;
      public java.util.List<java.lang.String> getSList() {
        return java.util.Collections.unmodifiableList(result.s_);
      }
      public int getSCount() {
        return result.getSCount();
      }
      public java.lang.String getS(int index) {
        return result.getS(index);
      }
      public Builder setS(int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.s_.set(index, value);
        return this;
      }
      public Builder addS(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  if (result.s_.isEmpty()) {
          result.s_ = new java.util.ArrayList<java.lang.String>();
        }
        result.s_.add(value);
        return this;
      }
      public Builder addAllS(
          java.lang.Iterable<? extends java.lang.String> values) {
        if (result.s_.isEmpty()) {
          result.s_ = new java.util.ArrayList<java.lang.String>();
        }
        super.addAll(values, result.s_);
        return this;
      }
      public Builder clearS() {
        result.s_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:StringTable)
    }
    
    static {
      defaultInstance = new StringTable(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:StringTable)
  }
  
  public static final class IndexedStringTable extends
      com.google.protobuf.GeneratedMessage {
    // Use IndexedStringTable.newBuilder() to construct.
    private IndexedStringTable() {
      initFields();
    }
    private IndexedStringTable(boolean noInit) {}
    
    private static final IndexedStringTable defaultInstance;
    public static IndexedStringTable getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public IndexedStringTable getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_IndexedStringTable_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_IndexedStringTable_fieldAccessorTable;
    }
    
    // optional string prefix = 1;
    public static final int PREFIX_FIELD_NUMBER = 1;
    private boolean hasPrefix;
    private java.lang.String prefix_ = "";
    public boolean hasPrefix() { return hasPrefix; }
    public java.lang.String getPrefix() { return prefix_; }
    
    // repeated string key = 3;
    public static final int KEY_FIELD_NUMBER = 3;
    private java.util.List<java.lang.String> key_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.String> getKeyList() {
      return key_;
    }
    public int getKeyCount() { return key_.size(); }
    public java.lang.String getKey(int index) {
      return key_.get(index);
    }
    
    // repeated uint32 val = 4;
    public static final int VAL_FIELD_NUMBER = 4;
    private java.util.List<java.lang.Integer> val_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getValList() {
      return val_;
    }
    public int getValCount() { return val_.size(); }
    public int getVal(int index) {
      return val_.get(index);
    }
    
    // repeated .IndexedStringTable subtables = 5;
    public static final int SUBTABLES_FIELD_NUMBER = 5;
    private java.util.List<net.osmand.binary.OsmandOdb.IndexedStringTable> subtables_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.IndexedStringTable> getSubtablesList() {
      return subtables_;
    }
    public int getSubtablesCount() { return subtables_.size(); }
    public net.osmand.binary.OsmandOdb.IndexedStringTable getSubtables(int index) {
      return subtables_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasPrefix()) {
        output.writeString(1, getPrefix());
      }
      for (java.lang.String element : getKeyList()) {
        output.writeString(3, element);
      }
      for (int element : getValList()) {
        output.writeUInt32(4, element);
      }
      for (net.osmand.binary.OsmandOdb.IndexedStringTable element : getSubtablesList()) {
        output.writeMessage(5, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasPrefix()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getPrefix());
      }
      {
        int dataSize = 0;
        for (java.lang.String element : getKeyList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeStringSizeNoTag(element);
        }
        size += dataSize;
        size += 1 * getKeyList().size();
      }
      {
        int dataSize = 0;
        for (int element : getValList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(element);
        }
        size += dataSize;
        size += 1 * getValList().size();
      }
      for (net.osmand.binary.OsmandOdb.IndexedStringTable element : getSubtablesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.IndexedStringTable parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.IndexedStringTable prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.IndexedStringTable result;
      
      // Construct using net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.IndexedStringTable();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.IndexedStringTable internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.IndexedStringTable();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.IndexedStringTable.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.IndexedStringTable getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.IndexedStringTable build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.IndexedStringTable buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.IndexedStringTable buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.key_ != java.util.Collections.EMPTY_LIST) {
          result.key_ =
            java.util.Collections.unmodifiableList(result.key_);
        }
        if (result.val_ != java.util.Collections.EMPTY_LIST) {
          result.val_ =
            java.util.Collections.unmodifiableList(result.val_);
        }
        if (result.subtables_ != java.util.Collections.EMPTY_LIST) {
          result.subtables_ =
            java.util.Collections.unmodifiableList(result.subtables_);
        }
        net.osmand.binary.OsmandOdb.IndexedStringTable returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.IndexedStringTable) {
          return mergeFrom((net.osmand.binary.OsmandOdb.IndexedStringTable)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.IndexedStringTable other) {
        if (other == net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance()) return this;
        if (other.hasPrefix()) {
          setPrefix(other.getPrefix());
        }
        if (!other.key_.isEmpty()) {
          if (result.key_.isEmpty()) {
            result.key_ = new java.util.ArrayList<java.lang.String>();
          }
          result.key_.addAll(other.key_);
        }
        if (!other.val_.isEmpty()) {
          if (result.val_.isEmpty()) {
            result.val_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.val_.addAll(other.val_);
        }
        if (!other.subtables_.isEmpty()) {
          if (result.subtables_.isEmpty()) {
            result.subtables_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.IndexedStringTable>();
          }
          result.subtables_.addAll(other.subtables_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setPrefix(input.readString());
              break;
            }
            case 26: {
              addKey(input.readString());
              break;
            }
            case 32: {
              addVal(input.readUInt32());
              break;
            }
            case 34: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addVal(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 42: {
              net.osmand.binary.OsmandOdb.IndexedStringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addSubtables(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // optional string prefix = 1;
      public boolean hasPrefix() {
        return result.hasPrefix();
      }
      public java.lang.String getPrefix() {
        return result.getPrefix();
      }
      public Builder setPrefix(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasPrefix = true;
        result.prefix_ = value;
        return this;
      }
      public Builder clearPrefix() {
        result.hasPrefix = false;
        result.prefix_ = getDefaultInstance().getPrefix();
        return this;
      }
      
      // repeated string key = 3;
      public java.util.List<java.lang.String> getKeyList() {
        return java.util.Collections.unmodifiableList(result.key_);
      }
      public int getKeyCount() {
        return result.getKeyCount();
      }
      public java.lang.String getKey(int index) {
        return result.getKey(index);
      }
      public Builder setKey(int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.key_.set(index, value);
        return this;
      }
      public Builder addKey(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  if (result.key_.isEmpty()) {
          result.key_ = new java.util.ArrayList<java.lang.String>();
        }
        result.key_.add(value);
        return this;
      }
      public Builder addAllKey(
          java.lang.Iterable<? extends java.lang.String> values) {
        if (result.key_.isEmpty()) {
          result.key_ = new java.util.ArrayList<java.lang.String>();
        }
        super.addAll(values, result.key_);
        return this;
      }
      public Builder clearKey() {
        result.key_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated uint32 val = 4;
      public java.util.List<java.lang.Integer> getValList() {
        return java.util.Collections.unmodifiableList(result.val_);
      }
      public int getValCount() {
        return result.getValCount();
      }
      public int getVal(int index) {
        return result.getVal(index);
      }
      public Builder setVal(int index, int value) {
        result.val_.set(index, value);
        return this;
      }
      public Builder addVal(int value) {
        if (result.val_.isEmpty()) {
          result.val_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.val_.add(value);
        return this;
      }
      public Builder addAllVal(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.val_.isEmpty()) {
          result.val_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.val_);
        return this;
      }
      public Builder clearVal() {
        result.val_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .IndexedStringTable subtables = 5;
      public java.util.List<net.osmand.binary.OsmandOdb.IndexedStringTable> getSubtablesList() {
        return java.util.Collections.unmodifiableList(result.subtables_);
      }
      public int getSubtablesCount() {
        return result.getSubtablesCount();
      }
      public net.osmand.binary.OsmandOdb.IndexedStringTable getSubtables(int index) {
        return result.getSubtables(index);
      }
      public Builder setSubtables(int index, net.osmand.binary.OsmandOdb.IndexedStringTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.subtables_.set(index, value);
        return this;
      }
      public Builder setSubtables(int index, net.osmand.binary.OsmandOdb.IndexedStringTable.Builder builderForValue) {
        result.subtables_.set(index, builderForValue.build());
        return this;
      }
      public Builder addSubtables(net.osmand.binary.OsmandOdb.IndexedStringTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.subtables_.isEmpty()) {
          result.subtables_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.IndexedStringTable>();
        }
        result.subtables_.add(value);
        return this;
      }
      public Builder addSubtables(net.osmand.binary.OsmandOdb.IndexedStringTable.Builder builderForValue) {
        if (result.subtables_.isEmpty()) {
          result.subtables_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.IndexedStringTable>();
        }
        result.subtables_.add(builderForValue.build());
        return this;
      }
      public Builder addAllSubtables(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.IndexedStringTable> values) {
        if (result.subtables_.isEmpty()) {
          result.subtables_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.IndexedStringTable>();
        }
        super.addAll(values, result.subtables_);
        return this;
      }
      public Builder clearSubtables() {
        result.subtables_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:IndexedStringTable)
    }
    
    static {
      defaultInstance = new IndexedStringTable(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:IndexedStringTable)
  }
  
  public static final class OsmAndMapIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndMapIndex.newBuilder() to construct.
    private OsmAndMapIndex() {
      initFields();
    }
    private OsmAndMapIndex(boolean noInit) {}
    
    private static final OsmAndMapIndex defaultInstance;
    public static OsmAndMapIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndMapIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndMapIndex_fieldAccessorTable;
    }
    
    // repeated .MapRootLevel levels = 1;
    public static final int LEVELS_FIELD_NUMBER = 1;
    private java.util.List<net.osmand.binary.OsmandOdb.MapRootLevel> levels_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.MapRootLevel> getLevelsList() {
      return levels_;
    }
    public int getLevelsCount() { return levels_.size(); }
    public net.osmand.binary.OsmandOdb.MapRootLevel getLevels(int index) {
      return levels_.get(index);
    }
    
    // optional string name = 3;
    public static final int NAME_FIELD_NUMBER = 3;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // repeated .MapEncodingRule rules = 8;
    public static final int RULES_FIELD_NUMBER = 8;
    private java.util.List<net.osmand.binary.OsmandOdb.MapEncodingRule> rules_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.MapEncodingRule> getRulesList() {
      return rules_;
    }
    public int getRulesCount() { return rules_.size(); }
    public net.osmand.binary.OsmandOdb.MapEncodingRule getRules(int index) {
      return rules_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      for (net.osmand.binary.OsmandOdb.MapRootLevel element : getLevelsList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.MapEncodingRule element : getRulesList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (net.osmand.binary.OsmandOdb.MapRootLevel element : getLevelsList()) {
        output.writeMessage(1, element);
      }
      if (hasName()) {
        output.writeString(3, getName());
      }
      for (net.osmand.binary.OsmandOdb.MapEncodingRule element : getRulesList()) {
        output.writeMessage(8, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      for (net.osmand.binary.OsmandOdb.MapRootLevel element : getLevelsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, element);
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(3, getName());
      }
      for (net.osmand.binary.OsmandOdb.MapEncodingRule element : getRulesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndMapIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndMapIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndMapIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndMapIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndMapIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndMapIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndMapIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndMapIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndMapIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndMapIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndMapIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndMapIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.levels_ != java.util.Collections.EMPTY_LIST) {
          result.levels_ =
            java.util.Collections.unmodifiableList(result.levels_);
        }
        if (result.rules_ != java.util.Collections.EMPTY_LIST) {
          result.rules_ =
            java.util.Collections.unmodifiableList(result.rules_);
        }
        net.osmand.binary.OsmandOdb.OsmAndMapIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndMapIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndMapIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndMapIndex other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndMapIndex.getDefaultInstance()) return this;
        if (!other.levels_.isEmpty()) {
          if (result.levels_.isEmpty()) {
            result.levels_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapRootLevel>();
          }
          result.levels_.addAll(other.levels_);
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (!other.rules_.isEmpty()) {
          if (result.rules_.isEmpty()) {
            result.rules_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapEncodingRule>();
          }
          result.rules_.addAll(other.rules_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              net.osmand.binary.OsmandOdb.MapRootLevel.Builder subBuilder = net.osmand.binary.OsmandOdb.MapRootLevel.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addLevels(subBuilder.buildPartial());
              break;
            }
            case 26: {
              setName(input.readString());
              break;
            }
            case 66: {
              net.osmand.binary.OsmandOdb.MapEncodingRule.Builder subBuilder = net.osmand.binary.OsmandOdb.MapEncodingRule.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addRules(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // repeated .MapRootLevel levels = 1;
      public java.util.List<net.osmand.binary.OsmandOdb.MapRootLevel> getLevelsList() {
        return java.util.Collections.unmodifiableList(result.levels_);
      }
      public int getLevelsCount() {
        return result.getLevelsCount();
      }
      public net.osmand.binary.OsmandOdb.MapRootLevel getLevels(int index) {
        return result.getLevels(index);
      }
      public Builder setLevels(int index, net.osmand.binary.OsmandOdb.MapRootLevel value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.levels_.set(index, value);
        return this;
      }
      public Builder setLevels(int index, net.osmand.binary.OsmandOdb.MapRootLevel.Builder builderForValue) {
        result.levels_.set(index, builderForValue.build());
        return this;
      }
      public Builder addLevels(net.osmand.binary.OsmandOdb.MapRootLevel value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.levels_.isEmpty()) {
          result.levels_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapRootLevel>();
        }
        result.levels_.add(value);
        return this;
      }
      public Builder addLevels(net.osmand.binary.OsmandOdb.MapRootLevel.Builder builderForValue) {
        if (result.levels_.isEmpty()) {
          result.levels_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapRootLevel>();
        }
        result.levels_.add(builderForValue.build());
        return this;
      }
      public Builder addAllLevels(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.MapRootLevel> values) {
        if (result.levels_.isEmpty()) {
          result.levels_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapRootLevel>();
        }
        super.addAll(values, result.levels_);
        return this;
      }
      public Builder clearLevels() {
        result.levels_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional string name = 3;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // repeated .MapEncodingRule rules = 8;
      public java.util.List<net.osmand.binary.OsmandOdb.MapEncodingRule> getRulesList() {
        return java.util.Collections.unmodifiableList(result.rules_);
      }
      public int getRulesCount() {
        return result.getRulesCount();
      }
      public net.osmand.binary.OsmandOdb.MapEncodingRule getRules(int index) {
        return result.getRules(index);
      }
      public Builder setRules(int index, net.osmand.binary.OsmandOdb.MapEncodingRule value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.rules_.set(index, value);
        return this;
      }
      public Builder setRules(int index, net.osmand.binary.OsmandOdb.MapEncodingRule.Builder builderForValue) {
        result.rules_.set(index, builderForValue.build());
        return this;
      }
      public Builder addRules(net.osmand.binary.OsmandOdb.MapEncodingRule value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.rules_.isEmpty()) {
          result.rules_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapEncodingRule>();
        }
        result.rules_.add(value);
        return this;
      }
      public Builder addRules(net.osmand.binary.OsmandOdb.MapEncodingRule.Builder builderForValue) {
        if (result.rules_.isEmpty()) {
          result.rules_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapEncodingRule>();
        }
        result.rules_.add(builderForValue.build());
        return this;
      }
      public Builder addAllRules(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.MapEncodingRule> values) {
        if (result.rules_.isEmpty()) {
          result.rules_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapEncodingRule>();
        }
        super.addAll(values, result.rules_);
        return this;
      }
      public Builder clearRules() {
        result.rules_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndMapIndex)
    }
    
    static {
      defaultInstance = new OsmAndMapIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndMapIndex)
  }
  
  public static final class MapEncodingRule extends
      com.google.protobuf.GeneratedMessage {
    // Use MapEncodingRule.newBuilder() to construct.
    private MapEncodingRule() {
      initFields();
    }
    private MapEncodingRule(boolean noInit) {}
    
    private static final MapEncodingRule defaultInstance;
    public static MapEncodingRule getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public MapEncodingRule getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_MapEncodingRule_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_MapEncodingRule_fieldAccessorTable;
    }
    
    // required string tag = 3;
    public static final int TAG_FIELD_NUMBER = 3;
    private boolean hasTag;
    private java.lang.String tag_ = "";
    public boolean hasTag() { return hasTag; }
    public java.lang.String getTag() { return tag_; }
    
    // optional string value = 5;
    public static final int VALUE_FIELD_NUMBER = 5;
    private boolean hasValue;
    private java.lang.String value_ = "";
    public boolean hasValue() { return hasValue; }
    public java.lang.String getValue() { return value_; }
    
    // required uint32 type = 6;
    public static final int TYPE_FIELD_NUMBER = 6;
    private boolean hasType;
    private int type_ = 0;
    public boolean hasType() { return hasType; }
    public int getType() { return type_; }
    
    // required uint32 subtype = 7;
    public static final int SUBTYPE_FIELD_NUMBER = 7;
    private boolean hasSubtype;
    private int subtype_ = 0;
    public boolean hasSubtype() { return hasSubtype; }
    public int getSubtype() { return subtype_; }
    
    // optional uint32 minZoom = 9;
    public static final int MINZOOM_FIELD_NUMBER = 9;
    private boolean hasMinZoom;
    private int minZoom_ = 0;
    public boolean hasMinZoom() { return hasMinZoom; }
    public int getMinZoom() { return minZoom_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasTag) return false;
      if (!hasType) return false;
      if (!hasSubtype) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasTag()) {
        output.writeString(3, getTag());
      }
      if (hasValue()) {
        output.writeString(5, getValue());
      }
      if (hasType()) {
        output.writeUInt32(6, getType());
      }
      if (hasSubtype()) {
        output.writeUInt32(7, getSubtype());
      }
      if (hasMinZoom()) {
        output.writeUInt32(9, getMinZoom());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasTag()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(3, getTag());
      }
      if (hasValue()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(5, getValue());
      }
      if (hasType()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(6, getType());
      }
      if (hasSubtype()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(7, getSubtype());
      }
      if (hasMinZoom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(9, getMinZoom());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.MapEncodingRule parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapEncodingRule parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapEncodingRule parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapEncodingRule parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapEncodingRule parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapEncodingRule parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapEncodingRule parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.MapEncodingRule parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.MapEncodingRule parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapEncodingRule parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.MapEncodingRule prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.MapEncodingRule result;
      
      // Construct using net.osmand.binary.OsmandOdb.MapEncodingRule.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.MapEncodingRule();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.MapEncodingRule internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.MapEncodingRule();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.MapEncodingRule.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.MapEncodingRule getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.MapEncodingRule.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.MapEncodingRule build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.MapEncodingRule buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.MapEncodingRule buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.MapEncodingRule returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.MapEncodingRule) {
          return mergeFrom((net.osmand.binary.OsmandOdb.MapEncodingRule)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.MapEncodingRule other) {
        if (other == net.osmand.binary.OsmandOdb.MapEncodingRule.getDefaultInstance()) return this;
        if (other.hasTag()) {
          setTag(other.getTag());
        }
        if (other.hasValue()) {
          setValue(other.getValue());
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasSubtype()) {
          setSubtype(other.getSubtype());
        }
        if (other.hasMinZoom()) {
          setMinZoom(other.getMinZoom());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 26: {
              setTag(input.readString());
              break;
            }
            case 42: {
              setValue(input.readString());
              break;
            }
            case 48: {
              setType(input.readUInt32());
              break;
            }
            case 56: {
              setSubtype(input.readUInt32());
              break;
            }
            case 72: {
              setMinZoom(input.readUInt32());
              break;
            }
          }
        }
      }
      
      
      // required string tag = 3;
      public boolean hasTag() {
        return result.hasTag();
      }
      public java.lang.String getTag() {
        return result.getTag();
      }
      public Builder setTag(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasTag = true;
        result.tag_ = value;
        return this;
      }
      public Builder clearTag() {
        result.hasTag = false;
        result.tag_ = getDefaultInstance().getTag();
        return this;
      }
      
      // optional string value = 5;
      public boolean hasValue() {
        return result.hasValue();
      }
      public java.lang.String getValue() {
        return result.getValue();
      }
      public Builder setValue(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasValue = true;
        result.value_ = value;
        return this;
      }
      public Builder clearValue() {
        result.hasValue = false;
        result.value_ = getDefaultInstance().getValue();
        return this;
      }
      
      // required uint32 type = 6;
      public boolean hasType() {
        return result.hasType();
      }
      public int getType() {
        return result.getType();
      }
      public Builder setType(int value) {
        result.hasType = true;
        result.type_ = value;
        return this;
      }
      public Builder clearType() {
        result.hasType = false;
        result.type_ = 0;
        return this;
      }
      
      // required uint32 subtype = 7;
      public boolean hasSubtype() {
        return result.hasSubtype();
      }
      public int getSubtype() {
        return result.getSubtype();
      }
      public Builder setSubtype(int value) {
        result.hasSubtype = true;
        result.subtype_ = value;
        return this;
      }
      public Builder clearSubtype() {
        result.hasSubtype = false;
        result.subtype_ = 0;
        return this;
      }
      
      // optional uint32 minZoom = 9;
      public boolean hasMinZoom() {
        return result.hasMinZoom();
      }
      public int getMinZoom() {
        return result.getMinZoom();
      }
      public Builder setMinZoom(int value) {
        result.hasMinZoom = true;
        result.minZoom_ = value;
        return this;
      }
      public Builder clearMinZoom() {
        result.hasMinZoom = false;
        result.minZoom_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:MapEncodingRule)
    }
    
    static {
      defaultInstance = new MapEncodingRule(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:MapEncodingRule)
  }
  
  public static final class MapRootLevel extends
      com.google.protobuf.GeneratedMessage {
    // Use MapRootLevel.newBuilder() to construct.
    private MapRootLevel() {
      initFields();
    }
    private MapRootLevel(boolean noInit) {}
    
    private static final MapRootLevel defaultInstance;
    public static MapRootLevel getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public MapRootLevel getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_MapRootLevel_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_MapRootLevel_fieldAccessorTable;
    }
    
    // required int32 maxZoom = 1;
    public static final int MAXZOOM_FIELD_NUMBER = 1;
    private boolean hasMaxZoom;
    private int maxZoom_ = 0;
    public boolean hasMaxZoom() { return hasMaxZoom; }
    public int getMaxZoom() { return maxZoom_; }
    
    // required int32 minZoom = 2;
    public static final int MINZOOM_FIELD_NUMBER = 2;
    private boolean hasMinZoom;
    private int minZoom_ = 0;
    public boolean hasMinZoom() { return hasMinZoom; }
    public int getMinZoom() { return minZoom_; }
    
    // required int32 left = 3;
    public static final int LEFT_FIELD_NUMBER = 3;
    private boolean hasLeft;
    private int left_ = 0;
    public boolean hasLeft() { return hasLeft; }
    public int getLeft() { return left_; }
    
    // required int32 right = 4;
    public static final int RIGHT_FIELD_NUMBER = 4;
    private boolean hasRight;
    private int right_ = 0;
    public boolean hasRight() { return hasRight; }
    public int getRight() { return right_; }
    
    // required int32 top = 5;
    public static final int TOP_FIELD_NUMBER = 5;
    private boolean hasTop;
    private int top_ = 0;
    public boolean hasTop() { return hasTop; }
    public int getTop() { return top_; }
    
    // required int32 bottom = 6;
    public static final int BOTTOM_FIELD_NUMBER = 6;
    private boolean hasBottom;
    private int bottom_ = 0;
    public boolean hasBottom() { return hasBottom; }
    public int getBottom() { return bottom_; }
    
    // repeated .MapTree root = 7;
    public static final int ROOT_FIELD_NUMBER = 7;
    private java.util.List<net.osmand.binary.OsmandOdb.MapTree> root_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.MapTree> getRootList() {
      return root_;
    }
    public int getRootCount() { return root_.size(); }
    public net.osmand.binary.OsmandOdb.MapTree getRoot(int index) {
      return root_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasMaxZoom) return false;
      if (!hasMinZoom) return false;
      if (!hasLeft) return false;
      if (!hasRight) return false;
      if (!hasTop) return false;
      if (!hasBottom) return false;
      for (net.osmand.binary.OsmandOdb.MapTree element : getRootList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasMaxZoom()) {
        output.writeInt32(1, getMaxZoom());
      }
      if (hasMinZoom()) {
        output.writeInt32(2, getMinZoom());
      }
      if (hasLeft()) {
        output.writeInt32(3, getLeft());
      }
      if (hasRight()) {
        output.writeInt32(4, getRight());
      }
      if (hasTop()) {
        output.writeInt32(5, getTop());
      }
      if (hasBottom()) {
        output.writeInt32(6, getBottom());
      }
      for (net.osmand.binary.OsmandOdb.MapTree element : getRootList()) {
        output.writeMessage(7, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasMaxZoom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(1, getMaxZoom());
      }
      if (hasMinZoom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, getMinZoom());
      }
      if (hasLeft()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, getLeft());
      }
      if (hasRight()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, getRight());
      }
      if (hasTop()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, getTop());
      }
      if (hasBottom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, getBottom());
      }
      for (net.osmand.binary.OsmandOdb.MapTree element : getRootList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.MapRootLevel parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapRootLevel parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapRootLevel parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapRootLevel parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapRootLevel parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapRootLevel parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapRootLevel parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.MapRootLevel parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.MapRootLevel parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapRootLevel parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.MapRootLevel prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.MapRootLevel result;
      
      // Construct using net.osmand.binary.OsmandOdb.MapRootLevel.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.MapRootLevel();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.MapRootLevel internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.MapRootLevel();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.MapRootLevel.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.MapRootLevel getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.MapRootLevel.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.MapRootLevel build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.MapRootLevel buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.MapRootLevel buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.root_ != java.util.Collections.EMPTY_LIST) {
          result.root_ =
            java.util.Collections.unmodifiableList(result.root_);
        }
        net.osmand.binary.OsmandOdb.MapRootLevel returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.MapRootLevel) {
          return mergeFrom((net.osmand.binary.OsmandOdb.MapRootLevel)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.MapRootLevel other) {
        if (other == net.osmand.binary.OsmandOdb.MapRootLevel.getDefaultInstance()) return this;
        if (other.hasMaxZoom()) {
          setMaxZoom(other.getMaxZoom());
        }
        if (other.hasMinZoom()) {
          setMinZoom(other.getMinZoom());
        }
        if (other.hasLeft()) {
          setLeft(other.getLeft());
        }
        if (other.hasRight()) {
          setRight(other.getRight());
        }
        if (other.hasTop()) {
          setTop(other.getTop());
        }
        if (other.hasBottom()) {
          setBottom(other.getBottom());
        }
        if (!other.root_.isEmpty()) {
          if (result.root_.isEmpty()) {
            result.root_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapTree>();
          }
          result.root_.addAll(other.root_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setMaxZoom(input.readInt32());
              break;
            }
            case 16: {
              setMinZoom(input.readInt32());
              break;
            }
            case 24: {
              setLeft(input.readInt32());
              break;
            }
            case 32: {
              setRight(input.readInt32());
              break;
            }
            case 40: {
              setTop(input.readInt32());
              break;
            }
            case 48: {
              setBottom(input.readInt32());
              break;
            }
            case 58: {
              net.osmand.binary.OsmandOdb.MapTree.Builder subBuilder = net.osmand.binary.OsmandOdb.MapTree.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addRoot(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required int32 maxZoom = 1;
      public boolean hasMaxZoom() {
        return result.hasMaxZoom();
      }
      public int getMaxZoom() {
        return result.getMaxZoom();
      }
      public Builder setMaxZoom(int value) {
        result.hasMaxZoom = true;
        result.maxZoom_ = value;
        return this;
      }
      public Builder clearMaxZoom() {
        result.hasMaxZoom = false;
        result.maxZoom_ = 0;
        return this;
      }
      
      // required int32 minZoom = 2;
      public boolean hasMinZoom() {
        return result.hasMinZoom();
      }
      public int getMinZoom() {
        return result.getMinZoom();
      }
      public Builder setMinZoom(int value) {
        result.hasMinZoom = true;
        result.minZoom_ = value;
        return this;
      }
      public Builder clearMinZoom() {
        result.hasMinZoom = false;
        result.minZoom_ = 0;
        return this;
      }
      
      // required int32 left = 3;
      public boolean hasLeft() {
        return result.hasLeft();
      }
      public int getLeft() {
        return result.getLeft();
      }
      public Builder setLeft(int value) {
        result.hasLeft = true;
        result.left_ = value;
        return this;
      }
      public Builder clearLeft() {
        result.hasLeft = false;
        result.left_ = 0;
        return this;
      }
      
      // required int32 right = 4;
      public boolean hasRight() {
        return result.hasRight();
      }
      public int getRight() {
        return result.getRight();
      }
      public Builder setRight(int value) {
        result.hasRight = true;
        result.right_ = value;
        return this;
      }
      public Builder clearRight() {
        result.hasRight = false;
        result.right_ = 0;
        return this;
      }
      
      // required int32 top = 5;
      public boolean hasTop() {
        return result.hasTop();
      }
      public int getTop() {
        return result.getTop();
      }
      public Builder setTop(int value) {
        result.hasTop = true;
        result.top_ = value;
        return this;
      }
      public Builder clearTop() {
        result.hasTop = false;
        result.top_ = 0;
        return this;
      }
      
      // required int32 bottom = 6;
      public boolean hasBottom() {
        return result.hasBottom();
      }
      public int getBottom() {
        return result.getBottom();
      }
      public Builder setBottom(int value) {
        result.hasBottom = true;
        result.bottom_ = value;
        return this;
      }
      public Builder clearBottom() {
        result.hasBottom = false;
        result.bottom_ = 0;
        return this;
      }
      
      // repeated .MapTree root = 7;
      public java.util.List<net.osmand.binary.OsmandOdb.MapTree> getRootList() {
        return java.util.Collections.unmodifiableList(result.root_);
      }
      public int getRootCount() {
        return result.getRootCount();
      }
      public net.osmand.binary.OsmandOdb.MapTree getRoot(int index) {
        return result.getRoot(index);
      }
      public Builder setRoot(int index, net.osmand.binary.OsmandOdb.MapTree value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.root_.set(index, value);
        return this;
      }
      public Builder setRoot(int index, net.osmand.binary.OsmandOdb.MapTree.Builder builderForValue) {
        result.root_.set(index, builderForValue.build());
        return this;
      }
      public Builder addRoot(net.osmand.binary.OsmandOdb.MapTree value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.root_.isEmpty()) {
          result.root_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapTree>();
        }
        result.root_.add(value);
        return this;
      }
      public Builder addRoot(net.osmand.binary.OsmandOdb.MapTree.Builder builderForValue) {
        if (result.root_.isEmpty()) {
          result.root_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapTree>();
        }
        result.root_.add(builderForValue.build());
        return this;
      }
      public Builder addAllRoot(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.MapTree> values) {
        if (result.root_.isEmpty()) {
          result.root_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapTree>();
        }
        super.addAll(values, result.root_);
        return this;
      }
      public Builder clearRoot() {
        result.root_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:MapRootLevel)
    }
    
    static {
      defaultInstance = new MapRootLevel(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:MapRootLevel)
  }
  
  public static final class MapTree extends
      com.google.protobuf.GeneratedMessage {
    // Use MapTree.newBuilder() to construct.
    private MapTree() {
      initFields();
    }
    private MapTree(boolean noInit) {}
    
    private static final MapTree defaultInstance;
    public static MapTree getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public MapTree getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_MapTree_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_MapTree_fieldAccessorTable;
    }
    
    // required sint32 left = 1;
    public static final int LEFT_FIELD_NUMBER = 1;
    private boolean hasLeft;
    private int left_ = 0;
    public boolean hasLeft() { return hasLeft; }
    public int getLeft() { return left_; }
    
    // required sint32 right = 2;
    public static final int RIGHT_FIELD_NUMBER = 2;
    private boolean hasRight;
    private int right_ = 0;
    public boolean hasRight() { return hasRight; }
    public int getRight() { return right_; }
    
    // required sint32 top = 3;
    public static final int TOP_FIELD_NUMBER = 3;
    private boolean hasTop;
    private int top_ = 0;
    public boolean hasTop() { return hasTop; }
    public int getTop() { return top_; }
    
    // required sint32 bottom = 4;
    public static final int BOTTOM_FIELD_NUMBER = 4;
    private boolean hasBottom;
    private int bottom_ = 0;
    public boolean hasBottom() { return hasBottom; }
    public int getBottom() { return bottom_; }
    
    // optional .StringTable oldstringTable = 5;
    public static final int OLDSTRINGTABLE_FIELD_NUMBER = 5;
    private boolean hasOldstringTable;
    private net.osmand.binary.OsmandOdb.StringTable oldstringTable_;
    public boolean hasOldstringTable() { return hasOldstringTable; }
    public net.osmand.binary.OsmandOdb.StringTable getOldstringTable() { return oldstringTable_; }
    
    // optional uint64 oldbaseId = 6;
    public static final int OLDBASEID_FIELD_NUMBER = 6;
    private boolean hasOldbaseId;
    private long oldbaseId_ = 0L;
    public boolean hasOldbaseId() { return hasOldbaseId; }
    public long getOldbaseId() { return oldbaseId_; }
    
    // repeated .MapTree subtrees = 7;
    public static final int SUBTREES_FIELD_NUMBER = 7;
    private java.util.List<net.osmand.binary.OsmandOdb.MapTree> subtrees_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.MapTree> getSubtreesList() {
      return subtrees_;
    }
    public int getSubtreesCount() { return subtrees_.size(); }
    public net.osmand.binary.OsmandOdb.MapTree getSubtrees(int index) {
      return subtrees_.get(index);
    }
    
    // repeated .MapData leafs = 8;
    public static final int LEAFS_FIELD_NUMBER = 8;
    private java.util.List<net.osmand.binary.OsmandOdb.MapData> leafs_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.MapData> getLeafsList() {
      return leafs_;
    }
    public int getLeafsCount() { return leafs_.size(); }
    public net.osmand.binary.OsmandOdb.MapData getLeafs(int index) {
      return leafs_.get(index);
    }
    
    // optional uint64 baseId = 10;
    public static final int BASEID_FIELD_NUMBER = 10;
    private boolean hasBaseId;
    private long baseId_ = 0L;
    public boolean hasBaseId() { return hasBaseId; }
    public long getBaseId() { return baseId_; }
    
    // optional .StringTable stringTable = 11;
    public static final int STRINGTABLE_FIELD_NUMBER = 11;
    private boolean hasStringTable;
    private net.osmand.binary.OsmandOdb.StringTable stringTable_;
    public boolean hasStringTable() { return hasStringTable; }
    public net.osmand.binary.OsmandOdb.StringTable getStringTable() { return stringTable_; }
    
    private void initFields() {
      oldstringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance();
      stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasLeft) return false;
      if (!hasRight) return false;
      if (!hasTop) return false;
      if (!hasBottom) return false;
      for (net.osmand.binary.OsmandOdb.MapTree element : getSubtreesList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.MapData element : getLeafsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasLeft()) {
        output.writeSInt32(1, getLeft());
      }
      if (hasRight()) {
        output.writeSInt32(2, getRight());
      }
      if (hasTop()) {
        output.writeSInt32(3, getTop());
      }
      if (hasBottom()) {
        output.writeSInt32(4, getBottom());
      }
      if (hasOldstringTable()) {
        output.writeMessage(5, getOldstringTable());
      }
      if (hasOldbaseId()) {
        output.writeUInt64(6, getOldbaseId());
      }
      for (net.osmand.binary.OsmandOdb.MapTree element : getSubtreesList()) {
        output.writeMessage(7, element);
      }
      for (net.osmand.binary.OsmandOdb.MapData element : getLeafsList()) {
        output.writeMessage(8, element);
      }
      if (hasBaseId()) {
        output.writeUInt64(10, getBaseId());
      }
      if (hasStringTable()) {
        output.writeMessage(11, getStringTable());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasLeft()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(1, getLeft());
      }
      if (hasRight()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(2, getRight());
      }
      if (hasTop()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(3, getTop());
      }
      if (hasBottom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(4, getBottom());
      }
      if (hasOldstringTable()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getOldstringTable());
      }
      if (hasOldbaseId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(6, getOldbaseId());
      }
      for (net.osmand.binary.OsmandOdb.MapTree element : getSubtreesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, element);
      }
      for (net.osmand.binary.OsmandOdb.MapData element : getLeafsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, element);
      }
      if (hasBaseId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(10, getBaseId());
      }
      if (hasStringTable()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(11, getStringTable());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.MapTree parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapTree parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapTree parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapTree parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapTree parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapTree parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapTree parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.MapTree parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.MapTree parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapTree parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.MapTree prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.MapTree result;
      
      // Construct using net.osmand.binary.OsmandOdb.MapTree.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.MapTree();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.MapTree internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.MapTree();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.MapTree.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.MapTree getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.MapTree.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.MapTree build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.MapTree buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.MapTree buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.subtrees_ != java.util.Collections.EMPTY_LIST) {
          result.subtrees_ =
            java.util.Collections.unmodifiableList(result.subtrees_);
        }
        if (result.leafs_ != java.util.Collections.EMPTY_LIST) {
          result.leafs_ =
            java.util.Collections.unmodifiableList(result.leafs_);
        }
        net.osmand.binary.OsmandOdb.MapTree returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.MapTree) {
          return mergeFrom((net.osmand.binary.OsmandOdb.MapTree)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.MapTree other) {
        if (other == net.osmand.binary.OsmandOdb.MapTree.getDefaultInstance()) return this;
        if (other.hasLeft()) {
          setLeft(other.getLeft());
        }
        if (other.hasRight()) {
          setRight(other.getRight());
        }
        if (other.hasTop()) {
          setTop(other.getTop());
        }
        if (other.hasBottom()) {
          setBottom(other.getBottom());
        }
        if (other.hasOldstringTable()) {
          mergeOldstringTable(other.getOldstringTable());
        }
        if (other.hasOldbaseId()) {
          setOldbaseId(other.getOldbaseId());
        }
        if (!other.subtrees_.isEmpty()) {
          if (result.subtrees_.isEmpty()) {
            result.subtrees_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapTree>();
          }
          result.subtrees_.addAll(other.subtrees_);
        }
        if (!other.leafs_.isEmpty()) {
          if (result.leafs_.isEmpty()) {
            result.leafs_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapData>();
          }
          result.leafs_.addAll(other.leafs_);
        }
        if (other.hasBaseId()) {
          setBaseId(other.getBaseId());
        }
        if (other.hasStringTable()) {
          mergeStringTable(other.getStringTable());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setLeft(input.readSInt32());
              break;
            }
            case 16: {
              setRight(input.readSInt32());
              break;
            }
            case 24: {
              setTop(input.readSInt32());
              break;
            }
            case 32: {
              setBottom(input.readSInt32());
              break;
            }
            case 42: {
              net.osmand.binary.OsmandOdb.StringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.StringTable.newBuilder();
              if (hasOldstringTable()) {
                subBuilder.mergeFrom(getOldstringTable());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setOldstringTable(subBuilder.buildPartial());
              break;
            }
            case 48: {
              setOldbaseId(input.readUInt64());
              break;
            }
            case 58: {
              net.osmand.binary.OsmandOdb.MapTree.Builder subBuilder = net.osmand.binary.OsmandOdb.MapTree.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addSubtrees(subBuilder.buildPartial());
              break;
            }
            case 66: {
              net.osmand.binary.OsmandOdb.MapData.Builder subBuilder = net.osmand.binary.OsmandOdb.MapData.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addLeafs(subBuilder.buildPartial());
              break;
            }
            case 80: {
              setBaseId(input.readUInt64());
              break;
            }
            case 90: {
              net.osmand.binary.OsmandOdb.StringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.StringTable.newBuilder();
              if (hasStringTable()) {
                subBuilder.mergeFrom(getStringTable());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setStringTable(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required sint32 left = 1;
      public boolean hasLeft() {
        return result.hasLeft();
      }
      public int getLeft() {
        return result.getLeft();
      }
      public Builder setLeft(int value) {
        result.hasLeft = true;
        result.left_ = value;
        return this;
      }
      public Builder clearLeft() {
        result.hasLeft = false;
        result.left_ = 0;
        return this;
      }
      
      // required sint32 right = 2;
      public boolean hasRight() {
        return result.hasRight();
      }
      public int getRight() {
        return result.getRight();
      }
      public Builder setRight(int value) {
        result.hasRight = true;
        result.right_ = value;
        return this;
      }
      public Builder clearRight() {
        result.hasRight = false;
        result.right_ = 0;
        return this;
      }
      
      // required sint32 top = 3;
      public boolean hasTop() {
        return result.hasTop();
      }
      public int getTop() {
        return result.getTop();
      }
      public Builder setTop(int value) {
        result.hasTop = true;
        result.top_ = value;
        return this;
      }
      public Builder clearTop() {
        result.hasTop = false;
        result.top_ = 0;
        return this;
      }
      
      // required sint32 bottom = 4;
      public boolean hasBottom() {
        return result.hasBottom();
      }
      public int getBottom() {
        return result.getBottom();
      }
      public Builder setBottom(int value) {
        result.hasBottom = true;
        result.bottom_ = value;
        return this;
      }
      public Builder clearBottom() {
        result.hasBottom = false;
        result.bottom_ = 0;
        return this;
      }
      
      // optional .StringTable oldstringTable = 5;
      public boolean hasOldstringTable() {
        return result.hasOldstringTable();
      }
      public net.osmand.binary.OsmandOdb.StringTable getOldstringTable() {
        return result.getOldstringTable();
      }
      public Builder setOldstringTable(net.osmand.binary.OsmandOdb.StringTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasOldstringTable = true;
        result.oldstringTable_ = value;
        return this;
      }
      public Builder setOldstringTable(net.osmand.binary.OsmandOdb.StringTable.Builder builderForValue) {
        result.hasOldstringTable = true;
        result.oldstringTable_ = builderForValue.build();
        return this;
      }
      public Builder mergeOldstringTable(net.osmand.binary.OsmandOdb.StringTable value) {
        if (result.hasOldstringTable() &&
            result.oldstringTable_ != net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance()) {
          result.oldstringTable_ =
            net.osmand.binary.OsmandOdb.StringTable.newBuilder(result.oldstringTable_).mergeFrom(value).buildPartial();
        } else {
          result.oldstringTable_ = value;
        }
        result.hasOldstringTable = true;
        return this;
      }
      public Builder clearOldstringTable() {
        result.hasOldstringTable = false;
        result.oldstringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance();
        return this;
      }
      
      // optional uint64 oldbaseId = 6;
      public boolean hasOldbaseId() {
        return result.hasOldbaseId();
      }
      public long getOldbaseId() {
        return result.getOldbaseId();
      }
      public Builder setOldbaseId(long value) {
        result.hasOldbaseId = true;
        result.oldbaseId_ = value;
        return this;
      }
      public Builder clearOldbaseId() {
        result.hasOldbaseId = false;
        result.oldbaseId_ = 0L;
        return this;
      }
      
      // repeated .MapTree subtrees = 7;
      public java.util.List<net.osmand.binary.OsmandOdb.MapTree> getSubtreesList() {
        return java.util.Collections.unmodifiableList(result.subtrees_);
      }
      public int getSubtreesCount() {
        return result.getSubtreesCount();
      }
      public net.osmand.binary.OsmandOdb.MapTree getSubtrees(int index) {
        return result.getSubtrees(index);
      }
      public Builder setSubtrees(int index, net.osmand.binary.OsmandOdb.MapTree value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.subtrees_.set(index, value);
        return this;
      }
      public Builder setSubtrees(int index, net.osmand.binary.OsmandOdb.MapTree.Builder builderForValue) {
        result.subtrees_.set(index, builderForValue.build());
        return this;
      }
      public Builder addSubtrees(net.osmand.binary.OsmandOdb.MapTree value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.subtrees_.isEmpty()) {
          result.subtrees_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapTree>();
        }
        result.subtrees_.add(value);
        return this;
      }
      public Builder addSubtrees(net.osmand.binary.OsmandOdb.MapTree.Builder builderForValue) {
        if (result.subtrees_.isEmpty()) {
          result.subtrees_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapTree>();
        }
        result.subtrees_.add(builderForValue.build());
        return this;
      }
      public Builder addAllSubtrees(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.MapTree> values) {
        if (result.subtrees_.isEmpty()) {
          result.subtrees_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapTree>();
        }
        super.addAll(values, result.subtrees_);
        return this;
      }
      public Builder clearSubtrees() {
        result.subtrees_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .MapData leafs = 8;
      public java.util.List<net.osmand.binary.OsmandOdb.MapData> getLeafsList() {
        return java.util.Collections.unmodifiableList(result.leafs_);
      }
      public int getLeafsCount() {
        return result.getLeafsCount();
      }
      public net.osmand.binary.OsmandOdb.MapData getLeafs(int index) {
        return result.getLeafs(index);
      }
      public Builder setLeafs(int index, net.osmand.binary.OsmandOdb.MapData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.leafs_.set(index, value);
        return this;
      }
      public Builder setLeafs(int index, net.osmand.binary.OsmandOdb.MapData.Builder builderForValue) {
        result.leafs_.set(index, builderForValue.build());
        return this;
      }
      public Builder addLeafs(net.osmand.binary.OsmandOdb.MapData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.leafs_.isEmpty()) {
          result.leafs_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapData>();
        }
        result.leafs_.add(value);
        return this;
      }
      public Builder addLeafs(net.osmand.binary.OsmandOdb.MapData.Builder builderForValue) {
        if (result.leafs_.isEmpty()) {
          result.leafs_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapData>();
        }
        result.leafs_.add(builderForValue.build());
        return this;
      }
      public Builder addAllLeafs(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.MapData> values) {
        if (result.leafs_.isEmpty()) {
          result.leafs_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.MapData>();
        }
        super.addAll(values, result.leafs_);
        return this;
      }
      public Builder clearLeafs() {
        result.leafs_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional uint64 baseId = 10;
      public boolean hasBaseId() {
        return result.hasBaseId();
      }
      public long getBaseId() {
        return result.getBaseId();
      }
      public Builder setBaseId(long value) {
        result.hasBaseId = true;
        result.baseId_ = value;
        return this;
      }
      public Builder clearBaseId() {
        result.hasBaseId = false;
        result.baseId_ = 0L;
        return this;
      }
      
      // optional .StringTable stringTable = 11;
      public boolean hasStringTable() {
        return result.hasStringTable();
      }
      public net.osmand.binary.OsmandOdb.StringTable getStringTable() {
        return result.getStringTable();
      }
      public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasStringTable = true;
        result.stringTable_ = value;
        return this;
      }
      public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable.Builder builderForValue) {
        result.hasStringTable = true;
        result.stringTable_ = builderForValue.build();
        return this;
      }
      public Builder mergeStringTable(net.osmand.binary.OsmandOdb.StringTable value) {
        if (result.hasStringTable() &&
            result.stringTable_ != net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance()) {
          result.stringTable_ =
            net.osmand.binary.OsmandOdb.StringTable.newBuilder(result.stringTable_).mergeFrom(value).buildPartial();
        } else {
          result.stringTable_ = value;
        }
        result.hasStringTable = true;
        return this;
      }
      public Builder clearStringTable() {
        result.hasStringTable = false;
        result.stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:MapTree)
    }
    
    static {
      defaultInstance = new MapTree(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:MapTree)
  }
  
  public static final class MapData extends
      com.google.protobuf.GeneratedMessage {
    // Use MapData.newBuilder() to construct.
    private MapData() {
      initFields();
    }
    private MapData(boolean noInit) {}
    
    private static final MapData defaultInstance;
    public static MapData getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public MapData getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_MapData_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_MapData_fieldAccessorTable;
    }
    
    // required bytes coordinates = 1;
    public static final int COORDINATES_FIELD_NUMBER = 1;
    private boolean hasCoordinates;
    private com.google.protobuf.ByteString coordinates_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasCoordinates() { return hasCoordinates; }
    public com.google.protobuf.ByteString getCoordinates() { return coordinates_; }
    
    // required bytes types = 2;
    public static final int TYPES_FIELD_NUMBER = 2;
    private boolean hasTypes;
    private com.google.protobuf.ByteString types_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasTypes() { return hasTypes; }
    public com.google.protobuf.ByteString getTypes() { return types_; }
    
    // required sint64 id = 3;
    public static final int ID_FIELD_NUMBER = 3;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // optional uint32 stringId = 4;
    public static final int STRINGID_FIELD_NUMBER = 4;
    private boolean hasStringId;
    private int stringId_ = 0;
    public boolean hasStringId() { return hasStringId; }
    public int getStringId() { return stringId_; }
    
    // optional bytes restrictions = 5;
    public static final int RESTRICTIONS_FIELD_NUMBER = 5;
    private boolean hasRestrictions;
    private com.google.protobuf.ByteString restrictions_ = com.google.protobuf.ByteString.EMPTY;
    public boolean hasRestrictions() { return hasRestrictions; }
    public com.google.protobuf.ByteString getRestrictions() { return restrictions_; }
    
    // optional int32 highwayMeta = 6;
    public static final int HIGHWAYMETA_FIELD_NUMBER = 6;
    private boolean hasHighwayMeta;
    private int highwayMeta_ = 0;
    public boolean hasHighwayMeta() { return hasHighwayMeta; }
    public int getHighwayMeta() { return highwayMeta_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasCoordinates) return false;
      if (!hasTypes) return false;
      if (!hasId) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasCoordinates()) {
        output.writeBytes(1, getCoordinates());
      }
      if (hasTypes()) {
        output.writeBytes(2, getTypes());
      }
      if (hasId()) {
        output.writeSInt64(3, getId());
      }
      if (hasStringId()) {
        output.writeUInt32(4, getStringId());
      }
      if (hasRestrictions()) {
        output.writeBytes(5, getRestrictions());
      }
      if (hasHighwayMeta()) {
        output.writeInt32(6, getHighwayMeta());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasCoordinates()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(1, getCoordinates());
      }
      if (hasTypes()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(2, getTypes());
      }
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(3, getId());
      }
      if (hasStringId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, getStringId());
      }
      if (hasRestrictions()) {
        size += com.google.protobuf.CodedOutputStream
          .computeBytesSize(5, getRestrictions());
      }
      if (hasHighwayMeta()) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, getHighwayMeta());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.MapData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.MapData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.MapData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.MapData result;
      
      // Construct using net.osmand.binary.OsmandOdb.MapData.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.MapData();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.MapData internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.MapData();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.MapData.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.MapData getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.MapData.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.MapData build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.MapData buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.MapData buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.MapData returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.MapData) {
          return mergeFrom((net.osmand.binary.OsmandOdb.MapData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.MapData other) {
        if (other == net.osmand.binary.OsmandOdb.MapData.getDefaultInstance()) return this;
        if (other.hasCoordinates()) {
          setCoordinates(other.getCoordinates());
        }
        if (other.hasTypes()) {
          setTypes(other.getTypes());
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasStringId()) {
          setStringId(other.getStringId());
        }
        if (other.hasRestrictions()) {
          setRestrictions(other.getRestrictions());
        }
        if (other.hasHighwayMeta()) {
          setHighwayMeta(other.getHighwayMeta());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setCoordinates(input.readBytes());
              break;
            }
            case 18: {
              setTypes(input.readBytes());
              break;
            }
            case 24: {
              setId(input.readSInt64());
              break;
            }
            case 32: {
              setStringId(input.readUInt32());
              break;
            }
            case 42: {
              setRestrictions(input.readBytes());
              break;
            }
            case 48: {
              setHighwayMeta(input.readInt32());
              break;
            }
          }
        }
      }
      
      
      // required bytes coordinates = 1;
      public boolean hasCoordinates() {
        return result.hasCoordinates();
      }
      public com.google.protobuf.ByteString getCoordinates() {
        return result.getCoordinates();
      }
      public Builder setCoordinates(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasCoordinates = true;
        result.coordinates_ = value;
        return this;
      }
      public Builder clearCoordinates() {
        result.hasCoordinates = false;
        result.coordinates_ = getDefaultInstance().getCoordinates();
        return this;
      }
      
      // required bytes types = 2;
      public boolean hasTypes() {
        return result.hasTypes();
      }
      public com.google.protobuf.ByteString getTypes() {
        return result.getTypes();
      }
      public Builder setTypes(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasTypes = true;
        result.types_ = value;
        return this;
      }
      public Builder clearTypes() {
        result.hasTypes = false;
        result.types_ = getDefaultInstance().getTypes();
        return this;
      }
      
      // required sint64 id = 3;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // optional uint32 stringId = 4;
      public boolean hasStringId() {
        return result.hasStringId();
      }
      public int getStringId() {
        return result.getStringId();
      }
      public Builder setStringId(int value) {
        result.hasStringId = true;
        result.stringId_ = value;
        return this;
      }
      public Builder clearStringId() {
        result.hasStringId = false;
        result.stringId_ = 0;
        return this;
      }
      
      // optional bytes restrictions = 5;
      public boolean hasRestrictions() {
        return result.hasRestrictions();
      }
      public com.google.protobuf.ByteString getRestrictions() {
        return result.getRestrictions();
      }
      public Builder setRestrictions(com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasRestrictions = true;
        result.restrictions_ = value;
        return this;
      }
      public Builder clearRestrictions() {
        result.hasRestrictions = false;
        result.restrictions_ = getDefaultInstance().getRestrictions();
        return this;
      }
      
      // optional int32 highwayMeta = 6;
      public boolean hasHighwayMeta() {
        return result.hasHighwayMeta();
      }
      public int getHighwayMeta() {
        return result.getHighwayMeta();
      }
      public Builder setHighwayMeta(int value) {
        result.hasHighwayMeta = true;
        result.highwayMeta_ = value;
        return this;
      }
      public Builder clearHighwayMeta() {
        result.hasHighwayMeta = false;
        result.highwayMeta_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:MapData)
    }
    
    static {
      defaultInstance = new MapData(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:MapData)
  }
  
  public static final class OsmAndAddressIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndAddressIndex.newBuilder() to construct.
    private OsmAndAddressIndex() {
      initFields();
    }
    private OsmAndAddressIndex(boolean noInit) {}
    
    private static final OsmAndAddressIndex defaultInstance;
    public static OsmAndAddressIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndAddressIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndAddressIndex_fieldAccessorTable;
    }
    
    // required string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional string name_en = 2;
    public static final int NAME_EN_FIELD_NUMBER = 2;
    private boolean hasNameEn;
    private java.lang.String nameEn_ = "";
    public boolean hasNameEn() { return hasNameEn; }
    public java.lang.String getNameEn() { return nameEn_; }
    
    // optional .CitiesIndex cities = 5;
    public static final int CITIES_FIELD_NUMBER = 5;
    private boolean hasCities;
    private net.osmand.binary.OsmandOdb.CitiesIndex cities_;
    public boolean hasCities() { return hasCities; }
    public net.osmand.binary.OsmandOdb.CitiesIndex getCities() { return cities_; }
    
    // optional .PostcodesIndex postcodes = 6;
    public static final int POSTCODES_FIELD_NUMBER = 6;
    private boolean hasPostcodes;
    private net.osmand.binary.OsmandOdb.PostcodesIndex postcodes_;
    public boolean hasPostcodes() { return hasPostcodes; }
    public net.osmand.binary.OsmandOdb.PostcodesIndex getPostcodes() { return postcodes_; }
    
    // optional .CitiesIndex villages = 7;
    public static final int VILLAGES_FIELD_NUMBER = 7;
    private boolean hasVillages;
    private net.osmand.binary.OsmandOdb.CitiesIndex villages_;
    public boolean hasVillages() { return hasVillages; }
    public net.osmand.binary.OsmandOdb.CitiesIndex getVillages() { return villages_; }
    
    private void initFields() {
      cities_ = net.osmand.binary.OsmandOdb.CitiesIndex.getDefaultInstance();
      postcodes_ = net.osmand.binary.OsmandOdb.PostcodesIndex.getDefaultInstance();
      villages_ = net.osmand.binary.OsmandOdb.CitiesIndex.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasName) return false;
      if (hasCities()) {
        if (!getCities().isInitialized()) return false;
      }
      if (hasPostcodes()) {
        if (!getPostcodes().isInitialized()) return false;
      }
      if (hasVillages()) {
        if (!getVillages().isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(1, getName());
      }
      if (hasNameEn()) {
        output.writeString(2, getNameEn());
      }
      if (hasCities()) {
        output.writeMessage(5, getCities());
      }
      if (hasPostcodes()) {
        output.writeMessage(6, getPostcodes());
      }
      if (hasVillages()) {
        output.writeMessage(7, getVillages());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(2, getNameEn());
      }
      if (hasCities()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, getCities());
      }
      if (hasPostcodes()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, getPostcodes());
      }
      if (hasVillages()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, getVillages());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndAddressIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndAddressIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndAddressIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndAddressIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndAddressIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndAddressIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndAddressIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndAddressIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndAddressIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndAddressIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndAddressIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndAddressIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndAddressIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.OsmAndAddressIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndAddressIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndAddressIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndAddressIndex other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndAddressIndex.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasCities()) {
          mergeCities(other.getCities());
        }
        if (other.hasPostcodes()) {
          mergePostcodes(other.getPostcodes());
        }
        if (other.hasVillages()) {
          mergeVillages(other.getVillages());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setName(input.readString());
              break;
            }
            case 18: {
              setNameEn(input.readString());
              break;
            }
            case 42: {
              net.osmand.binary.OsmandOdb.CitiesIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.CitiesIndex.newBuilder();
              if (hasCities()) {
                subBuilder.mergeFrom(getCities());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setCities(subBuilder.buildPartial());
              break;
            }
            case 50: {
              net.osmand.binary.OsmandOdb.PostcodesIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.PostcodesIndex.newBuilder();
              if (hasPostcodes()) {
                subBuilder.mergeFrom(getPostcodes());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setPostcodes(subBuilder.buildPartial());
              break;
            }
            case 58: {
              net.osmand.binary.OsmandOdb.CitiesIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.CitiesIndex.newBuilder();
              if (hasVillages()) {
                subBuilder.mergeFrom(getVillages());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setVillages(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required string name = 1;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional string name_en = 2;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public java.lang.String getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = getDefaultInstance().getNameEn();
        return this;
      }
      
      // optional .CitiesIndex cities = 5;
      public boolean hasCities() {
        return result.hasCities();
      }
      public net.osmand.binary.OsmandOdb.CitiesIndex getCities() {
        return result.getCities();
      }
      public Builder setCities(net.osmand.binary.OsmandOdb.CitiesIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasCities = true;
        result.cities_ = value;
        return this;
      }
      public Builder setCities(net.osmand.binary.OsmandOdb.CitiesIndex.Builder builderForValue) {
        result.hasCities = true;
        result.cities_ = builderForValue.build();
        return this;
      }
      public Builder mergeCities(net.osmand.binary.OsmandOdb.CitiesIndex value) {
        if (result.hasCities() &&
            result.cities_ != net.osmand.binary.OsmandOdb.CitiesIndex.getDefaultInstance()) {
          result.cities_ =
            net.osmand.binary.OsmandOdb.CitiesIndex.newBuilder(result.cities_).mergeFrom(value).buildPartial();
        } else {
          result.cities_ = value;
        }
        result.hasCities = true;
        return this;
      }
      public Builder clearCities() {
        result.hasCities = false;
        result.cities_ = net.osmand.binary.OsmandOdb.CitiesIndex.getDefaultInstance();
        return this;
      }
      
      // optional .PostcodesIndex postcodes = 6;
      public boolean hasPostcodes() {
        return result.hasPostcodes();
      }
      public net.osmand.binary.OsmandOdb.PostcodesIndex getPostcodes() {
        return result.getPostcodes();
      }
      public Builder setPostcodes(net.osmand.binary.OsmandOdb.PostcodesIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasPostcodes = true;
        result.postcodes_ = value;
        return this;
      }
      public Builder setPostcodes(net.osmand.binary.OsmandOdb.PostcodesIndex.Builder builderForValue) {
        result.hasPostcodes = true;
        result.postcodes_ = builderForValue.build();
        return this;
      }
      public Builder mergePostcodes(net.osmand.binary.OsmandOdb.PostcodesIndex value) {
        if (result.hasPostcodes() &&
            result.postcodes_ != net.osmand.binary.OsmandOdb.PostcodesIndex.getDefaultInstance()) {
          result.postcodes_ =
            net.osmand.binary.OsmandOdb.PostcodesIndex.newBuilder(result.postcodes_).mergeFrom(value).buildPartial();
        } else {
          result.postcodes_ = value;
        }
        result.hasPostcodes = true;
        return this;
      }
      public Builder clearPostcodes() {
        result.hasPostcodes = false;
        result.postcodes_ = net.osmand.binary.OsmandOdb.PostcodesIndex.getDefaultInstance();
        return this;
      }
      
      // optional .CitiesIndex villages = 7;
      public boolean hasVillages() {
        return result.hasVillages();
      }
      public net.osmand.binary.OsmandOdb.CitiesIndex getVillages() {
        return result.getVillages();
      }
      public Builder setVillages(net.osmand.binary.OsmandOdb.CitiesIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasVillages = true;
        result.villages_ = value;
        return this;
      }
      public Builder setVillages(net.osmand.binary.OsmandOdb.CitiesIndex.Builder builderForValue) {
        result.hasVillages = true;
        result.villages_ = builderForValue.build();
        return this;
      }
      public Builder mergeVillages(net.osmand.binary.OsmandOdb.CitiesIndex value) {
        if (result.hasVillages() &&
            result.villages_ != net.osmand.binary.OsmandOdb.CitiesIndex.getDefaultInstance()) {
          result.villages_ =
            net.osmand.binary.OsmandOdb.CitiesIndex.newBuilder(result.villages_).mergeFrom(value).buildPartial();
        } else {
          result.villages_ = value;
        }
        result.hasVillages = true;
        return this;
      }
      public Builder clearVillages() {
        result.hasVillages = false;
        result.villages_ = net.osmand.binary.OsmandOdb.CitiesIndex.getDefaultInstance();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndAddressIndex)
    }
    
    static {
      defaultInstance = new OsmAndAddressIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndAddressIndex)
  }
  
  public static final class CitiesIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use CitiesIndex.newBuilder() to construct.
    private CitiesIndex() {
      initFields();
    }
    private CitiesIndex(boolean noInit) {}
    
    private static final CitiesIndex defaultInstance;
    public static CitiesIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public CitiesIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_CitiesIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_CitiesIndex_fieldAccessorTable;
    }
    
    // repeated .CityIndex cities = 1;
    public static final int CITIES_FIELD_NUMBER = 1;
    private java.util.List<net.osmand.binary.OsmandOdb.CityIndex> cities_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.CityIndex> getCitiesList() {
      return cities_;
    }
    public int getCitiesCount() { return cities_.size(); }
    public net.osmand.binary.OsmandOdb.CityIndex getCities(int index) {
      return cities_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      for (net.osmand.binary.OsmandOdb.CityIndex element : getCitiesList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (net.osmand.binary.OsmandOdb.CityIndex element : getCitiesList()) {
        output.writeMessage(1, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      for (net.osmand.binary.OsmandOdb.CityIndex element : getCitiesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.CitiesIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CitiesIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CitiesIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CitiesIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CitiesIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CitiesIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CitiesIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.CitiesIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.CitiesIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CitiesIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.CitiesIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.CitiesIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.CitiesIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.CitiesIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.CitiesIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.CitiesIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.CitiesIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.CitiesIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.CitiesIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.CitiesIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.CitiesIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.CitiesIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.cities_ != java.util.Collections.EMPTY_LIST) {
          result.cities_ =
            java.util.Collections.unmodifiableList(result.cities_);
        }
        net.osmand.binary.OsmandOdb.CitiesIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.CitiesIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.CitiesIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.CitiesIndex other) {
        if (other == net.osmand.binary.OsmandOdb.CitiesIndex.getDefaultInstance()) return this;
        if (!other.cities_.isEmpty()) {
          if (result.cities_.isEmpty()) {
            result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.CityIndex>();
          }
          result.cities_.addAll(other.cities_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              net.osmand.binary.OsmandOdb.CityIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.CityIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addCities(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // repeated .CityIndex cities = 1;
      public java.util.List<net.osmand.binary.OsmandOdb.CityIndex> getCitiesList() {
        return java.util.Collections.unmodifiableList(result.cities_);
      }
      public int getCitiesCount() {
        return result.getCitiesCount();
      }
      public net.osmand.binary.OsmandOdb.CityIndex getCities(int index) {
        return result.getCities(index);
      }
      public Builder setCities(int index, net.osmand.binary.OsmandOdb.CityIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.cities_.set(index, value);
        return this;
      }
      public Builder setCities(int index, net.osmand.binary.OsmandOdb.CityIndex.Builder builderForValue) {
        result.cities_.set(index, builderForValue.build());
        return this;
      }
      public Builder addCities(net.osmand.binary.OsmandOdb.CityIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.cities_.isEmpty()) {
          result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.CityIndex>();
        }
        result.cities_.add(value);
        return this;
      }
      public Builder addCities(net.osmand.binary.OsmandOdb.CityIndex.Builder builderForValue) {
        if (result.cities_.isEmpty()) {
          result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.CityIndex>();
        }
        result.cities_.add(builderForValue.build());
        return this;
      }
      public Builder addAllCities(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.CityIndex> values) {
        if (result.cities_.isEmpty()) {
          result.cities_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.CityIndex>();
        }
        super.addAll(values, result.cities_);
        return this;
      }
      public Builder clearCities() {
        result.cities_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:CitiesIndex)
    }
    
    static {
      defaultInstance = new CitiesIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:CitiesIndex)
  }
  
  public static final class PostcodesIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use PostcodesIndex.newBuilder() to construct.
    private PostcodesIndex() {
      initFields();
    }
    private PostcodesIndex(boolean noInit) {}
    
    private static final PostcodesIndex defaultInstance;
    public static PostcodesIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public PostcodesIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_PostcodesIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_PostcodesIndex_fieldAccessorTable;
    }
    
    // repeated .PostcodeIndex postcodes = 1;
    public static final int POSTCODES_FIELD_NUMBER = 1;
    private java.util.List<net.osmand.binary.OsmandOdb.PostcodeIndex> postcodes_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.PostcodeIndex> getPostcodesList() {
      return postcodes_;
    }
    public int getPostcodesCount() { return postcodes_.size(); }
    public net.osmand.binary.OsmandOdb.PostcodeIndex getPostcodes(int index) {
      return postcodes_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      for (net.osmand.binary.OsmandOdb.PostcodeIndex element : getPostcodesList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (net.osmand.binary.OsmandOdb.PostcodeIndex element : getPostcodesList()) {
        output.writeMessage(1, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      for (net.osmand.binary.OsmandOdb.PostcodeIndex element : getPostcodesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.PostcodesIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.PostcodesIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.PostcodesIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.PostcodesIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.PostcodesIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.PostcodesIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.PostcodesIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.PostcodesIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.PostcodesIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.PostcodesIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.PostcodesIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.PostcodesIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.PostcodesIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.PostcodesIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.PostcodesIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.PostcodesIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.PostcodesIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.PostcodesIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.PostcodesIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.PostcodesIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.PostcodesIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.PostcodesIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.postcodes_ != java.util.Collections.EMPTY_LIST) {
          result.postcodes_ =
            java.util.Collections.unmodifiableList(result.postcodes_);
        }
        net.osmand.binary.OsmandOdb.PostcodesIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.PostcodesIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.PostcodesIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.PostcodesIndex other) {
        if (other == net.osmand.binary.OsmandOdb.PostcodesIndex.getDefaultInstance()) return this;
        if (!other.postcodes_.isEmpty()) {
          if (result.postcodes_.isEmpty()) {
            result.postcodes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.PostcodeIndex>();
          }
          result.postcodes_.addAll(other.postcodes_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              net.osmand.binary.OsmandOdb.PostcodeIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.PostcodeIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addPostcodes(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // repeated .PostcodeIndex postcodes = 1;
      public java.util.List<net.osmand.binary.OsmandOdb.PostcodeIndex> getPostcodesList() {
        return java.util.Collections.unmodifiableList(result.postcodes_);
      }
      public int getPostcodesCount() {
        return result.getPostcodesCount();
      }
      public net.osmand.binary.OsmandOdb.PostcodeIndex getPostcodes(int index) {
        return result.getPostcodes(index);
      }
      public Builder setPostcodes(int index, net.osmand.binary.OsmandOdb.PostcodeIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.postcodes_.set(index, value);
        return this;
      }
      public Builder setPostcodes(int index, net.osmand.binary.OsmandOdb.PostcodeIndex.Builder builderForValue) {
        result.postcodes_.set(index, builderForValue.build());
        return this;
      }
      public Builder addPostcodes(net.osmand.binary.OsmandOdb.PostcodeIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.postcodes_.isEmpty()) {
          result.postcodes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.PostcodeIndex>();
        }
        result.postcodes_.add(value);
        return this;
      }
      public Builder addPostcodes(net.osmand.binary.OsmandOdb.PostcodeIndex.Builder builderForValue) {
        if (result.postcodes_.isEmpty()) {
          result.postcodes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.PostcodeIndex>();
        }
        result.postcodes_.add(builderForValue.build());
        return this;
      }
      public Builder addAllPostcodes(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.PostcodeIndex> values) {
        if (result.postcodes_.isEmpty()) {
          result.postcodes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.PostcodeIndex>();
        }
        super.addAll(values, result.postcodes_);
        return this;
      }
      public Builder clearPostcodes() {
        result.postcodes_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:PostcodesIndex)
    }
    
    static {
      defaultInstance = new PostcodesIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:PostcodesIndex)
  }
  
  public static final class CityIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use CityIndex.newBuilder() to construct.
    private CityIndex() {
      initFields();
    }
    private CityIndex(boolean noInit) {}
    
    private static final CityIndex defaultInstance;
    public static CityIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public CityIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_CityIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_CityIndex_fieldAccessorTable;
    }
    
    // required uint32 city_type = 1;
    public static final int CITY_TYPE_FIELD_NUMBER = 1;
    private boolean hasCityType;
    private int cityType_ = 0;
    public boolean hasCityType() { return hasCityType; }
    public int getCityType() { return cityType_; }
    
    // required string name = 2;
    public static final int NAME_FIELD_NUMBER = 2;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional string name_en = 3;
    public static final int NAME_EN_FIELD_NUMBER = 3;
    private boolean hasNameEn;
    private java.lang.String nameEn_ = "";
    public boolean hasNameEn() { return hasNameEn; }
    public java.lang.String getNameEn() { return nameEn_; }
    
    // optional uint64 id = 4;
    public static final int ID_FIELD_NUMBER = 4;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // required fixed32 x = 5;
    public static final int X_FIELD_NUMBER = 5;
    private boolean hasX;
    private int x_ = 0;
    public boolean hasX() { return hasX; }
    public int getX() { return x_; }
    
    // required fixed32 y = 6;
    public static final int Y_FIELD_NUMBER = 6;
    private boolean hasY;
    private int y_ = 0;
    public boolean hasY() { return hasY; }
    public int getY() { return y_; }
    
    // optional .InteresectedStreets intersections = 14;
    public static final int INTERSECTIONS_FIELD_NUMBER = 14;
    private boolean hasIntersections;
    private net.osmand.binary.OsmandOdb.InteresectedStreets intersections_;
    public boolean hasIntersections() { return hasIntersections; }
    public net.osmand.binary.OsmandOdb.InteresectedStreets getIntersections() { return intersections_; }
    
    // repeated .StreetIndex streets = 18;
    public static final int STREETS_FIELD_NUMBER = 18;
    private java.util.List<net.osmand.binary.OsmandOdb.StreetIndex> streets_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.StreetIndex> getStreetsList() {
      return streets_;
    }
    public int getStreetsCount() { return streets_.size(); }
    public net.osmand.binary.OsmandOdb.StreetIndex getStreets(int index) {
      return streets_.get(index);
    }
    
    private void initFields() {
      intersections_ = net.osmand.binary.OsmandOdb.InteresectedStreets.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasCityType) return false;
      if (!hasName) return false;
      if (!hasX) return false;
      if (!hasY) return false;
      if (hasIntersections()) {
        if (!getIntersections().isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.StreetIndex element : getStreetsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasCityType()) {
        output.writeUInt32(1, getCityType());
      }
      if (hasName()) {
        output.writeString(2, getName());
      }
      if (hasNameEn()) {
        output.writeString(3, getNameEn());
      }
      if (hasId()) {
        output.writeUInt64(4, getId());
      }
      if (hasX()) {
        output.writeFixed32(5, getX());
      }
      if (hasY()) {
        output.writeFixed32(6, getY());
      }
      if (hasIntersections()) {
        output.writeMessage(14, getIntersections());
      }
      for (net.osmand.binary.OsmandOdb.StreetIndex element : getStreetsList()) {
        output.writeMessage(18, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasCityType()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, getCityType());
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(2, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(3, getNameEn());
      }
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(4, getId());
      }
      if (hasX()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(5, getX());
      }
      if (hasY()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(6, getY());
      }
      if (hasIntersections()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(14, getIntersections());
      }
      for (net.osmand.binary.OsmandOdb.StreetIndex element : getStreetsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(18, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.CityIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.CityIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.CityIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.CityIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.CityIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.CityIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.CityIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.CityIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.CityIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.CityIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.CityIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.CityIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.CityIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.streets_ != java.util.Collections.EMPTY_LIST) {
          result.streets_ =
            java.util.Collections.unmodifiableList(result.streets_);
        }
        net.osmand.binary.OsmandOdb.CityIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.CityIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.CityIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.CityIndex other) {
        if (other == net.osmand.binary.OsmandOdb.CityIndex.getDefaultInstance()) return this;
        if (other.hasCityType()) {
          setCityType(other.getCityType());
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasX()) {
          setX(other.getX());
        }
        if (other.hasY()) {
          setY(other.getY());
        }
        if (other.hasIntersections()) {
          mergeIntersections(other.getIntersections());
        }
        if (!other.streets_.isEmpty()) {
          if (result.streets_.isEmpty()) {
            result.streets_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIndex>();
          }
          result.streets_.addAll(other.streets_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setCityType(input.readUInt32());
              break;
            }
            case 18: {
              setName(input.readString());
              break;
            }
            case 26: {
              setNameEn(input.readString());
              break;
            }
            case 32: {
              setId(input.readUInt64());
              break;
            }
            case 45: {
              setX(input.readFixed32());
              break;
            }
            case 53: {
              setY(input.readFixed32());
              break;
            }
            case 114: {
              net.osmand.binary.OsmandOdb.InteresectedStreets.Builder subBuilder = net.osmand.binary.OsmandOdb.InteresectedStreets.newBuilder();
              if (hasIntersections()) {
                subBuilder.mergeFrom(getIntersections());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setIntersections(subBuilder.buildPartial());
              break;
            }
            case 146: {
              net.osmand.binary.OsmandOdb.StreetIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.StreetIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addStreets(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required uint32 city_type = 1;
      public boolean hasCityType() {
        return result.hasCityType();
      }
      public int getCityType() {
        return result.getCityType();
      }
      public Builder setCityType(int value) {
        result.hasCityType = true;
        result.cityType_ = value;
        return this;
      }
      public Builder clearCityType() {
        result.hasCityType = false;
        result.cityType_ = 0;
        return this;
      }
      
      // required string name = 2;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional string name_en = 3;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public java.lang.String getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = getDefaultInstance().getNameEn();
        return this;
      }
      
      // optional uint64 id = 4;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // required fixed32 x = 5;
      public boolean hasX() {
        return result.hasX();
      }
      public int getX() {
        return result.getX();
      }
      public Builder setX(int value) {
        result.hasX = true;
        result.x_ = value;
        return this;
      }
      public Builder clearX() {
        result.hasX = false;
        result.x_ = 0;
        return this;
      }
      
      // required fixed32 y = 6;
      public boolean hasY() {
        return result.hasY();
      }
      public int getY() {
        return result.getY();
      }
      public Builder setY(int value) {
        result.hasY = true;
        result.y_ = value;
        return this;
      }
      public Builder clearY() {
        result.hasY = false;
        result.y_ = 0;
        return this;
      }
      
      // optional .InteresectedStreets intersections = 14;
      public boolean hasIntersections() {
        return result.hasIntersections();
      }
      public net.osmand.binary.OsmandOdb.InteresectedStreets getIntersections() {
        return result.getIntersections();
      }
      public Builder setIntersections(net.osmand.binary.OsmandOdb.InteresectedStreets value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasIntersections = true;
        result.intersections_ = value;
        return this;
      }
      public Builder setIntersections(net.osmand.binary.OsmandOdb.InteresectedStreets.Builder builderForValue) {
        result.hasIntersections = true;
        result.intersections_ = builderForValue.build();
        return this;
      }
      public Builder mergeIntersections(net.osmand.binary.OsmandOdb.InteresectedStreets value) {
        if (result.hasIntersections() &&
            result.intersections_ != net.osmand.binary.OsmandOdb.InteresectedStreets.getDefaultInstance()) {
          result.intersections_ =
            net.osmand.binary.OsmandOdb.InteresectedStreets.newBuilder(result.intersections_).mergeFrom(value).buildPartial();
        } else {
          result.intersections_ = value;
        }
        result.hasIntersections = true;
        return this;
      }
      public Builder clearIntersections() {
        result.hasIntersections = false;
        result.intersections_ = net.osmand.binary.OsmandOdb.InteresectedStreets.getDefaultInstance();
        return this;
      }
      
      // repeated .StreetIndex streets = 18;
      public java.util.List<net.osmand.binary.OsmandOdb.StreetIndex> getStreetsList() {
        return java.util.Collections.unmodifiableList(result.streets_);
      }
      public int getStreetsCount() {
        return result.getStreetsCount();
      }
      public net.osmand.binary.OsmandOdb.StreetIndex getStreets(int index) {
        return result.getStreets(index);
      }
      public Builder setStreets(int index, net.osmand.binary.OsmandOdb.StreetIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.streets_.set(index, value);
        return this;
      }
      public Builder setStreets(int index, net.osmand.binary.OsmandOdb.StreetIndex.Builder builderForValue) {
        result.streets_.set(index, builderForValue.build());
        return this;
      }
      public Builder addStreets(net.osmand.binary.OsmandOdb.StreetIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.streets_.isEmpty()) {
          result.streets_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIndex>();
        }
        result.streets_.add(value);
        return this;
      }
      public Builder addStreets(net.osmand.binary.OsmandOdb.StreetIndex.Builder builderForValue) {
        if (result.streets_.isEmpty()) {
          result.streets_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIndex>();
        }
        result.streets_.add(builderForValue.build());
        return this;
      }
      public Builder addAllStreets(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.StreetIndex> values) {
        if (result.streets_.isEmpty()) {
          result.streets_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIndex>();
        }
        super.addAll(values, result.streets_);
        return this;
      }
      public Builder clearStreets() {
        result.streets_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:CityIndex)
    }
    
    static {
      defaultInstance = new CityIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:CityIndex)
  }
  
  public static final class InteresectedStreets extends
      com.google.protobuf.GeneratedMessage {
    // Use InteresectedStreets.newBuilder() to construct.
    private InteresectedStreets() {
      initFields();
    }
    private InteresectedStreets(boolean noInit) {}
    
    private static final InteresectedStreets defaultInstance;
    public static InteresectedStreets getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public InteresectedStreets getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_InteresectedStreets_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_InteresectedStreets_fieldAccessorTable;
    }
    
    // repeated .StreetIntersection intersections = 5;
    public static final int INTERSECTIONS_FIELD_NUMBER = 5;
    private java.util.List<net.osmand.binary.OsmandOdb.StreetIntersection> intersections_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.StreetIntersection> getIntersectionsList() {
      return intersections_;
    }
    public int getIntersectionsCount() { return intersections_.size(); }
    public net.osmand.binary.OsmandOdb.StreetIntersection getIntersections(int index) {
      return intersections_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      for (net.osmand.binary.OsmandOdb.StreetIntersection element : getIntersectionsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (net.osmand.binary.OsmandOdb.StreetIntersection element : getIntersectionsList()) {
        output.writeMessage(5, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      for (net.osmand.binary.OsmandOdb.StreetIntersection element : getIntersectionsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.InteresectedStreets parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.InteresectedStreets parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.InteresectedStreets parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.InteresectedStreets parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.InteresectedStreets parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.InteresectedStreets parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.InteresectedStreets parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.InteresectedStreets parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.InteresectedStreets parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.InteresectedStreets parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.InteresectedStreets prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.InteresectedStreets result;
      
      // Construct using net.osmand.binary.OsmandOdb.InteresectedStreets.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.InteresectedStreets();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.InteresectedStreets internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.InteresectedStreets();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.InteresectedStreets.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.InteresectedStreets getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.InteresectedStreets.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.InteresectedStreets build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.InteresectedStreets buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.InteresectedStreets buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.intersections_ != java.util.Collections.EMPTY_LIST) {
          result.intersections_ =
            java.util.Collections.unmodifiableList(result.intersections_);
        }
        net.osmand.binary.OsmandOdb.InteresectedStreets returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.InteresectedStreets) {
          return mergeFrom((net.osmand.binary.OsmandOdb.InteresectedStreets)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.InteresectedStreets other) {
        if (other == net.osmand.binary.OsmandOdb.InteresectedStreets.getDefaultInstance()) return this;
        if (!other.intersections_.isEmpty()) {
          if (result.intersections_.isEmpty()) {
            result.intersections_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIntersection>();
          }
          result.intersections_.addAll(other.intersections_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 42: {
              net.osmand.binary.OsmandOdb.StreetIntersection.Builder subBuilder = net.osmand.binary.OsmandOdb.StreetIntersection.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addIntersections(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // repeated .StreetIntersection intersections = 5;
      public java.util.List<net.osmand.binary.OsmandOdb.StreetIntersection> getIntersectionsList() {
        return java.util.Collections.unmodifiableList(result.intersections_);
      }
      public int getIntersectionsCount() {
        return result.getIntersectionsCount();
      }
      public net.osmand.binary.OsmandOdb.StreetIntersection getIntersections(int index) {
        return result.getIntersections(index);
      }
      public Builder setIntersections(int index, net.osmand.binary.OsmandOdb.StreetIntersection value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.intersections_.set(index, value);
        return this;
      }
      public Builder setIntersections(int index, net.osmand.binary.OsmandOdb.StreetIntersection.Builder builderForValue) {
        result.intersections_.set(index, builderForValue.build());
        return this;
      }
      public Builder addIntersections(net.osmand.binary.OsmandOdb.StreetIntersection value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.intersections_.isEmpty()) {
          result.intersections_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIntersection>();
        }
        result.intersections_.add(value);
        return this;
      }
      public Builder addIntersections(net.osmand.binary.OsmandOdb.StreetIntersection.Builder builderForValue) {
        if (result.intersections_.isEmpty()) {
          result.intersections_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIntersection>();
        }
        result.intersections_.add(builderForValue.build());
        return this;
      }
      public Builder addAllIntersections(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.StreetIntersection> values) {
        if (result.intersections_.isEmpty()) {
          result.intersections_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIntersection>();
        }
        super.addAll(values, result.intersections_);
        return this;
      }
      public Builder clearIntersections() {
        result.intersections_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:InteresectedStreets)
    }
    
    static {
      defaultInstance = new InteresectedStreets(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:InteresectedStreets)
  }
  
  public static final class StreetIntersection extends
      com.google.protobuf.GeneratedMessage {
    // Use StreetIntersection.newBuilder() to construct.
    private StreetIntersection() {
      initFields();
    }
    private StreetIntersection(boolean noInit) {}
    
    private static final StreetIntersection defaultInstance;
    public static StreetIntersection getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public StreetIntersection getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_StreetIntersection_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_StreetIntersection_fieldAccessorTable;
    }
    
    // required uint32 intersectedStreet1 = 2;
    public static final int INTERSECTEDSTREET1_FIELD_NUMBER = 2;
    private boolean hasIntersectedStreet1;
    private int intersectedStreet1_ = 0;
    public boolean hasIntersectedStreet1() { return hasIntersectedStreet1; }
    public int getIntersectedStreet1() { return intersectedStreet1_; }
    
    // required uint32 intersectedStreet2 = 3;
    public static final int INTERSECTEDSTREET2_FIELD_NUMBER = 3;
    private boolean hasIntersectedStreet2;
    private int intersectedStreet2_ = 0;
    public boolean hasIntersectedStreet2() { return hasIntersectedStreet2; }
    public int getIntersectedStreet2() { return intersectedStreet2_; }
    
    // required sint32 intersectedX = 4;
    public static final int INTERSECTEDX_FIELD_NUMBER = 4;
    private boolean hasIntersectedX;
    private int intersectedX_ = 0;
    public boolean hasIntersectedX() { return hasIntersectedX; }
    public int getIntersectedX() { return intersectedX_; }
    
    // required sint32 intersectedY = 5;
    public static final int INTERSECTEDY_FIELD_NUMBER = 5;
    private boolean hasIntersectedY;
    private int intersectedY_ = 0;
    public boolean hasIntersectedY() { return hasIntersectedY; }
    public int getIntersectedY() { return intersectedY_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasIntersectedStreet1) return false;
      if (!hasIntersectedStreet2) return false;
      if (!hasIntersectedX) return false;
      if (!hasIntersectedY) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasIntersectedStreet1()) {
        output.writeUInt32(2, getIntersectedStreet1());
      }
      if (hasIntersectedStreet2()) {
        output.writeUInt32(3, getIntersectedStreet2());
      }
      if (hasIntersectedX()) {
        output.writeSInt32(4, getIntersectedX());
      }
      if (hasIntersectedY()) {
        output.writeSInt32(5, getIntersectedY());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasIntersectedStreet1()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, getIntersectedStreet1());
      }
      if (hasIntersectedStreet2()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, getIntersectedStreet2());
      }
      if (hasIntersectedX()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(4, getIntersectedX());
      }
      if (hasIntersectedY()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(5, getIntersectedY());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIntersection parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.StreetIntersection prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.StreetIntersection result;
      
      // Construct using net.osmand.binary.OsmandOdb.StreetIntersection.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.StreetIntersection();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.StreetIntersection internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.StreetIntersection();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.StreetIntersection.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.StreetIntersection getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.StreetIntersection.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.StreetIntersection build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.StreetIntersection buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.StreetIntersection buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.StreetIntersection returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.StreetIntersection) {
          return mergeFrom((net.osmand.binary.OsmandOdb.StreetIntersection)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.StreetIntersection other) {
        if (other == net.osmand.binary.OsmandOdb.StreetIntersection.getDefaultInstance()) return this;
        if (other.hasIntersectedStreet1()) {
          setIntersectedStreet1(other.getIntersectedStreet1());
        }
        if (other.hasIntersectedStreet2()) {
          setIntersectedStreet2(other.getIntersectedStreet2());
        }
        if (other.hasIntersectedX()) {
          setIntersectedX(other.getIntersectedX());
        }
        if (other.hasIntersectedY()) {
          setIntersectedY(other.getIntersectedY());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 16: {
              setIntersectedStreet1(input.readUInt32());
              break;
            }
            case 24: {
              setIntersectedStreet2(input.readUInt32());
              break;
            }
            case 32: {
              setIntersectedX(input.readSInt32());
              break;
            }
            case 40: {
              setIntersectedY(input.readSInt32());
              break;
            }
          }
        }
      }
      
      
      // required uint32 intersectedStreet1 = 2;
      public boolean hasIntersectedStreet1() {
        return result.hasIntersectedStreet1();
      }
      public int getIntersectedStreet1() {
        return result.getIntersectedStreet1();
      }
      public Builder setIntersectedStreet1(int value) {
        result.hasIntersectedStreet1 = true;
        result.intersectedStreet1_ = value;
        return this;
      }
      public Builder clearIntersectedStreet1() {
        result.hasIntersectedStreet1 = false;
        result.intersectedStreet1_ = 0;
        return this;
      }
      
      // required uint32 intersectedStreet2 = 3;
      public boolean hasIntersectedStreet2() {
        return result.hasIntersectedStreet2();
      }
      public int getIntersectedStreet2() {
        return result.getIntersectedStreet2();
      }
      public Builder setIntersectedStreet2(int value) {
        result.hasIntersectedStreet2 = true;
        result.intersectedStreet2_ = value;
        return this;
      }
      public Builder clearIntersectedStreet2() {
        result.hasIntersectedStreet2 = false;
        result.intersectedStreet2_ = 0;
        return this;
      }
      
      // required sint32 intersectedX = 4;
      public boolean hasIntersectedX() {
        return result.hasIntersectedX();
      }
      public int getIntersectedX() {
        return result.getIntersectedX();
      }
      public Builder setIntersectedX(int value) {
        result.hasIntersectedX = true;
        result.intersectedX_ = value;
        return this;
      }
      public Builder clearIntersectedX() {
        result.hasIntersectedX = false;
        result.intersectedX_ = 0;
        return this;
      }
      
      // required sint32 intersectedY = 5;
      public boolean hasIntersectedY() {
        return result.hasIntersectedY();
      }
      public int getIntersectedY() {
        return result.getIntersectedY();
      }
      public Builder setIntersectedY(int value) {
        result.hasIntersectedY = true;
        result.intersectedY_ = value;
        return this;
      }
      public Builder clearIntersectedY() {
        result.hasIntersectedY = false;
        result.intersectedY_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:StreetIntersection)
    }
    
    static {
      defaultInstance = new StreetIntersection(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:StreetIntersection)
  }
  
  public static final class PostcodeIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use PostcodeIndex.newBuilder() to construct.
    private PostcodeIndex() {
      initFields();
    }
    private PostcodeIndex(boolean noInit) {}
    
    private static final PostcodeIndex defaultInstance;
    public static PostcodeIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public PostcodeIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_PostcodeIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_PostcodeIndex_fieldAccessorTable;
    }
    
    // required string postcode = 1;
    public static final int POSTCODE_FIELD_NUMBER = 1;
    private boolean hasPostcode;
    private java.lang.String postcode_ = "";
    public boolean hasPostcode() { return hasPostcode; }
    public java.lang.String getPostcode() { return postcode_; }
    
    // required fixed32 x = 2;
    public static final int X_FIELD_NUMBER = 2;
    private boolean hasX;
    private int x_ = 0;
    public boolean hasX() { return hasX; }
    public int getX() { return x_; }
    
    // required fixed32 y = 3;
    public static final int Y_FIELD_NUMBER = 3;
    private boolean hasY;
    private int y_ = 0;
    public boolean hasY() { return hasY; }
    public int getY() { return y_; }
    
    // repeated .StreetIndex streets = 5;
    public static final int STREETS_FIELD_NUMBER = 5;
    private java.util.List<net.osmand.binary.OsmandOdb.StreetIndex> streets_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.StreetIndex> getStreetsList() {
      return streets_;
    }
    public int getStreetsCount() { return streets_.size(); }
    public net.osmand.binary.OsmandOdb.StreetIndex getStreets(int index) {
      return streets_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasPostcode) return false;
      if (!hasX) return false;
      if (!hasY) return false;
      for (net.osmand.binary.OsmandOdb.StreetIndex element : getStreetsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasPostcode()) {
        output.writeString(1, getPostcode());
      }
      if (hasX()) {
        output.writeFixed32(2, getX());
      }
      if (hasY()) {
        output.writeFixed32(3, getY());
      }
      for (net.osmand.binary.OsmandOdb.StreetIndex element : getStreetsList()) {
        output.writeMessage(5, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasPostcode()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getPostcode());
      }
      if (hasX()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(2, getX());
      }
      if (hasY()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(3, getY());
      }
      for (net.osmand.binary.OsmandOdb.StreetIndex element : getStreetsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.PostcodeIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.PostcodeIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.PostcodeIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.PostcodeIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.PostcodeIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.PostcodeIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.PostcodeIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.PostcodeIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.PostcodeIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.PostcodeIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.PostcodeIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.PostcodeIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.PostcodeIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.PostcodeIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.PostcodeIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.PostcodeIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.PostcodeIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.PostcodeIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.PostcodeIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.PostcodeIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.PostcodeIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.PostcodeIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.streets_ != java.util.Collections.EMPTY_LIST) {
          result.streets_ =
            java.util.Collections.unmodifiableList(result.streets_);
        }
        net.osmand.binary.OsmandOdb.PostcodeIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.PostcodeIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.PostcodeIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.PostcodeIndex other) {
        if (other == net.osmand.binary.OsmandOdb.PostcodeIndex.getDefaultInstance()) return this;
        if (other.hasPostcode()) {
          setPostcode(other.getPostcode());
        }
        if (other.hasX()) {
          setX(other.getX());
        }
        if (other.hasY()) {
          setY(other.getY());
        }
        if (!other.streets_.isEmpty()) {
          if (result.streets_.isEmpty()) {
            result.streets_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIndex>();
          }
          result.streets_.addAll(other.streets_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setPostcode(input.readString());
              break;
            }
            case 21: {
              setX(input.readFixed32());
              break;
            }
            case 29: {
              setY(input.readFixed32());
              break;
            }
            case 42: {
              net.osmand.binary.OsmandOdb.StreetIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.StreetIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addStreets(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required string postcode = 1;
      public boolean hasPostcode() {
        return result.hasPostcode();
      }
      public java.lang.String getPostcode() {
        return result.getPostcode();
      }
      public Builder setPostcode(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasPostcode = true;
        result.postcode_ = value;
        return this;
      }
      public Builder clearPostcode() {
        result.hasPostcode = false;
        result.postcode_ = getDefaultInstance().getPostcode();
        return this;
      }
      
      // required fixed32 x = 2;
      public boolean hasX() {
        return result.hasX();
      }
      public int getX() {
        return result.getX();
      }
      public Builder setX(int value) {
        result.hasX = true;
        result.x_ = value;
        return this;
      }
      public Builder clearX() {
        result.hasX = false;
        result.x_ = 0;
        return this;
      }
      
      // required fixed32 y = 3;
      public boolean hasY() {
        return result.hasY();
      }
      public int getY() {
        return result.getY();
      }
      public Builder setY(int value) {
        result.hasY = true;
        result.y_ = value;
        return this;
      }
      public Builder clearY() {
        result.hasY = false;
        result.y_ = 0;
        return this;
      }
      
      // repeated .StreetIndex streets = 5;
      public java.util.List<net.osmand.binary.OsmandOdb.StreetIndex> getStreetsList() {
        return java.util.Collections.unmodifiableList(result.streets_);
      }
      public int getStreetsCount() {
        return result.getStreetsCount();
      }
      public net.osmand.binary.OsmandOdb.StreetIndex getStreets(int index) {
        return result.getStreets(index);
      }
      public Builder setStreets(int index, net.osmand.binary.OsmandOdb.StreetIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.streets_.set(index, value);
        return this;
      }
      public Builder setStreets(int index, net.osmand.binary.OsmandOdb.StreetIndex.Builder builderForValue) {
        result.streets_.set(index, builderForValue.build());
        return this;
      }
      public Builder addStreets(net.osmand.binary.OsmandOdb.StreetIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.streets_.isEmpty()) {
          result.streets_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIndex>();
        }
        result.streets_.add(value);
        return this;
      }
      public Builder addStreets(net.osmand.binary.OsmandOdb.StreetIndex.Builder builderForValue) {
        if (result.streets_.isEmpty()) {
          result.streets_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIndex>();
        }
        result.streets_.add(builderForValue.build());
        return this;
      }
      public Builder addAllStreets(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.StreetIndex> values) {
        if (result.streets_.isEmpty()) {
          result.streets_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.StreetIndex>();
        }
        super.addAll(values, result.streets_);
        return this;
      }
      public Builder clearStreets() {
        result.streets_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:PostcodeIndex)
    }
    
    static {
      defaultInstance = new PostcodeIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:PostcodeIndex)
  }
  
  public static final class StreetIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use StreetIndex.newBuilder() to construct.
    private StreetIndex() {
      initFields();
    }
    private StreetIndex(boolean noInit) {}
    
    private static final StreetIndex defaultInstance;
    public static StreetIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public StreetIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_StreetIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_StreetIndex_fieldAccessorTable;
    }
    
    // required string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional string name_en = 2;
    public static final int NAME_EN_FIELD_NUMBER = 2;
    private boolean hasNameEn;
    private java.lang.String nameEn_ = "";
    public boolean hasNameEn() { return hasNameEn; }
    public java.lang.String getNameEn() { return nameEn_; }
    
    // required sint32 x = 3;
    public static final int X_FIELD_NUMBER = 3;
    private boolean hasX;
    private int x_ = 0;
    public boolean hasX() { return hasX; }
    public int getX() { return x_; }
    
    // required sint32 y = 4;
    public static final int Y_FIELD_NUMBER = 4;
    private boolean hasY;
    private int y_ = 0;
    public boolean hasY() { return hasY; }
    public int getY() { return y_; }
    
    // optional uint64 id = 6;
    public static final int ID_FIELD_NUMBER = 6;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // repeated .BuildingIndex buildings = 18;
    public static final int BUILDINGS_FIELD_NUMBER = 18;
    private java.util.List<net.osmand.binary.OsmandOdb.BuildingIndex> buildings_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.BuildingIndex> getBuildingsList() {
      return buildings_;
    }
    public int getBuildingsCount() { return buildings_.size(); }
    public net.osmand.binary.OsmandOdb.BuildingIndex getBuildings(int index) {
      return buildings_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasName) return false;
      if (!hasX) return false;
      if (!hasY) return false;
      for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(1, getName());
      }
      if (hasNameEn()) {
        output.writeString(2, getNameEn());
      }
      if (hasX()) {
        output.writeSInt32(3, getX());
      }
      if (hasY()) {
        output.writeSInt32(4, getY());
      }
      if (hasId()) {
        output.writeUInt64(6, getId());
      }
      for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) {
        output.writeMessage(18, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(2, getNameEn());
      }
      if (hasX()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(3, getX());
      }
      if (hasY()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(4, getY());
      }
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(6, getId());
      }
      for (net.osmand.binary.OsmandOdb.BuildingIndex element : getBuildingsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(18, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.StreetIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.StreetIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.StreetIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.StreetIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.StreetIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.StreetIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.StreetIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.StreetIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.StreetIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.StreetIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.StreetIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.StreetIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.StreetIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.buildings_ != java.util.Collections.EMPTY_LIST) {
          result.buildings_ =
            java.util.Collections.unmodifiableList(result.buildings_);
        }
        net.osmand.binary.OsmandOdb.StreetIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.StreetIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.StreetIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.StreetIndex other) {
        if (other == net.osmand.binary.OsmandOdb.StreetIndex.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasX()) {
          setX(other.getX());
        }
        if (other.hasY()) {
          setY(other.getY());
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (!other.buildings_.isEmpty()) {
          if (result.buildings_.isEmpty()) {
            result.buildings_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.BuildingIndex>();
          }
          result.buildings_.addAll(other.buildings_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setName(input.readString());
              break;
            }
            case 18: {
              setNameEn(input.readString());
              break;
            }
            case 24: {
              setX(input.readSInt32());
              break;
            }
            case 32: {
              setY(input.readSInt32());
              break;
            }
            case 48: {
              setId(input.readUInt64());
              break;
            }
            case 146: {
              net.osmand.binary.OsmandOdb.BuildingIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.BuildingIndex.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addBuildings(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required string name = 1;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional string name_en = 2;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public java.lang.String getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = getDefaultInstance().getNameEn();
        return this;
      }
      
      // required sint32 x = 3;
      public boolean hasX() {
        return result.hasX();
      }
      public int getX() {
        return result.getX();
      }
      public Builder setX(int value) {
        result.hasX = true;
        result.x_ = value;
        return this;
      }
      public Builder clearX() {
        result.hasX = false;
        result.x_ = 0;
        return this;
      }
      
      // required sint32 y = 4;
      public boolean hasY() {
        return result.hasY();
      }
      public int getY() {
        return result.getY();
      }
      public Builder setY(int value) {
        result.hasY = true;
        result.y_ = value;
        return this;
      }
      public Builder clearY() {
        result.hasY = false;
        result.y_ = 0;
        return this;
      }
      
      // optional uint64 id = 6;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // repeated .BuildingIndex buildings = 18;
      public java.util.List<net.osmand.binary.OsmandOdb.BuildingIndex> getBuildingsList() {
        return java.util.Collections.unmodifiableList(result.buildings_);
      }
      public int getBuildingsCount() {
        return result.getBuildingsCount();
      }
      public net.osmand.binary.OsmandOdb.BuildingIndex getBuildings(int index) {
        return result.getBuildings(index);
      }
      public Builder setBuildings(int index, net.osmand.binary.OsmandOdb.BuildingIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.buildings_.set(index, value);
        return this;
      }
      public Builder setBuildings(int index, net.osmand.binary.OsmandOdb.BuildingIndex.Builder builderForValue) {
        result.buildings_.set(index, builderForValue.build());
        return this;
      }
      public Builder addBuildings(net.osmand.binary.OsmandOdb.BuildingIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.buildings_.isEmpty()) {
          result.buildings_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.BuildingIndex>();
        }
        result.buildings_.add(value);
        return this;
      }
      public Builder addBuildings(net.osmand.binary.OsmandOdb.BuildingIndex.Builder builderForValue) {
        if (result.buildings_.isEmpty()) {
          result.buildings_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.BuildingIndex>();
        }
        result.buildings_.add(builderForValue.build());
        return this;
      }
      public Builder addAllBuildings(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.BuildingIndex> values) {
        if (result.buildings_.isEmpty()) {
          result.buildings_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.BuildingIndex>();
        }
        super.addAll(values, result.buildings_);
        return this;
      }
      public Builder clearBuildings() {
        result.buildings_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:StreetIndex)
    }
    
    static {
      defaultInstance = new StreetIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:StreetIndex)
  }
  
  public static final class BuildingIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use BuildingIndex.newBuilder() to construct.
    private BuildingIndex() {
      initFields();
    }
    private BuildingIndex(boolean noInit) {}
    
    private static final BuildingIndex defaultInstance;
    public static BuildingIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public BuildingIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_BuildingIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_BuildingIndex_fieldAccessorTable;
    }
    
    // required string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional string name_en = 2;
    public static final int NAME_EN_FIELD_NUMBER = 2;
    private boolean hasNameEn;
    private java.lang.String nameEn_ = "";
    public boolean hasNameEn() { return hasNameEn; }
    public java.lang.String getNameEn() { return nameEn_; }
    
    // optional uint64 id = 5;
    public static final int ID_FIELD_NUMBER = 5;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // optional string postcode = 6;
    public static final int POSTCODE_FIELD_NUMBER = 6;
    private boolean hasPostcode;
    private java.lang.String postcode_ = "";
    public boolean hasPostcode() { return hasPostcode; }
    public java.lang.String getPostcode() { return postcode_; }
    
    // required sint32 x = 3;
    public static final int X_FIELD_NUMBER = 3;
    private boolean hasX;
    private int x_ = 0;
    public boolean hasX() { return hasX; }
    public int getX() { return x_; }
    
    // required sint32 y = 4;
    public static final int Y_FIELD_NUMBER = 4;
    private boolean hasY;
    private int y_ = 0;
    public boolean hasY() { return hasY; }
    public int getY() { return y_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasName) return false;
      if (!hasX) return false;
      if (!hasY) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(1, getName());
      }
      if (hasNameEn()) {
        output.writeString(2, getNameEn());
      }
      if (hasX()) {
        output.writeSInt32(3, getX());
      }
      if (hasY()) {
        output.writeSInt32(4, getY());
      }
      if (hasId()) {
        output.writeUInt64(5, getId());
      }
      if (hasPostcode()) {
        output.writeString(6, getPostcode());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(2, getNameEn());
      }
      if (hasX()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(3, getX());
      }
      if (hasY()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(4, getY());
      }
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(5, getId());
      }
      if (hasPostcode()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(6, getPostcode());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.BuildingIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.BuildingIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.BuildingIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.BuildingIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.BuildingIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.BuildingIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.BuildingIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.BuildingIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.BuildingIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.BuildingIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.BuildingIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.BuildingIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.BuildingIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.BuildingIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.BuildingIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.BuildingIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.BuildingIndex other) {
        if (other == net.osmand.binary.OsmandOdb.BuildingIndex.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasPostcode()) {
          setPostcode(other.getPostcode());
        }
        if (other.hasX()) {
          setX(other.getX());
        }
        if (other.hasY()) {
          setY(other.getY());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setName(input.readString());
              break;
            }
            case 18: {
              setNameEn(input.readString());
              break;
            }
            case 24: {
              setX(input.readSInt32());
              break;
            }
            case 32: {
              setY(input.readSInt32());
              break;
            }
            case 40: {
              setId(input.readUInt64());
              break;
            }
            case 50: {
              setPostcode(input.readString());
              break;
            }
          }
        }
      }
      
      
      // required string name = 1;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional string name_en = 2;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public java.lang.String getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = getDefaultInstance().getNameEn();
        return this;
      }
      
      // optional uint64 id = 5;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // optional string postcode = 6;
      public boolean hasPostcode() {
        return result.hasPostcode();
      }
      public java.lang.String getPostcode() {
        return result.getPostcode();
      }
      public Builder setPostcode(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasPostcode = true;
        result.postcode_ = value;
        return this;
      }
      public Builder clearPostcode() {
        result.hasPostcode = false;
        result.postcode_ = getDefaultInstance().getPostcode();
        return this;
      }
      
      // required sint32 x = 3;
      public boolean hasX() {
        return result.hasX();
      }
      public int getX() {
        return result.getX();
      }
      public Builder setX(int value) {
        result.hasX = true;
        result.x_ = value;
        return this;
      }
      public Builder clearX() {
        result.hasX = false;
        result.x_ = 0;
        return this;
      }
      
      // required sint32 y = 4;
      public boolean hasY() {
        return result.hasY();
      }
      public int getY() {
        return result.getY();
      }
      public Builder setY(int value) {
        result.hasY = true;
        result.y_ = value;
        return this;
      }
      public Builder clearY() {
        result.hasY = false;
        result.y_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:BuildingIndex)
    }
    
    static {
      defaultInstance = new BuildingIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:BuildingIndex)
  }
  
  public static final class TransportRoutes extends
      com.google.protobuf.GeneratedMessage {
    // Use TransportRoutes.newBuilder() to construct.
    private TransportRoutes() {
      initFields();
    }
    private TransportRoutes(boolean noInit) {}
    
    private static final TransportRoutes defaultInstance;
    public static TransportRoutes getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public TransportRoutes getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportRoutes_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportRoutes_fieldAccessorTable;
    }
    
    // repeated .TransportRoute routes = 6;
    public static final int ROUTES_FIELD_NUMBER = 6;
    private java.util.List<net.osmand.binary.OsmandOdb.TransportRoute> routes_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.TransportRoute> getRoutesList() {
      return routes_;
    }
    public int getRoutesCount() { return routes_.size(); }
    public net.osmand.binary.OsmandOdb.TransportRoute getRoutes(int index) {
      return routes_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      for (net.osmand.binary.OsmandOdb.TransportRoute element : getRoutesList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (net.osmand.binary.OsmandOdb.TransportRoute element : getRoutesList()) {
        output.writeMessage(6, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      for (net.osmand.binary.OsmandOdb.TransportRoute element : getRoutesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoutes parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportRoutes prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.TransportRoutes result;
      
      // Construct using net.osmand.binary.OsmandOdb.TransportRoutes.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.TransportRoutes();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.TransportRoutes internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.TransportRoutes();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.TransportRoutes.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportRoutes getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.TransportRoutes build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.TransportRoutes buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportRoutes buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.routes_ != java.util.Collections.EMPTY_LIST) {
          result.routes_ =
            java.util.Collections.unmodifiableList(result.routes_);
        }
        net.osmand.binary.OsmandOdb.TransportRoutes returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.TransportRoutes) {
          return mergeFrom((net.osmand.binary.OsmandOdb.TransportRoutes)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportRoutes other) {
        if (other == net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance()) return this;
        if (!other.routes_.isEmpty()) {
          if (result.routes_.isEmpty()) {
            result.routes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRoute>();
          }
          result.routes_.addAll(other.routes_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 50: {
              net.osmand.binary.OsmandOdb.TransportRoute.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportRoute.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addRoutes(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // repeated .TransportRoute routes = 6;
      public java.util.List<net.osmand.binary.OsmandOdb.TransportRoute> getRoutesList() {
        return java.util.Collections.unmodifiableList(result.routes_);
      }
      public int getRoutesCount() {
        return result.getRoutesCount();
      }
      public net.osmand.binary.OsmandOdb.TransportRoute getRoutes(int index) {
        return result.getRoutes(index);
      }
      public Builder setRoutes(int index, net.osmand.binary.OsmandOdb.TransportRoute value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.routes_.set(index, value);
        return this;
      }
      public Builder setRoutes(int index, net.osmand.binary.OsmandOdb.TransportRoute.Builder builderForValue) {
        result.routes_.set(index, builderForValue.build());
        return this;
      }
      public Builder addRoutes(net.osmand.binary.OsmandOdb.TransportRoute value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.routes_.isEmpty()) {
          result.routes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRoute>();
        }
        result.routes_.add(value);
        return this;
      }
      public Builder addRoutes(net.osmand.binary.OsmandOdb.TransportRoute.Builder builderForValue) {
        if (result.routes_.isEmpty()) {
          result.routes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRoute>();
        }
        result.routes_.add(builderForValue.build());
        return this;
      }
      public Builder addAllRoutes(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.TransportRoute> values) {
        if (result.routes_.isEmpty()) {
          result.routes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRoute>();
        }
        super.addAll(values, result.routes_);
        return this;
      }
      public Builder clearRoutes() {
        result.routes_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:TransportRoutes)
    }
    
    static {
      defaultInstance = new TransportRoutes(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:TransportRoutes)
  }
  
  public static final class TransportRoute extends
      com.google.protobuf.GeneratedMessage {
    // Use TransportRoute.newBuilder() to construct.
    private TransportRoute() {
      initFields();
    }
    private TransportRoute(boolean noInit) {}
    
    private static final TransportRoute defaultInstance;
    public static TransportRoute getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public TransportRoute getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportRoute_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportRoute_fieldAccessorTable;
    }
    
    // required uint64 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // optional uint32 type = 3;
    public static final int TYPE_FIELD_NUMBER = 3;
    private boolean hasType;
    private int type_ = 0;
    public boolean hasType() { return hasType; }
    public int getType() { return type_; }
    
    // optional uint32 operator = 4;
    public static final int OPERATOR_FIELD_NUMBER = 4;
    private boolean hasOperator;
    private int operator_ = 0;
    public boolean hasOperator() { return hasOperator; }
    public int getOperator() { return operator_; }
    
    // optional string ref = 5;
    public static final int REF_FIELD_NUMBER = 5;
    private boolean hasRef;
    private java.lang.String ref_ = "";
    public boolean hasRef() { return hasRef; }
    public java.lang.String getRef() { return ref_; }
    
    // optional uint32 name = 6;
    public static final int NAME_FIELD_NUMBER = 6;
    private boolean hasName;
    private int name_ = 0;
    public boolean hasName() { return hasName; }
    public int getName() { return name_; }
    
    // optional uint32 name_en = 7;
    public static final int NAME_EN_FIELD_NUMBER = 7;
    private boolean hasNameEn;
    private int nameEn_ = 0;
    public boolean hasNameEn() { return hasNameEn; }
    public int getNameEn() { return nameEn_; }
    
    // optional uint32 distance = 8;
    public static final int DISTANCE_FIELD_NUMBER = 8;
    private boolean hasDistance;
    private int distance_ = 0;
    public boolean hasDistance() { return hasDistance; }
    public int getDistance() { return distance_; }
    
    // repeated .TransportRouteStop directStops = 15;
    public static final int DIRECTSTOPS_FIELD_NUMBER = 15;
    private java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> directStops_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> getDirectStopsList() {
      return directStops_;
    }
    public int getDirectStopsCount() { return directStops_.size(); }
    public net.osmand.binary.OsmandOdb.TransportRouteStop getDirectStops(int index) {
      return directStops_.get(index);
    }
    
    // repeated .TransportRouteStop reverseStops = 16;
    public static final int REVERSESTOPS_FIELD_NUMBER = 16;
    private java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> reverseStops_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> getReverseStopsList() {
      return reverseStops_;
    }
    public int getReverseStopsCount() { return reverseStops_.size(); }
    public net.osmand.binary.OsmandOdb.TransportRouteStop getReverseStops(int index) {
      return reverseStops_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasId) return false;
      for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getDirectStopsList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getReverseStopsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasId()) {
        output.writeUInt64(1, getId());
      }
      if (hasType()) {
        output.writeUInt32(3, getType());
      }
      if (hasOperator()) {
        output.writeUInt32(4, getOperator());
      }
      if (hasRef()) {
        output.writeString(5, getRef());
      }
      if (hasName()) {
        output.writeUInt32(6, getName());
      }
      if (hasNameEn()) {
        output.writeUInt32(7, getNameEn());
      }
      if (hasDistance()) {
        output.writeUInt32(8, getDistance());
      }
      for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getDirectStopsList()) {
        output.writeMessage(15, element);
      }
      for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getReverseStopsList()) {
        output.writeMessage(16, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(1, getId());
      }
      if (hasType()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, getType());
      }
      if (hasOperator()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, getOperator());
      }
      if (hasRef()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(5, getRef());
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(6, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(7, getNameEn());
      }
      if (hasDistance()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(8, getDistance());
      }
      for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getDirectStopsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(15, element);
      }
      for (net.osmand.binary.OsmandOdb.TransportRouteStop element : getReverseStopsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(16, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRoute parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportRoute prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.TransportRoute result;
      
      // Construct using net.osmand.binary.OsmandOdb.TransportRoute.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.TransportRoute();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.TransportRoute internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.TransportRoute();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.TransportRoute.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportRoute getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.TransportRoute.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.TransportRoute build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.TransportRoute buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportRoute buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.directStops_ != java.util.Collections.EMPTY_LIST) {
          result.directStops_ =
            java.util.Collections.unmodifiableList(result.directStops_);
        }
        if (result.reverseStops_ != java.util.Collections.EMPTY_LIST) {
          result.reverseStops_ =
            java.util.Collections.unmodifiableList(result.reverseStops_);
        }
        net.osmand.binary.OsmandOdb.TransportRoute returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.TransportRoute) {
          return mergeFrom((net.osmand.binary.OsmandOdb.TransportRoute)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportRoute other) {
        if (other == net.osmand.binary.OsmandOdb.TransportRoute.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasType()) {
          setType(other.getType());
        }
        if (other.hasOperator()) {
          setOperator(other.getOperator());
        }
        if (other.hasRef()) {
          setRef(other.getRef());
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasDistance()) {
          setDistance(other.getDistance());
        }
        if (!other.directStops_.isEmpty()) {
          if (result.directStops_.isEmpty()) {
            result.directStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
          }
          result.directStops_.addAll(other.directStops_);
        }
        if (!other.reverseStops_.isEmpty()) {
          if (result.reverseStops_.isEmpty()) {
            result.reverseStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
          }
          result.reverseStops_.addAll(other.reverseStops_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setId(input.readUInt64());
              break;
            }
            case 24: {
              setType(input.readUInt32());
              break;
            }
            case 32: {
              setOperator(input.readUInt32());
              break;
            }
            case 42: {
              setRef(input.readString());
              break;
            }
            case 48: {
              setName(input.readUInt32());
              break;
            }
            case 56: {
              setNameEn(input.readUInt32());
              break;
            }
            case 64: {
              setDistance(input.readUInt32());
              break;
            }
            case 122: {
              net.osmand.binary.OsmandOdb.TransportRouteStop.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportRouteStop.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addDirectStops(subBuilder.buildPartial());
              break;
            }
            case 130: {
              net.osmand.binary.OsmandOdb.TransportRouteStop.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportRouteStop.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addReverseStops(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required uint64 id = 1;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // optional uint32 type = 3;
      public boolean hasType() {
        return result.hasType();
      }
      public int getType() {
        return result.getType();
      }
      public Builder setType(int value) {
        result.hasType = true;
        result.type_ = value;
        return this;
      }
      public Builder clearType() {
        result.hasType = false;
        result.type_ = 0;
        return this;
      }
      
      // optional uint32 operator = 4;
      public boolean hasOperator() {
        return result.hasOperator();
      }
      public int getOperator() {
        return result.getOperator();
      }
      public Builder setOperator(int value) {
        result.hasOperator = true;
        result.operator_ = value;
        return this;
      }
      public Builder clearOperator() {
        result.hasOperator = false;
        result.operator_ = 0;
        return this;
      }
      
      // optional string ref = 5;
      public boolean hasRef() {
        return result.hasRef();
      }
      public java.lang.String getRef() {
        return result.getRef();
      }
      public Builder setRef(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasRef = true;
        result.ref_ = value;
        return this;
      }
      public Builder clearRef() {
        result.hasRef = false;
        result.ref_ = getDefaultInstance().getRef();
        return this;
      }
      
      // optional uint32 name = 6;
      public boolean hasName() {
        return result.hasName();
      }
      public int getName() {
        return result.getName();
      }
      public Builder setName(int value) {
        result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = 0;
        return this;
      }
      
      // optional uint32 name_en = 7;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public int getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(int value) {
        result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = 0;
        return this;
      }
      
      // optional uint32 distance = 8;
      public boolean hasDistance() {
        return result.hasDistance();
      }
      public int getDistance() {
        return result.getDistance();
      }
      public Builder setDistance(int value) {
        result.hasDistance = true;
        result.distance_ = value;
        return this;
      }
      public Builder clearDistance() {
        result.hasDistance = false;
        result.distance_ = 0;
        return this;
      }
      
      // repeated .TransportRouteStop directStops = 15;
      public java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> getDirectStopsList() {
        return java.util.Collections.unmodifiableList(result.directStops_);
      }
      public int getDirectStopsCount() {
        return result.getDirectStopsCount();
      }
      public net.osmand.binary.OsmandOdb.TransportRouteStop getDirectStops(int index) {
        return result.getDirectStops(index);
      }
      public Builder setDirectStops(int index, net.osmand.binary.OsmandOdb.TransportRouteStop value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.directStops_.set(index, value);
        return this;
      }
      public Builder setDirectStops(int index, net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) {
        result.directStops_.set(index, builderForValue.build());
        return this;
      }
      public Builder addDirectStops(net.osmand.binary.OsmandOdb.TransportRouteStop value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.directStops_.isEmpty()) {
          result.directStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
        }
        result.directStops_.add(value);
        return this;
      }
      public Builder addDirectStops(net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) {
        if (result.directStops_.isEmpty()) {
          result.directStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
        }
        result.directStops_.add(builderForValue.build());
        return this;
      }
      public Builder addAllDirectStops(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.TransportRouteStop> values) {
        if (result.directStops_.isEmpty()) {
          result.directStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
        }
        super.addAll(values, result.directStops_);
        return this;
      }
      public Builder clearDirectStops() {
        result.directStops_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .TransportRouteStop reverseStops = 16;
      public java.util.List<net.osmand.binary.OsmandOdb.TransportRouteStop> getReverseStopsList() {
        return java.util.Collections.unmodifiableList(result.reverseStops_);
      }
      public int getReverseStopsCount() {
        return result.getReverseStopsCount();
      }
      public net.osmand.binary.OsmandOdb.TransportRouteStop getReverseStops(int index) {
        return result.getReverseStops(index);
      }
      public Builder setReverseStops(int index, net.osmand.binary.OsmandOdb.TransportRouteStop value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.reverseStops_.set(index, value);
        return this;
      }
      public Builder setReverseStops(int index, net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) {
        result.reverseStops_.set(index, builderForValue.build());
        return this;
      }
      public Builder addReverseStops(net.osmand.binary.OsmandOdb.TransportRouteStop value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.reverseStops_.isEmpty()) {
          result.reverseStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
        }
        result.reverseStops_.add(value);
        return this;
      }
      public Builder addReverseStops(net.osmand.binary.OsmandOdb.TransportRouteStop.Builder builderForValue) {
        if (result.reverseStops_.isEmpty()) {
          result.reverseStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
        }
        result.reverseStops_.add(builderForValue.build());
        return this;
      }
      public Builder addAllReverseStops(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.TransportRouteStop> values) {
        if (result.reverseStops_.isEmpty()) {
          result.reverseStops_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportRouteStop>();
        }
        super.addAll(values, result.reverseStops_);
        return this;
      }
      public Builder clearReverseStops() {
        result.reverseStops_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:TransportRoute)
    }
    
    static {
      defaultInstance = new TransportRoute(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:TransportRoute)
  }
  
  public static final class TransportRouteStop extends
      com.google.protobuf.GeneratedMessage {
    // Use TransportRouteStop.newBuilder() to construct.
    private TransportRouteStop() {
      initFields();
    }
    private TransportRouteStop(boolean noInit) {}
    
    private static final TransportRouteStop defaultInstance;
    public static TransportRouteStop getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public TransportRouteStop getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportRouteStop_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportRouteStop_fieldAccessorTable;
    }
    
    // required sint64 id = 1;
    public static final int ID_FIELD_NUMBER = 1;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // required sint32 dx = 2;
    public static final int DX_FIELD_NUMBER = 2;
    private boolean hasDx;
    private int dx_ = 0;
    public boolean hasDx() { return hasDx; }
    public int getDx() { return dx_; }
    
    // required sint32 dy = 3;
    public static final int DY_FIELD_NUMBER = 3;
    private boolean hasDy;
    private int dy_ = 0;
    public boolean hasDy() { return hasDy; }
    public int getDy() { return dy_; }
    
    // required uint32 name = 6;
    public static final int NAME_FIELD_NUMBER = 6;
    private boolean hasName;
    private int name_ = 0;
    public boolean hasName() { return hasName; }
    public int getName() { return name_; }
    
    // optional uint32 name_en = 7;
    public static final int NAME_EN_FIELD_NUMBER = 7;
    private boolean hasNameEn;
    private int nameEn_ = 0;
    public boolean hasNameEn() { return hasNameEn; }
    public int getNameEn() { return nameEn_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasId) return false;
      if (!hasDx) return false;
      if (!hasDy) return false;
      if (!hasName) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasId()) {
        output.writeSInt64(1, getId());
      }
      if (hasDx()) {
        output.writeSInt32(2, getDx());
      }
      if (hasDy()) {
        output.writeSInt32(3, getDy());
      }
      if (hasName()) {
        output.writeUInt32(6, getName());
      }
      if (hasNameEn()) {
        output.writeUInt32(7, getNameEn());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(1, getId());
      }
      if (hasDx()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(2, getDx());
      }
      if (hasDy()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(3, getDy());
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(6, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(7, getNameEn());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportRouteStop parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportRouteStop prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.TransportRouteStop result;
      
      // Construct using net.osmand.binary.OsmandOdb.TransportRouteStop.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.TransportRouteStop();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.TransportRouteStop internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.TransportRouteStop();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.TransportRouteStop.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportRouteStop getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.TransportRouteStop.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.TransportRouteStop build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.TransportRouteStop buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportRouteStop buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.TransportRouteStop returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.TransportRouteStop) {
          return mergeFrom((net.osmand.binary.OsmandOdb.TransportRouteStop)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportRouteStop other) {
        if (other == net.osmand.binary.OsmandOdb.TransportRouteStop.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasDx()) {
          setDx(other.getDx());
        }
        if (other.hasDy()) {
          setDy(other.getDy());
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setId(input.readSInt64());
              break;
            }
            case 16: {
              setDx(input.readSInt32());
              break;
            }
            case 24: {
              setDy(input.readSInt32());
              break;
            }
            case 48: {
              setName(input.readUInt32());
              break;
            }
            case 56: {
              setNameEn(input.readUInt32());
              break;
            }
          }
        }
      }
      
      
      // required sint64 id = 1;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // required sint32 dx = 2;
      public boolean hasDx() {
        return result.hasDx();
      }
      public int getDx() {
        return result.getDx();
      }
      public Builder setDx(int value) {
        result.hasDx = true;
        result.dx_ = value;
        return this;
      }
      public Builder clearDx() {
        result.hasDx = false;
        result.dx_ = 0;
        return this;
      }
      
      // required sint32 dy = 3;
      public boolean hasDy() {
        return result.hasDy();
      }
      public int getDy() {
        return result.getDy();
      }
      public Builder setDy(int value) {
        result.hasDy = true;
        result.dy_ = value;
        return this;
      }
      public Builder clearDy() {
        result.hasDy = false;
        result.dy_ = 0;
        return this;
      }
      
      // required uint32 name = 6;
      public boolean hasName() {
        return result.hasName();
      }
      public int getName() {
        return result.getName();
      }
      public Builder setName(int value) {
        result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = 0;
        return this;
      }
      
      // optional uint32 name_en = 7;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public int getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(int value) {
        result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:TransportRouteStop)
    }
    
    static {
      defaultInstance = new TransportRouteStop(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:TransportRouteStop)
  }
  
  public static final class TransportStop extends
      com.google.protobuf.GeneratedMessage {
    // Use TransportStop.newBuilder() to construct.
    private TransportStop() {
      initFields();
    }
    private TransportStop(boolean noInit) {}
    
    private static final TransportStop defaultInstance;
    public static TransportStop getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public TransportStop getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportStop_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportStop_fieldAccessorTable;
    }
    
    // required sint32 dx = 1;
    public static final int DX_FIELD_NUMBER = 1;
    private boolean hasDx;
    private int dx_ = 0;
    public boolean hasDx() { return hasDx; }
    public int getDx() { return dx_; }
    
    // required sint32 dy = 2;
    public static final int DY_FIELD_NUMBER = 2;
    private boolean hasDy;
    private int dy_ = 0;
    public boolean hasDy() { return hasDy; }
    public int getDy() { return dy_; }
    
    // required sint64 id = 5;
    public static final int ID_FIELD_NUMBER = 5;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // required uint32 name = 6;
    public static final int NAME_FIELD_NUMBER = 6;
    private boolean hasName;
    private int name_ = 0;
    public boolean hasName() { return hasName; }
    public int getName() { return name_; }
    
    // optional uint32 name_en = 7;
    public static final int NAME_EN_FIELD_NUMBER = 7;
    private boolean hasNameEn;
    private int nameEn_ = 0;
    public boolean hasNameEn() { return hasNameEn; }
    public int getNameEn() { return nameEn_; }
    
    // repeated uint32 routes = 16;
    public static final int ROUTES_FIELD_NUMBER = 16;
    private java.util.List<java.lang.Integer> routes_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getRoutesList() {
      return routes_;
    }
    public int getRoutesCount() { return routes_.size(); }
    public int getRoutes(int index) {
      return routes_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasDx) return false;
      if (!hasDy) return false;
      if (!hasId) return false;
      if (!hasName) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasDx()) {
        output.writeSInt32(1, getDx());
      }
      if (hasDy()) {
        output.writeSInt32(2, getDy());
      }
      if (hasId()) {
        output.writeSInt64(5, getId());
      }
      if (hasName()) {
        output.writeUInt32(6, getName());
      }
      if (hasNameEn()) {
        output.writeUInt32(7, getNameEn());
      }
      for (int element : getRoutesList()) {
        output.writeUInt32(16, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasDx()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(1, getDx());
      }
      if (hasDy()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(2, getDy());
      }
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt64Size(5, getId());
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(6, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(7, getNameEn());
      }
      {
        int dataSize = 0;
        for (int element : getRoutesList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(element);
        }
        size += dataSize;
        size += 2 * getRoutesList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStop parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportStop prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.TransportStop result;
      
      // Construct using net.osmand.binary.OsmandOdb.TransportStop.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.TransportStop();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.TransportStop internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.TransportStop();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.TransportStop.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportStop getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.TransportStop.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.TransportStop build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.TransportStop buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportStop buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.routes_ != java.util.Collections.EMPTY_LIST) {
          result.routes_ =
            java.util.Collections.unmodifiableList(result.routes_);
        }
        net.osmand.binary.OsmandOdb.TransportStop returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.TransportStop) {
          return mergeFrom((net.osmand.binary.OsmandOdb.TransportStop)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportStop other) {
        if (other == net.osmand.binary.OsmandOdb.TransportStop.getDefaultInstance()) return this;
        if (other.hasDx()) {
          setDx(other.getDx());
        }
        if (other.hasDy()) {
          setDy(other.getDy());
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (!other.routes_.isEmpty()) {
          if (result.routes_.isEmpty()) {
            result.routes_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.routes_.addAll(other.routes_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setDx(input.readSInt32());
              break;
            }
            case 16: {
              setDy(input.readSInt32());
              break;
            }
            case 40: {
              setId(input.readSInt64());
              break;
            }
            case 48: {
              setName(input.readUInt32());
              break;
            }
            case 56: {
              setNameEn(input.readUInt32());
              break;
            }
            case 128: {
              addRoutes(input.readUInt32());
              break;
            }
            case 130: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addRoutes(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      }
      
      
      // required sint32 dx = 1;
      public boolean hasDx() {
        return result.hasDx();
      }
      public int getDx() {
        return result.getDx();
      }
      public Builder setDx(int value) {
        result.hasDx = true;
        result.dx_ = value;
        return this;
      }
      public Builder clearDx() {
        result.hasDx = false;
        result.dx_ = 0;
        return this;
      }
      
      // required sint32 dy = 2;
      public boolean hasDy() {
        return result.hasDy();
      }
      public int getDy() {
        return result.getDy();
      }
      public Builder setDy(int value) {
        result.hasDy = true;
        result.dy_ = value;
        return this;
      }
      public Builder clearDy() {
        result.hasDy = false;
        result.dy_ = 0;
        return this;
      }
      
      // required sint64 id = 5;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // required uint32 name = 6;
      public boolean hasName() {
        return result.hasName();
      }
      public int getName() {
        return result.getName();
      }
      public Builder setName(int value) {
        result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = 0;
        return this;
      }
      
      // optional uint32 name_en = 7;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public int getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(int value) {
        result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = 0;
        return this;
      }
      
      // repeated uint32 routes = 16;
      public java.util.List<java.lang.Integer> getRoutesList() {
        return java.util.Collections.unmodifiableList(result.routes_);
      }
      public int getRoutesCount() {
        return result.getRoutesCount();
      }
      public int getRoutes(int index) {
        return result.getRoutes(index);
      }
      public Builder setRoutes(int index, int value) {
        result.routes_.set(index, value);
        return this;
      }
      public Builder addRoutes(int value) {
        if (result.routes_.isEmpty()) {
          result.routes_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.routes_.add(value);
        return this;
      }
      public Builder addAllRoutes(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.routes_.isEmpty()) {
          result.routes_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.routes_);
        return this;
      }
      public Builder clearRoutes() {
        result.routes_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:TransportStop)
    }
    
    static {
      defaultInstance = new TransportStop(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:TransportStop)
  }
  
  public static final class TransportStopsTree extends
      com.google.protobuf.GeneratedMessage {
    // Use TransportStopsTree.newBuilder() to construct.
    private TransportStopsTree() {
      initFields();
    }
    private TransportStopsTree(boolean noInit) {}
    
    private static final TransportStopsTree defaultInstance;
    public static TransportStopsTree getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public TransportStopsTree getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportStopsTree_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_TransportStopsTree_fieldAccessorTable;
    }
    
    // required sint32 left = 1;
    public static final int LEFT_FIELD_NUMBER = 1;
    private boolean hasLeft;
    private int left_ = 0;
    public boolean hasLeft() { return hasLeft; }
    public int getLeft() { return left_; }
    
    // required sint32 right = 2;
    public static final int RIGHT_FIELD_NUMBER = 2;
    private boolean hasRight;
    private int right_ = 0;
    public boolean hasRight() { return hasRight; }
    public int getRight() { return right_; }
    
    // required sint32 top = 3;
    public static final int TOP_FIELD_NUMBER = 3;
    private boolean hasTop;
    private int top_ = 0;
    public boolean hasTop() { return hasTop; }
    public int getTop() { return top_; }
    
    // required sint32 bottom = 4;
    public static final int BOTTOM_FIELD_NUMBER = 4;
    private boolean hasBottom;
    private int bottom_ = 0;
    public boolean hasBottom() { return hasBottom; }
    public int getBottom() { return bottom_; }
    
    // repeated .TransportStopsTree subtrees = 7;
    public static final int SUBTREES_FIELD_NUMBER = 7;
    private java.util.List<net.osmand.binary.OsmandOdb.TransportStopsTree> subtrees_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.TransportStopsTree> getSubtreesList() {
      return subtrees_;
    }
    public int getSubtreesCount() { return subtrees_.size(); }
    public net.osmand.binary.OsmandOdb.TransportStopsTree getSubtrees(int index) {
      return subtrees_.get(index);
    }
    
    // repeated .TransportStop leafs = 8;
    public static final int LEAFS_FIELD_NUMBER = 8;
    private java.util.List<net.osmand.binary.OsmandOdb.TransportStop> leafs_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.TransportStop> getLeafsList() {
      return leafs_;
    }
    public int getLeafsCount() { return leafs_.size(); }
    public net.osmand.binary.OsmandOdb.TransportStop getLeafs(int index) {
      return leafs_.get(index);
    }
    
    // optional uint64 baseId = 16;
    public static final int BASEID_FIELD_NUMBER = 16;
    private boolean hasBaseId;
    private long baseId_ = 0L;
    public boolean hasBaseId() { return hasBaseId; }
    public long getBaseId() { return baseId_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasLeft) return false;
      if (!hasRight) return false;
      if (!hasTop) return false;
      if (!hasBottom) return false;
      for (net.osmand.binary.OsmandOdb.TransportStopsTree element : getSubtreesList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.TransportStop element : getLeafsList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasLeft()) {
        output.writeSInt32(1, getLeft());
      }
      if (hasRight()) {
        output.writeSInt32(2, getRight());
      }
      if (hasTop()) {
        output.writeSInt32(3, getTop());
      }
      if (hasBottom()) {
        output.writeSInt32(4, getBottom());
      }
      for (net.osmand.binary.OsmandOdb.TransportStopsTree element : getSubtreesList()) {
        output.writeMessage(7, element);
      }
      for (net.osmand.binary.OsmandOdb.TransportStop element : getLeafsList()) {
        output.writeMessage(8, element);
      }
      if (hasBaseId()) {
        output.writeUInt64(16, getBaseId());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasLeft()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(1, getLeft());
      }
      if (hasRight()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(2, getRight());
      }
      if (hasTop()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(3, getTop());
      }
      if (hasBottom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(4, getBottom());
      }
      for (net.osmand.binary.OsmandOdb.TransportStopsTree element : getSubtreesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(7, element);
      }
      for (net.osmand.binary.OsmandOdb.TransportStop element : getLeafsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(8, element);
      }
      if (hasBaseId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(16, getBaseId());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.TransportStopsTree parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.TransportStopsTree prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.TransportStopsTree result;
      
      // Construct using net.osmand.binary.OsmandOdb.TransportStopsTree.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.TransportStopsTree();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.TransportStopsTree internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.TransportStopsTree();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.TransportStopsTree.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportStopsTree getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.TransportStopsTree build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.TransportStopsTree buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.TransportStopsTree buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.subtrees_ != java.util.Collections.EMPTY_LIST) {
          result.subtrees_ =
            java.util.Collections.unmodifiableList(result.subtrees_);
        }
        if (result.leafs_ != java.util.Collections.EMPTY_LIST) {
          result.leafs_ =
            java.util.Collections.unmodifiableList(result.leafs_);
        }
        net.osmand.binary.OsmandOdb.TransportStopsTree returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.TransportStopsTree) {
          return mergeFrom((net.osmand.binary.OsmandOdb.TransportStopsTree)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.TransportStopsTree other) {
        if (other == net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance()) return this;
        if (other.hasLeft()) {
          setLeft(other.getLeft());
        }
        if (other.hasRight()) {
          setRight(other.getRight());
        }
        if (other.hasTop()) {
          setTop(other.getTop());
        }
        if (other.hasBottom()) {
          setBottom(other.getBottom());
        }
        if (!other.subtrees_.isEmpty()) {
          if (result.subtrees_.isEmpty()) {
            result.subtrees_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStopsTree>();
          }
          result.subtrees_.addAll(other.subtrees_);
        }
        if (!other.leafs_.isEmpty()) {
          if (result.leafs_.isEmpty()) {
            result.leafs_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStop>();
          }
          result.leafs_.addAll(other.leafs_);
        }
        if (other.hasBaseId()) {
          setBaseId(other.getBaseId());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setLeft(input.readSInt32());
              break;
            }
            case 16: {
              setRight(input.readSInt32());
              break;
            }
            case 24: {
              setTop(input.readSInt32());
              break;
            }
            case 32: {
              setBottom(input.readSInt32());
              break;
            }
            case 58: {
              net.osmand.binary.OsmandOdb.TransportStopsTree.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportStopsTree.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addSubtrees(subBuilder.buildPartial());
              break;
            }
            case 66: {
              net.osmand.binary.OsmandOdb.TransportStop.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportStop.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addLeafs(subBuilder.buildPartial());
              break;
            }
            case 128: {
              setBaseId(input.readUInt64());
              break;
            }
          }
        }
      }
      
      
      // required sint32 left = 1;
      public boolean hasLeft() {
        return result.hasLeft();
      }
      public int getLeft() {
        return result.getLeft();
      }
      public Builder setLeft(int value) {
        result.hasLeft = true;
        result.left_ = value;
        return this;
      }
      public Builder clearLeft() {
        result.hasLeft = false;
        result.left_ = 0;
        return this;
      }
      
      // required sint32 right = 2;
      public boolean hasRight() {
        return result.hasRight();
      }
      public int getRight() {
        return result.getRight();
      }
      public Builder setRight(int value) {
        result.hasRight = true;
        result.right_ = value;
        return this;
      }
      public Builder clearRight() {
        result.hasRight = false;
        result.right_ = 0;
        return this;
      }
      
      // required sint32 top = 3;
      public boolean hasTop() {
        return result.hasTop();
      }
      public int getTop() {
        return result.getTop();
      }
      public Builder setTop(int value) {
        result.hasTop = true;
        result.top_ = value;
        return this;
      }
      public Builder clearTop() {
        result.hasTop = false;
        result.top_ = 0;
        return this;
      }
      
      // required sint32 bottom = 4;
      public boolean hasBottom() {
        return result.hasBottom();
      }
      public int getBottom() {
        return result.getBottom();
      }
      public Builder setBottom(int value) {
        result.hasBottom = true;
        result.bottom_ = value;
        return this;
      }
      public Builder clearBottom() {
        result.hasBottom = false;
        result.bottom_ = 0;
        return this;
      }
      
      // repeated .TransportStopsTree subtrees = 7;
      public java.util.List<net.osmand.binary.OsmandOdb.TransportStopsTree> getSubtreesList() {
        return java.util.Collections.unmodifiableList(result.subtrees_);
      }
      public int getSubtreesCount() {
        return result.getSubtreesCount();
      }
      public net.osmand.binary.OsmandOdb.TransportStopsTree getSubtrees(int index) {
        return result.getSubtrees(index);
      }
      public Builder setSubtrees(int index, net.osmand.binary.OsmandOdb.TransportStopsTree value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.subtrees_.set(index, value);
        return this;
      }
      public Builder setSubtrees(int index, net.osmand.binary.OsmandOdb.TransportStopsTree.Builder builderForValue) {
        result.subtrees_.set(index, builderForValue.build());
        return this;
      }
      public Builder addSubtrees(net.osmand.binary.OsmandOdb.TransportStopsTree value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.subtrees_.isEmpty()) {
          result.subtrees_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStopsTree>();
        }
        result.subtrees_.add(value);
        return this;
      }
      public Builder addSubtrees(net.osmand.binary.OsmandOdb.TransportStopsTree.Builder builderForValue) {
        if (result.subtrees_.isEmpty()) {
          result.subtrees_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStopsTree>();
        }
        result.subtrees_.add(builderForValue.build());
        return this;
      }
      public Builder addAllSubtrees(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.TransportStopsTree> values) {
        if (result.subtrees_.isEmpty()) {
          result.subtrees_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStopsTree>();
        }
        super.addAll(values, result.subtrees_);
        return this;
      }
      public Builder clearSubtrees() {
        result.subtrees_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .TransportStop leafs = 8;
      public java.util.List<net.osmand.binary.OsmandOdb.TransportStop> getLeafsList() {
        return java.util.Collections.unmodifiableList(result.leafs_);
      }
      public int getLeafsCount() {
        return result.getLeafsCount();
      }
      public net.osmand.binary.OsmandOdb.TransportStop getLeafs(int index) {
        return result.getLeafs(index);
      }
      public Builder setLeafs(int index, net.osmand.binary.OsmandOdb.TransportStop value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.leafs_.set(index, value);
        return this;
      }
      public Builder setLeafs(int index, net.osmand.binary.OsmandOdb.TransportStop.Builder builderForValue) {
        result.leafs_.set(index, builderForValue.build());
        return this;
      }
      public Builder addLeafs(net.osmand.binary.OsmandOdb.TransportStop value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.leafs_.isEmpty()) {
          result.leafs_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStop>();
        }
        result.leafs_.add(value);
        return this;
      }
      public Builder addLeafs(net.osmand.binary.OsmandOdb.TransportStop.Builder builderForValue) {
        if (result.leafs_.isEmpty()) {
          result.leafs_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStop>();
        }
        result.leafs_.add(builderForValue.build());
        return this;
      }
      public Builder addAllLeafs(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.TransportStop> values) {
        if (result.leafs_.isEmpty()) {
          result.leafs_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.TransportStop>();
        }
        super.addAll(values, result.leafs_);
        return this;
      }
      public Builder clearLeafs() {
        result.leafs_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional uint64 baseId = 16;
      public boolean hasBaseId() {
        return result.hasBaseId();
      }
      public long getBaseId() {
        return result.getBaseId();
      }
      public Builder setBaseId(long value) {
        result.hasBaseId = true;
        result.baseId_ = value;
        return this;
      }
      public Builder clearBaseId() {
        result.hasBaseId = false;
        result.baseId_ = 0L;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:TransportStopsTree)
    }
    
    static {
      defaultInstance = new TransportStopsTree(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:TransportStopsTree)
  }
  
  public static final class OsmAndTransportIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndTransportIndex.newBuilder() to construct.
    private OsmAndTransportIndex() {
      initFields();
    }
    private OsmAndTransportIndex(boolean noInit) {}
    
    private static final OsmAndTransportIndex defaultInstance;
    public static OsmAndTransportIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndTransportIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndTransportIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndTransportIndex_fieldAccessorTable;
    }
    
    // optional string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional .TransportRoutes routes = 3;
    public static final int ROUTES_FIELD_NUMBER = 3;
    private boolean hasRoutes;
    private net.osmand.binary.OsmandOdb.TransportRoutes routes_;
    public boolean hasRoutes() { return hasRoutes; }
    public net.osmand.binary.OsmandOdb.TransportRoutes getRoutes() { return routes_; }
    
    // optional .TransportStopsTree stops = 6;
    public static final int STOPS_FIELD_NUMBER = 6;
    private boolean hasStops;
    private net.osmand.binary.OsmandOdb.TransportStopsTree stops_;
    public boolean hasStops() { return hasStops; }
    public net.osmand.binary.OsmandOdb.TransportStopsTree getStops() { return stops_; }
    
    // required .StringTable stringTable = 9;
    public static final int STRINGTABLE_FIELD_NUMBER = 9;
    private boolean hasStringTable;
    private net.osmand.binary.OsmandOdb.StringTable stringTable_;
    public boolean hasStringTable() { return hasStringTable; }
    public net.osmand.binary.OsmandOdb.StringTable getStringTable() { return stringTable_; }
    
    private void initFields() {
      routes_ = net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance();
      stops_ = net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance();
      stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasStringTable) return false;
      if (hasRoutes()) {
        if (!getRoutes().isInitialized()) return false;
      }
      if (hasStops()) {
        if (!getStops().isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(1, getName());
      }
      if (hasRoutes()) {
        output.writeMessage(3, getRoutes());
      }
      if (hasStops()) {
        output.writeMessage(6, getStops());
      }
      if (hasStringTable()) {
        output.writeMessage(9, getStringTable());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getName());
      }
      if (hasRoutes()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, getRoutes());
      }
      if (hasStops()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, getStops());
      }
      if (hasStringTable()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, getStringTable());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTransportIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndTransportIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndTransportIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndTransportIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndTransportIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndTransportIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndTransportIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndTransportIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndTransportIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndTransportIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndTransportIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndTransportIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndTransportIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.OsmAndTransportIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndTransportIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndTransportIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndTransportIndex other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndTransportIndex.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasRoutes()) {
          mergeRoutes(other.getRoutes());
        }
        if (other.hasStops()) {
          mergeStops(other.getStops());
        }
        if (other.hasStringTable()) {
          mergeStringTable(other.getStringTable());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setName(input.readString());
              break;
            }
            case 26: {
              net.osmand.binary.OsmandOdb.TransportRoutes.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportRoutes.newBuilder();
              if (hasRoutes()) {
                subBuilder.mergeFrom(getRoutes());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setRoutes(subBuilder.buildPartial());
              break;
            }
            case 50: {
              net.osmand.binary.OsmandOdb.TransportStopsTree.Builder subBuilder = net.osmand.binary.OsmandOdb.TransportStopsTree.newBuilder();
              if (hasStops()) {
                subBuilder.mergeFrom(getStops());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setStops(subBuilder.buildPartial());
              break;
            }
            case 74: {
              net.osmand.binary.OsmandOdb.StringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.StringTable.newBuilder();
              if (hasStringTable()) {
                subBuilder.mergeFrom(getStringTable());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setStringTable(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // optional string name = 1;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional .TransportRoutes routes = 3;
      public boolean hasRoutes() {
        return result.hasRoutes();
      }
      public net.osmand.binary.OsmandOdb.TransportRoutes getRoutes() {
        return result.getRoutes();
      }
      public Builder setRoutes(net.osmand.binary.OsmandOdb.TransportRoutes value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasRoutes = true;
        result.routes_ = value;
        return this;
      }
      public Builder setRoutes(net.osmand.binary.OsmandOdb.TransportRoutes.Builder builderForValue) {
        result.hasRoutes = true;
        result.routes_ = builderForValue.build();
        return this;
      }
      public Builder mergeRoutes(net.osmand.binary.OsmandOdb.TransportRoutes value) {
        if (result.hasRoutes() &&
            result.routes_ != net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance()) {
          result.routes_ =
            net.osmand.binary.OsmandOdb.TransportRoutes.newBuilder(result.routes_).mergeFrom(value).buildPartial();
        } else {
          result.routes_ = value;
        }
        result.hasRoutes = true;
        return this;
      }
      public Builder clearRoutes() {
        result.hasRoutes = false;
        result.routes_ = net.osmand.binary.OsmandOdb.TransportRoutes.getDefaultInstance();
        return this;
      }
      
      // optional .TransportStopsTree stops = 6;
      public boolean hasStops() {
        return result.hasStops();
      }
      public net.osmand.binary.OsmandOdb.TransportStopsTree getStops() {
        return result.getStops();
      }
      public Builder setStops(net.osmand.binary.OsmandOdb.TransportStopsTree value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasStops = true;
        result.stops_ = value;
        return this;
      }
      public Builder setStops(net.osmand.binary.OsmandOdb.TransportStopsTree.Builder builderForValue) {
        result.hasStops = true;
        result.stops_ = builderForValue.build();
        return this;
      }
      public Builder mergeStops(net.osmand.binary.OsmandOdb.TransportStopsTree value) {
        if (result.hasStops() &&
            result.stops_ != net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance()) {
          result.stops_ =
            net.osmand.binary.OsmandOdb.TransportStopsTree.newBuilder(result.stops_).mergeFrom(value).buildPartial();
        } else {
          result.stops_ = value;
        }
        result.hasStops = true;
        return this;
      }
      public Builder clearStops() {
        result.hasStops = false;
        result.stops_ = net.osmand.binary.OsmandOdb.TransportStopsTree.getDefaultInstance();
        return this;
      }
      
      // required .StringTable stringTable = 9;
      public boolean hasStringTable() {
        return result.hasStringTable();
      }
      public net.osmand.binary.OsmandOdb.StringTable getStringTable() {
        return result.getStringTable();
      }
      public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasStringTable = true;
        result.stringTable_ = value;
        return this;
      }
      public Builder setStringTable(net.osmand.binary.OsmandOdb.StringTable.Builder builderForValue) {
        result.hasStringTable = true;
        result.stringTable_ = builderForValue.build();
        return this;
      }
      public Builder mergeStringTable(net.osmand.binary.OsmandOdb.StringTable value) {
        if (result.hasStringTable() &&
            result.stringTable_ != net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance()) {
          result.stringTable_ =
            net.osmand.binary.OsmandOdb.StringTable.newBuilder(result.stringTable_).mergeFrom(value).buildPartial();
        } else {
          result.stringTable_ = value;
        }
        result.hasStringTable = true;
        return this;
      }
      public Builder clearStringTable() {
        result.hasStringTable = false;
        result.stringTable_ = net.osmand.binary.OsmandOdb.StringTable.getDefaultInstance();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndTransportIndex)
    }
    
    static {
      defaultInstance = new OsmAndTransportIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndTransportIndex)
  }
  
  public static final class OsmAndTileBox extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndTileBox.newBuilder() to construct.
    private OsmAndTileBox() {
      initFields();
    }
    private OsmAndTileBox(boolean noInit) {}
    
    private static final OsmAndTileBox defaultInstance;
    public static OsmAndTileBox getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndTileBox getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndTileBox_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndTileBox_fieldAccessorTable;
    }
    
    // required uint32 left = 1;
    public static final int LEFT_FIELD_NUMBER = 1;
    private boolean hasLeft;
    private int left_ = 0;
    public boolean hasLeft() { return hasLeft; }
    public int getLeft() { return left_; }
    
    // required uint32 right = 2;
    public static final int RIGHT_FIELD_NUMBER = 2;
    private boolean hasRight;
    private int right_ = 0;
    public boolean hasRight() { return hasRight; }
    public int getRight() { return right_; }
    
    // required uint32 top = 3;
    public static final int TOP_FIELD_NUMBER = 3;
    private boolean hasTop;
    private int top_ = 0;
    public boolean hasTop() { return hasTop; }
    public int getTop() { return top_; }
    
    // required uint32 bottom = 4;
    public static final int BOTTOM_FIELD_NUMBER = 4;
    private boolean hasBottom;
    private int bottom_ = 0;
    public boolean hasBottom() { return hasBottom; }
    public int getBottom() { return bottom_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasLeft) return false;
      if (!hasRight) return false;
      if (!hasTop) return false;
      if (!hasBottom) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasLeft()) {
        output.writeUInt32(1, getLeft());
      }
      if (hasRight()) {
        output.writeUInt32(2, getRight());
      }
      if (hasTop()) {
        output.writeUInt32(3, getTop());
      }
      if (hasBottom()) {
        output.writeUInt32(4, getBottom());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasLeft()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, getLeft());
      }
      if (hasRight()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, getRight());
      }
      if (hasTop()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, getTop());
      }
      if (hasBottom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, getBottom());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndTileBox parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndTileBox prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndTileBox result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndTileBox();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndTileBox internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndTileBox();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndTileBox.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndTileBox getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndTileBox build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndTileBox buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndTileBox buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.OsmAndTileBox returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndTileBox) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndTileBox)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndTileBox other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance()) return this;
        if (other.hasLeft()) {
          setLeft(other.getLeft());
        }
        if (other.hasRight()) {
          setRight(other.getRight());
        }
        if (other.hasTop()) {
          setTop(other.getTop());
        }
        if (other.hasBottom()) {
          setBottom(other.getBottom());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setLeft(input.readUInt32());
              break;
            }
            case 16: {
              setRight(input.readUInt32());
              break;
            }
            case 24: {
              setTop(input.readUInt32());
              break;
            }
            case 32: {
              setBottom(input.readUInt32());
              break;
            }
          }
        }
      }
      
      
      // required uint32 left = 1;
      public boolean hasLeft() {
        return result.hasLeft();
      }
      public int getLeft() {
        return result.getLeft();
      }
      public Builder setLeft(int value) {
        result.hasLeft = true;
        result.left_ = value;
        return this;
      }
      public Builder clearLeft() {
        result.hasLeft = false;
        result.left_ = 0;
        return this;
      }
      
      // required uint32 right = 2;
      public boolean hasRight() {
        return result.hasRight();
      }
      public int getRight() {
        return result.getRight();
      }
      public Builder setRight(int value) {
        result.hasRight = true;
        result.right_ = value;
        return this;
      }
      public Builder clearRight() {
        result.hasRight = false;
        result.right_ = 0;
        return this;
      }
      
      // required uint32 top = 3;
      public boolean hasTop() {
        return result.hasTop();
      }
      public int getTop() {
        return result.getTop();
      }
      public Builder setTop(int value) {
        result.hasTop = true;
        result.top_ = value;
        return this;
      }
      public Builder clearTop() {
        result.hasTop = false;
        result.top_ = 0;
        return this;
      }
      
      // required uint32 bottom = 4;
      public boolean hasBottom() {
        return result.hasBottom();
      }
      public int getBottom() {
        return result.getBottom();
      }
      public Builder setBottom(int value) {
        result.hasBottom = true;
        result.bottom_ = value;
        return this;
      }
      public Builder clearBottom() {
        result.hasBottom = false;
        result.bottom_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndTileBox)
    }
    
    static {
      defaultInstance = new OsmAndTileBox(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndTileBox)
  }
  
  public static final class OsmAndPoiIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiIndex.newBuilder() to construct.
    private OsmAndPoiIndex() {
      initFields();
    }
    private OsmAndPoiIndex(boolean noInit) {}
    
    private static final OsmAndPoiIndex defaultInstance;
    public static OsmAndPoiIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiIndex_fieldAccessorTable;
    }
    
    // required string name = 1;
    public static final int NAME_FIELD_NUMBER = 1;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // required .OsmAndTileBox boundaries = 2;
    public static final int BOUNDARIES_FIELD_NUMBER = 2;
    private boolean hasBoundaries;
    private net.osmand.binary.OsmandOdb.OsmAndTileBox boundaries_;
    public boolean hasBoundaries() { return hasBoundaries; }
    public net.osmand.binary.OsmandOdb.OsmAndTileBox getBoundaries() { return boundaries_; }
    
    // repeated .OsmAndCategoryTable categoriesTable = 3;
    public static final int CATEGORIESTABLE_FIELD_NUMBER = 3;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndCategoryTable> categoriesTable_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndCategoryTable> getCategoriesTableList() {
      return categoriesTable_;
    }
    public int getCategoriesTableCount() { return categoriesTable_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndCategoryTable getCategoriesTable(int index) {
      return categoriesTable_.get(index);
    }
    
    // optional .OsmAndPoiNameIndex nameIndex = 4;
    public static final int NAMEINDEX_FIELD_NUMBER = 4;
    private boolean hasNameIndex;
    private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex nameIndex_;
    public boolean hasNameIndex() { return hasNameIndex; }
    public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex getNameIndex() { return nameIndex_; }
    
    // repeated .OsmAndPoiBox boxes = 6;
    public static final int BOXES_FIELD_NUMBER = 6;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBox> boxes_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBox> getBoxesList() {
      return boxes_;
    }
    public int getBoxesCount() { return boxes_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndPoiBox getBoxes(int index) {
      return boxes_.get(index);
    }
    
    // repeated .OsmAndPoiBoxData poiData = 9;
    public static final int POIDATA_FIELD_NUMBER = 9;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBoxData> poiData_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBoxData> getPoiDataList() {
      return poiData_;
    }
    public int getPoiDataCount() { return poiData_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData getPoiData(int index) {
      return poiData_.get(index);
    }
    
    private void initFields() {
      boundaries_ = net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance();
      nameIndex_ = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasName) return false;
      if (!hasBoundaries) return false;
      if (!getBoundaries().isInitialized()) return false;
      for (net.osmand.binary.OsmandOdb.OsmAndCategoryTable element : getCategoriesTableList()) {
        if (!element.isInitialized()) return false;
      }
      if (hasNameIndex()) {
        if (!getNameIndex().isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getBoxesList()) {
        if (!element.isInitialized()) return false;
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxData element : getPoiDataList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasName()) {
        output.writeString(1, getName());
      }
      if (hasBoundaries()) {
        output.writeMessage(2, getBoundaries());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndCategoryTable element : getCategoriesTableList()) {
        output.writeMessage(3, element);
      }
      if (hasNameIndex()) {
        output.writeMessage(4, getNameIndex());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getBoxesList()) {
        output.writeMessage(6, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxData element : getPoiDataList()) {
        output.writeMessage(9, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getName());
      }
      if (hasBoundaries()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getBoundaries());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndCategoryTable element : getCategoriesTableList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, element);
      }
      if (hasNameIndex()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getNameIndex());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getBoxesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, element);
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxData element : getPoiDataList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.categoriesTable_ != java.util.Collections.EMPTY_LIST) {
          result.categoriesTable_ =
            java.util.Collections.unmodifiableList(result.categoriesTable_);
        }
        if (result.boxes_ != java.util.Collections.EMPTY_LIST) {
          result.boxes_ =
            java.util.Collections.unmodifiableList(result.boxes_);
        }
        if (result.poiData_ != java.util.Collections.EMPTY_LIST) {
          result.poiData_ =
            java.util.Collections.unmodifiableList(result.poiData_);
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiIndex other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiIndex.getDefaultInstance()) return this;
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasBoundaries()) {
          mergeBoundaries(other.getBoundaries());
        }
        if (!other.categoriesTable_.isEmpty()) {
          if (result.categoriesTable_.isEmpty()) {
            result.categoriesTable_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndCategoryTable>();
          }
          result.categoriesTable_.addAll(other.categoriesTable_);
        }
        if (other.hasNameIndex()) {
          mergeNameIndex(other.getNameIndex());
        }
        if (!other.boxes_.isEmpty()) {
          if (result.boxes_.isEmpty()) {
            result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
          }
          result.boxes_.addAll(other.boxes_);
        }
        if (!other.poiData_.isEmpty()) {
          if (result.poiData_.isEmpty()) {
            result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxData>();
          }
          result.poiData_.addAll(other.poiData_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setName(input.readString());
              break;
            }
            case 18: {
              net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder();
              if (hasBoundaries()) {
                subBuilder.mergeFrom(getBoundaries());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setBoundaries(subBuilder.buildPartial());
              break;
            }
            case 26: {
              net.osmand.binary.OsmandOdb.OsmAndCategoryTable.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndCategoryTable.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addCategoriesTable(subBuilder.buildPartial());
              break;
            }
            case 34: {
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.newBuilder();
              if (hasNameIndex()) {
                subBuilder.mergeFrom(getNameIndex());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setNameIndex(subBuilder.buildPartial());
              break;
            }
            case 50: {
              net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiBox.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addBoxes(subBuilder.buildPartial());
              break;
            }
            case 74: {
              net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addPoiData(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required string name = 1;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // required .OsmAndTileBox boundaries = 2;
      public boolean hasBoundaries() {
        return result.hasBoundaries();
      }
      public net.osmand.binary.OsmandOdb.OsmAndTileBox getBoundaries() {
        return result.getBoundaries();
      }
      public Builder setBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasBoundaries = true;
        result.boundaries_ = value;
        return this;
      }
      public Builder setBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder builderForValue) {
        result.hasBoundaries = true;
        result.boundaries_ = builderForValue.build();
        return this;
      }
      public Builder mergeBoundaries(net.osmand.binary.OsmandOdb.OsmAndTileBox value) {
        if (result.hasBoundaries() &&
            result.boundaries_ != net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance()) {
          result.boundaries_ =
            net.osmand.binary.OsmandOdb.OsmAndTileBox.newBuilder(result.boundaries_).mergeFrom(value).buildPartial();
        } else {
          result.boundaries_ = value;
        }
        result.hasBoundaries = true;
        return this;
      }
      public Builder clearBoundaries() {
        result.hasBoundaries = false;
        result.boundaries_ = net.osmand.binary.OsmandOdb.OsmAndTileBox.getDefaultInstance();
        return this;
      }
      
      // repeated .OsmAndCategoryTable categoriesTable = 3;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndCategoryTable> getCategoriesTableList() {
        return java.util.Collections.unmodifiableList(result.categoriesTable_);
      }
      public int getCategoriesTableCount() {
        return result.getCategoriesTableCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndCategoryTable getCategoriesTable(int index) {
        return result.getCategoriesTable(index);
      }
      public Builder setCategoriesTable(int index, net.osmand.binary.OsmandOdb.OsmAndCategoryTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.categoriesTable_.set(index, value);
        return this;
      }
      public Builder setCategoriesTable(int index, net.osmand.binary.OsmandOdb.OsmAndCategoryTable.Builder builderForValue) {
        result.categoriesTable_.set(index, builderForValue.build());
        return this;
      }
      public Builder addCategoriesTable(net.osmand.binary.OsmandOdb.OsmAndCategoryTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.categoriesTable_.isEmpty()) {
          result.categoriesTable_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndCategoryTable>();
        }
        result.categoriesTable_.add(value);
        return this;
      }
      public Builder addCategoriesTable(net.osmand.binary.OsmandOdb.OsmAndCategoryTable.Builder builderForValue) {
        if (result.categoriesTable_.isEmpty()) {
          result.categoriesTable_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndCategoryTable>();
        }
        result.categoriesTable_.add(builderForValue.build());
        return this;
      }
      public Builder addAllCategoriesTable(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndCategoryTable> values) {
        if (result.categoriesTable_.isEmpty()) {
          result.categoriesTable_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndCategoryTable>();
        }
        super.addAll(values, result.categoriesTable_);
        return this;
      }
      public Builder clearCategoriesTable() {
        result.categoriesTable_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional .OsmAndPoiNameIndex nameIndex = 4;
      public boolean hasNameIndex() {
        return result.hasNameIndex();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex getNameIndex() {
        return result.getNameIndex();
      }
      public Builder setNameIndex(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasNameIndex = true;
        result.nameIndex_ = value;
        return this;
      }
      public Builder setNameIndex(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.Builder builderForValue) {
        result.hasNameIndex = true;
        result.nameIndex_ = builderForValue.build();
        return this;
      }
      public Builder mergeNameIndex(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex value) {
        if (result.hasNameIndex() &&
            result.nameIndex_ != net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance()) {
          result.nameIndex_ =
            net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.newBuilder(result.nameIndex_).mergeFrom(value).buildPartial();
        } else {
          result.nameIndex_ = value;
        }
        result.hasNameIndex = true;
        return this;
      }
      public Builder clearNameIndex() {
        result.hasNameIndex = false;
        result.nameIndex_ = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance();
        return this;
      }
      
      // repeated .OsmAndPoiBox boxes = 6;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBox> getBoxesList() {
        return java.util.Collections.unmodifiableList(result.boxes_);
      }
      public int getBoxesCount() {
        return result.getBoxesCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiBox getBoxes(int index) {
        return result.getBoxes(index);
      }
      public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.boxes_.set(index, value);
        return this;
      }
      public Builder setBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder builderForValue) {
        result.boxes_.set(index, builderForValue.build());
        return this;
      }
      public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndPoiBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.boxes_.isEmpty()) {
          result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
        }
        result.boxes_.add(value);
        return this;
      }
      public Builder addBoxes(net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder builderForValue) {
        if (result.boxes_.isEmpty()) {
          result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
        }
        result.boxes_.add(builderForValue.build());
        return this;
      }
      public Builder addAllBoxes(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndPoiBox> values) {
        if (result.boxes_.isEmpty()) {
          result.boxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
        }
        super.addAll(values, result.boxes_);
        return this;
      }
      public Builder clearBoxes() {
        result.boxes_ = java.util.Collections.emptyList();
        return this;
      }
      
      // repeated .OsmAndPoiBoxData poiData = 9;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBoxData> getPoiDataList() {
        return java.util.Collections.unmodifiableList(result.poiData_);
      }
      public int getPoiDataCount() {
        return result.getPoiDataCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData getPoiData(int index) {
        return result.getPoiData(index);
      }
      public Builder setPoiData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBoxData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.poiData_.set(index, value);
        return this;
      }
      public Builder setPoiData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.Builder builderForValue) {
        result.poiData_.set(index, builderForValue.build());
        return this;
      }
      public Builder addPoiData(net.osmand.binary.OsmandOdb.OsmAndPoiBoxData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.poiData_.isEmpty()) {
          result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxData>();
        }
        result.poiData_.add(value);
        return this;
      }
      public Builder addPoiData(net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.Builder builderForValue) {
        if (result.poiData_.isEmpty()) {
          result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxData>();
        }
        result.poiData_.add(builderForValue.build());
        return this;
      }
      public Builder addAllPoiData(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndPoiBoxData> values) {
        if (result.poiData_.isEmpty()) {
          result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxData>();
        }
        super.addAll(values, result.poiData_);
        return this;
      }
      public Builder clearPoiData() {
        result.poiData_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiIndex)
    }
    
    static {
      defaultInstance = new OsmAndPoiIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiIndex)
  }
  
  public static final class OsmAndPoiNameIndex extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiNameIndex.newBuilder() to construct.
    private OsmAndPoiNameIndex() {
      initFields();
    }
    private OsmAndPoiNameIndex(boolean noInit) {}
    
    private static final OsmAndPoiNameIndex defaultInstance;
    public static OsmAndPoiNameIndex getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiNameIndex getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndex_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndex_fieldAccessorTable;
    }
    
    // required .IndexedStringTable table = 2;
    public static final int TABLE_FIELD_NUMBER = 2;
    private boolean hasTable;
    private net.osmand.binary.OsmandOdb.IndexedStringTable table_;
    public boolean hasTable() { return hasTable; }
    public net.osmand.binary.OsmandOdb.IndexedStringTable getTable() { return table_; }
    
    // repeated .OsmAndPoiNameIndexData data = 5;
    public static final int DATA_FIELD_NUMBER = 5;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData> data_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData> getDataList() {
      return data_;
    }
    public int getDataCount() { return data_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData getData(int index) {
      return data_.get(index);
    }
    
    private void initFields() {
      table_ = net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasTable) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasTable()) {
        output.writeMessage(2, getTable());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData element : getDataList()) {
        output.writeMessage(5, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasTable()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getTable());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData element : getDataList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.data_ != java.util.Collections.EMPTY_LIST) {
          result.data_ =
            java.util.Collections.unmodifiableList(result.data_);
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.getDefaultInstance()) return this;
        if (other.hasTable()) {
          mergeTable(other.getTable());
        }
        if (!other.data_.isEmpty()) {
          if (result.data_.isEmpty()) {
            result.data_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData>();
          }
          result.data_.addAll(other.data_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 18: {
              net.osmand.binary.OsmandOdb.IndexedStringTable.Builder subBuilder = net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder();
              if (hasTable()) {
                subBuilder.mergeFrom(getTable());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setTable(subBuilder.buildPartial());
              break;
            }
            case 42: {
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addData(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // required .IndexedStringTable table = 2;
      public boolean hasTable() {
        return result.hasTable();
      }
      public net.osmand.binary.OsmandOdb.IndexedStringTable getTable() {
        return result.getTable();
      }
      public Builder setTable(net.osmand.binary.OsmandOdb.IndexedStringTable value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasTable = true;
        result.table_ = value;
        return this;
      }
      public Builder setTable(net.osmand.binary.OsmandOdb.IndexedStringTable.Builder builderForValue) {
        result.hasTable = true;
        result.table_ = builderForValue.build();
        return this;
      }
      public Builder mergeTable(net.osmand.binary.OsmandOdb.IndexedStringTable value) {
        if (result.hasTable() &&
            result.table_ != net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance()) {
          result.table_ =
            net.osmand.binary.OsmandOdb.IndexedStringTable.newBuilder(result.table_).mergeFrom(value).buildPartial();
        } else {
          result.table_ = value;
        }
        result.hasTable = true;
        return this;
      }
      public Builder clearTable() {
        result.hasTable = false;
        result.table_ = net.osmand.binary.OsmandOdb.IndexedStringTable.getDefaultInstance();
        return this;
      }
      
      // repeated .OsmAndPoiNameIndexData data = 5;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData> getDataList() {
        return java.util.Collections.unmodifiableList(result.data_);
      }
      public int getDataCount() {
        return result.getDataCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData getData(int index) {
        return result.getData(index);
      }
      public Builder setData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.data_.set(index, value);
        return this;
      }
      public Builder setData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData.Builder builderForValue) {
        result.data_.set(index, builderForValue.build());
        return this;
      }
      public Builder addData(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.data_.isEmpty()) {
          result.data_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData>();
        }
        result.data_.add(value);
        return this;
      }
      public Builder addData(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData.Builder builderForValue) {
        if (result.data_.isEmpty()) {
          result.data_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData>();
        }
        result.data_.add(builderForValue.build());
        return this;
      }
      public Builder addAllData(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData> values) {
        if (result.data_.isEmpty()) {
          result.data_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData>();
        }
        super.addAll(values, result.data_);
        return this;
      }
      public Builder clearData() {
        result.data_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiNameIndex)
    }
    
    static {
      defaultInstance = new OsmAndPoiNameIndex(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiNameIndex)
  }
  
  public static final class OsmAndPoiNameIndexData extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiNameIndexData.newBuilder() to construct.
    private OsmAndPoiNameIndexData() {
      initFields();
    }
    private OsmAndPoiNameIndexData(boolean noInit) {}
    
    private static final OsmAndPoiNameIndexData defaultInstance;
    public static OsmAndPoiNameIndexData getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiNameIndexData getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndexData_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndexData_fieldAccessorTable;
    }
    
    // repeated .OsmAndPoiNameIndexDataAtom atoms = 4;
    public static final int ATOMS_FIELD_NUMBER = 4;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom> atoms_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom> getAtomsList() {
      return atoms_;
    }
    public int getAtomsCount() { return atoms_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom getAtoms(int index) {
      return atoms_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom element : getAtomsList()) {
        output.writeMessage(4, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      for (net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom element : getAtomsList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.atoms_ != java.util.Collections.EMPTY_LIST) {
          result.atoms_ =
            java.util.Collections.unmodifiableList(result.atoms_);
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData.getDefaultInstance()) return this;
        if (!other.atoms_.isEmpty()) {
          if (result.atoms_.isEmpty()) {
            result.atoms_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom>();
          }
          result.atoms_.addAll(other.atoms_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 34: {
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addAtoms(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // repeated .OsmAndPoiNameIndexDataAtom atoms = 4;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom> getAtomsList() {
        return java.util.Collections.unmodifiableList(result.atoms_);
      }
      public int getAtomsCount() {
        return result.getAtomsCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom getAtoms(int index) {
        return result.getAtoms(index);
      }
      public Builder setAtoms(int index, net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.atoms_.set(index, value);
        return this;
      }
      public Builder setAtoms(int index, net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.Builder builderForValue) {
        result.atoms_.set(index, builderForValue.build());
        return this;
      }
      public Builder addAtoms(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.atoms_.isEmpty()) {
          result.atoms_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom>();
        }
        result.atoms_.add(value);
        return this;
      }
      public Builder addAtoms(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.Builder builderForValue) {
        if (result.atoms_.isEmpty()) {
          result.atoms_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom>();
        }
        result.atoms_.add(builderForValue.build());
        return this;
      }
      public Builder addAllAtoms(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom> values) {
        if (result.atoms_.isEmpty()) {
          result.atoms_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom>();
        }
        super.addAll(values, result.atoms_);
        return this;
      }
      public Builder clearAtoms() {
        result.atoms_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiNameIndexData)
    }
    
    static {
      defaultInstance = new OsmAndPoiNameIndexData(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiNameIndexData)
  }
  
  public static final class OsmAndPoiNameIndexDataAtom extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiNameIndexDataAtom.newBuilder() to construct.
    private OsmAndPoiNameIndexDataAtom() {
      initFields();
    }
    private OsmAndPoiNameIndexDataAtom(boolean noInit) {}
    
    private static final OsmAndPoiNameIndexDataAtom defaultInstance;
    public static OsmAndPoiNameIndexDataAtom getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiNameIndexDataAtom getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndexDataAtom_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiNameIndexDataAtom_fieldAccessorTable;
    }
    
    // optional uint32 zoom = 2;
    public static final int ZOOM_FIELD_NUMBER = 2;
    private boolean hasZoom;
    private int zoom_ = 0;
    public boolean hasZoom() { return hasZoom; }
    public int getZoom() { return zoom_; }
    
    // optional uint32 x = 3;
    public static final int X_FIELD_NUMBER = 3;
    private boolean hasX;
    private int x_ = 0;
    public boolean hasX() { return hasX; }
    public int getX() { return x_; }
    
    // optional uint32 y = 4;
    public static final int Y_FIELD_NUMBER = 4;
    private boolean hasY;
    private int y_ = 0;
    public boolean hasY() { return hasY; }
    public int getY() { return y_; }
    
    // optional fixed32 shiftTo = 14;
    public static final int SHIFTTO_FIELD_NUMBER = 14;
    private boolean hasShiftTo;
    private int shiftTo_ = 0;
    public boolean hasShiftTo() { return hasShiftTo; }
    public int getShiftTo() { return shiftTo_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasZoom()) {
        output.writeUInt32(2, getZoom());
      }
      if (hasX()) {
        output.writeUInt32(3, getX());
      }
      if (hasY()) {
        output.writeUInt32(4, getY());
      }
      if (hasShiftTo()) {
        output.writeFixed32(14, getShiftTo());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasZoom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, getZoom());
      }
      if (hasX()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, getX());
      }
      if (hasY()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(4, getY());
      }
      if (hasShiftTo()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(14, getShiftTo());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.getDefaultInstance()) return this;
        if (other.hasZoom()) {
          setZoom(other.getZoom());
        }
        if (other.hasX()) {
          setX(other.getX());
        }
        if (other.hasY()) {
          setY(other.getY());
        }
        if (other.hasShiftTo()) {
          setShiftTo(other.getShiftTo());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 16: {
              setZoom(input.readUInt32());
              break;
            }
            case 24: {
              setX(input.readUInt32());
              break;
            }
            case 32: {
              setY(input.readUInt32());
              break;
            }
            case 117: {
              setShiftTo(input.readFixed32());
              break;
            }
          }
        }
      }
      
      
      // optional uint32 zoom = 2;
      public boolean hasZoom() {
        return result.hasZoom();
      }
      public int getZoom() {
        return result.getZoom();
      }
      public Builder setZoom(int value) {
        result.hasZoom = true;
        result.zoom_ = value;
        return this;
      }
      public Builder clearZoom() {
        result.hasZoom = false;
        result.zoom_ = 0;
        return this;
      }
      
      // optional uint32 x = 3;
      public boolean hasX() {
        return result.hasX();
      }
      public int getX() {
        return result.getX();
      }
      public Builder setX(int value) {
        result.hasX = true;
        result.x_ = value;
        return this;
      }
      public Builder clearX() {
        result.hasX = false;
        result.x_ = 0;
        return this;
      }
      
      // optional uint32 y = 4;
      public boolean hasY() {
        return result.hasY();
      }
      public int getY() {
        return result.getY();
      }
      public Builder setY(int value) {
        result.hasY = true;
        result.y_ = value;
        return this;
      }
      public Builder clearY() {
        result.hasY = false;
        result.y_ = 0;
        return this;
      }
      
      // optional fixed32 shiftTo = 14;
      public boolean hasShiftTo() {
        return result.hasShiftTo();
      }
      public int getShiftTo() {
        return result.getShiftTo();
      }
      public Builder setShiftTo(int value) {
        result.hasShiftTo = true;
        result.shiftTo_ = value;
        return this;
      }
      public Builder clearShiftTo() {
        result.hasShiftTo = false;
        result.shiftTo_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiNameIndexDataAtom)
    }
    
    static {
      defaultInstance = new OsmAndPoiNameIndexDataAtom(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiNameIndexDataAtom)
  }
  
  public static final class OsmAndCategoryTable extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndCategoryTable.newBuilder() to construct.
    private OsmAndCategoryTable() {
      initFields();
    }
    private OsmAndCategoryTable(boolean noInit) {}
    
    private static final OsmAndCategoryTable defaultInstance;
    public static OsmAndCategoryTable getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndCategoryTable getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndCategoryTable_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndCategoryTable_fieldAccessorTable;
    }
    
    // required string category = 1;
    public static final int CATEGORY_FIELD_NUMBER = 1;
    private boolean hasCategory;
    private java.lang.String category_ = "";
    public boolean hasCategory() { return hasCategory; }
    public java.lang.String getCategory() { return category_; }
    
    // repeated string subcategories = 3;
    public static final int SUBCATEGORIES_FIELD_NUMBER = 3;
    private java.util.List<java.lang.String> subcategories_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.String> getSubcategoriesList() {
      return subcategories_;
    }
    public int getSubcategoriesCount() { return subcategories_.size(); }
    public java.lang.String getSubcategories(int index) {
      return subcategories_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasCategory) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasCategory()) {
        output.writeString(1, getCategory());
      }
      for (java.lang.String element : getSubcategoriesList()) {
        output.writeString(3, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasCategory()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(1, getCategory());
      }
      {
        int dataSize = 0;
        for (java.lang.String element : getSubcategoriesList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeStringSizeNoTag(element);
        }
        size += dataSize;
        size += 1 * getSubcategoriesList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndCategoryTable parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndCategoryTable prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndCategoryTable result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndCategoryTable.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndCategoryTable();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndCategoryTable internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndCategoryTable();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndCategoryTable.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndCategoryTable getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndCategoryTable.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndCategoryTable build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndCategoryTable buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndCategoryTable buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.subcategories_ != java.util.Collections.EMPTY_LIST) {
          result.subcategories_ =
            java.util.Collections.unmodifiableList(result.subcategories_);
        }
        net.osmand.binary.OsmandOdb.OsmAndCategoryTable returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndCategoryTable) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndCategoryTable)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndCategoryTable other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndCategoryTable.getDefaultInstance()) return this;
        if (other.hasCategory()) {
          setCategory(other.getCategory());
        }
        if (!other.subcategories_.isEmpty()) {
          if (result.subcategories_.isEmpty()) {
            result.subcategories_ = new java.util.ArrayList<java.lang.String>();
          }
          result.subcategories_.addAll(other.subcategories_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 10: {
              setCategory(input.readString());
              break;
            }
            case 26: {
              addSubcategories(input.readString());
              break;
            }
          }
        }
      }
      
      
      // required string category = 1;
      public boolean hasCategory() {
        return result.hasCategory();
      }
      public java.lang.String getCategory() {
        return result.getCategory();
      }
      public Builder setCategory(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasCategory = true;
        result.category_ = value;
        return this;
      }
      public Builder clearCategory() {
        result.hasCategory = false;
        result.category_ = getDefaultInstance().getCategory();
        return this;
      }
      
      // repeated string subcategories = 3;
      public java.util.List<java.lang.String> getSubcategoriesList() {
        return java.util.Collections.unmodifiableList(result.subcategories_);
      }
      public int getSubcategoriesCount() {
        return result.getSubcategoriesCount();
      }
      public java.lang.String getSubcategories(int index) {
        return result.getSubcategories(index);
      }
      public Builder setSubcategories(int index, java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.subcategories_.set(index, value);
        return this;
      }
      public Builder addSubcategories(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  if (result.subcategories_.isEmpty()) {
          result.subcategories_ = new java.util.ArrayList<java.lang.String>();
        }
        result.subcategories_.add(value);
        return this;
      }
      public Builder addAllSubcategories(
          java.lang.Iterable<? extends java.lang.String> values) {
        if (result.subcategories_.isEmpty()) {
          result.subcategories_ = new java.util.ArrayList<java.lang.String>();
        }
        super.addAll(values, result.subcategories_);
        return this;
      }
      public Builder clearSubcategories() {
        result.subcategories_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndCategoryTable)
    }
    
    static {
      defaultInstance = new OsmAndCategoryTable(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndCategoryTable)
  }
  
  public static final class OsmAndPoiBox extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiBox.newBuilder() to construct.
    private OsmAndPoiBox() {
      initFields();
    }
    private OsmAndPoiBox(boolean noInit) {}
    
    private static final OsmAndPoiBox defaultInstance;
    public static OsmAndPoiBox getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiBox getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBox_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBox_fieldAccessorTable;
    }
    
    // required uint32 zoom = 1;
    public static final int ZOOM_FIELD_NUMBER = 1;
    private boolean hasZoom;
    private int zoom_ = 0;
    public boolean hasZoom() { return hasZoom; }
    public int getZoom() { return zoom_; }
    
    // required sint32 left = 2;
    public static final int LEFT_FIELD_NUMBER = 2;
    private boolean hasLeft;
    private int left_ = 0;
    public boolean hasLeft() { return hasLeft; }
    public int getLeft() { return left_; }
    
    // required sint32 top = 3;
    public static final int TOP_FIELD_NUMBER = 3;
    private boolean hasTop;
    private int top_ = 0;
    public boolean hasTop() { return hasTop; }
    public int getTop() { return top_; }
    
    // optional .OsmAndPoiCategories categories = 4;
    public static final int CATEGORIES_FIELD_NUMBER = 4;
    private boolean hasCategories;
    private net.osmand.binary.OsmandOdb.OsmAndPoiCategories categories_;
    public boolean hasCategories() { return hasCategories; }
    public net.osmand.binary.OsmandOdb.OsmAndPoiCategories getCategories() { return categories_; }
    
    // repeated .OsmAndPoiBox subBoxes = 10;
    public static final int SUBBOXES_FIELD_NUMBER = 10;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBox> subBoxes_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBox> getSubBoxesList() {
      return subBoxes_;
    }
    public int getSubBoxesCount() { return subBoxes_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndPoiBox getSubBoxes(int index) {
      return subBoxes_.get(index);
    }
    
    // optional fixed32 shiftToData = 14;
    public static final int SHIFTTODATA_FIELD_NUMBER = 14;
    private boolean hasShiftToData;
    private int shiftToData_ = 0;
    public boolean hasShiftToData() { return hasShiftToData; }
    public int getShiftToData() { return shiftToData_; }
    
    private void initFields() {
      categories_ = net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance();
    }
    @Override
	public final boolean isInitialized() {
      if (!hasZoom) return false;
      if (!hasLeft) return false;
      if (!hasTop) return false;
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getSubBoxesList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasZoom()) {
        output.writeUInt32(1, getZoom());
      }
      if (hasLeft()) {
        output.writeSInt32(2, getLeft());
      }
      if (hasTop()) {
        output.writeSInt32(3, getTop());
      }
      if (hasCategories()) {
        output.writeMessage(4, getCategories());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getSubBoxesList()) {
        output.writeMessage(10, element);
      }
      if (hasShiftToData()) {
        output.writeFixed32(14, getShiftToData());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasZoom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, getZoom());
      }
      if (hasLeft()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(2, getLeft());
      }
      if (hasTop()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(3, getTop());
      }
      if (hasCategories()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(4, getCategories());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBox element : getSubBoxesList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(10, element);
      }
      if (hasShiftToData()) {
        size += com.google.protobuf.CodedOutputStream
          .computeFixed32Size(14, getShiftToData());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBox parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiBox prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiBox result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiBox.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiBox();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiBox internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiBox();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiBox.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBox getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiBox.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBox build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiBox buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBox buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.subBoxes_ != java.util.Collections.EMPTY_LIST) {
          result.subBoxes_ =
            java.util.Collections.unmodifiableList(result.subBoxes_);
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiBox returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiBox) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiBox)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiBox other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiBox.getDefaultInstance()) return this;
        if (other.hasZoom()) {
          setZoom(other.getZoom());
        }
        if (other.hasLeft()) {
          setLeft(other.getLeft());
        }
        if (other.hasTop()) {
          setTop(other.getTop());
        }
        if (other.hasCategories()) {
          mergeCategories(other.getCategories());
        }
        if (!other.subBoxes_.isEmpty()) {
          if (result.subBoxes_.isEmpty()) {
            result.subBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
          }
          result.subBoxes_.addAll(other.subBoxes_);
        }
        if (other.hasShiftToData()) {
          setShiftToData(other.getShiftToData());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setZoom(input.readUInt32());
              break;
            }
            case 16: {
              setLeft(input.readSInt32());
              break;
            }
            case 24: {
              setTop(input.readSInt32());
              break;
            }
            case 34: {
              net.osmand.binary.OsmandOdb.OsmAndPoiCategories.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiCategories.newBuilder();
              if (hasCategories()) {
                subBuilder.mergeFrom(getCategories());
              }
              input.readMessage(subBuilder, extensionRegistry);
              setCategories(subBuilder.buildPartial());
              break;
            }
            case 82: {
              net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiBox.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addSubBoxes(subBuilder.buildPartial());
              break;
            }
            case 117: {
              setShiftToData(input.readFixed32());
              break;
            }
          }
        }
      }
      
      
      // required uint32 zoom = 1;
      public boolean hasZoom() {
        return result.hasZoom();
      }
      public int getZoom() {
        return result.getZoom();
      }
      public Builder setZoom(int value) {
        result.hasZoom = true;
        result.zoom_ = value;
        return this;
      }
      public Builder clearZoom() {
        result.hasZoom = false;
        result.zoom_ = 0;
        return this;
      }
      
      // required sint32 left = 2;
      public boolean hasLeft() {
        return result.hasLeft();
      }
      public int getLeft() {
        return result.getLeft();
      }
      public Builder setLeft(int value) {
        result.hasLeft = true;
        result.left_ = value;
        return this;
      }
      public Builder clearLeft() {
        result.hasLeft = false;
        result.left_ = 0;
        return this;
      }
      
      // required sint32 top = 3;
      public boolean hasTop() {
        return result.hasTop();
      }
      public int getTop() {
        return result.getTop();
      }
      public Builder setTop(int value) {
        result.hasTop = true;
        result.top_ = value;
        return this;
      }
      public Builder clearTop() {
        result.hasTop = false;
        result.top_ = 0;
        return this;
      }
      
      // optional .OsmAndPoiCategories categories = 4;
      public boolean hasCategories() {
        return result.hasCategories();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiCategories getCategories() {
        return result.getCategories();
      }
      public Builder setCategories(net.osmand.binary.OsmandOdb.OsmAndPoiCategories value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.hasCategories = true;
        result.categories_ = value;
        return this;
      }
      public Builder setCategories(net.osmand.binary.OsmandOdb.OsmAndPoiCategories.Builder builderForValue) {
        result.hasCategories = true;
        result.categories_ = builderForValue.build();
        return this;
      }
      public Builder mergeCategories(net.osmand.binary.OsmandOdb.OsmAndPoiCategories value) {
        if (result.hasCategories() &&
            result.categories_ != net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance()) {
          result.categories_ =
            net.osmand.binary.OsmandOdb.OsmAndPoiCategories.newBuilder(result.categories_).mergeFrom(value).buildPartial();
        } else {
          result.categories_ = value;
        }
        result.hasCategories = true;
        return this;
      }
      public Builder clearCategories() {
        result.hasCategories = false;
        result.categories_ = net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance();
        return this;
      }
      
      // repeated .OsmAndPoiBox subBoxes = 10;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBox> getSubBoxesList() {
        return java.util.Collections.unmodifiableList(result.subBoxes_);
      }
      public int getSubBoxesCount() {
        return result.getSubBoxesCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiBox getSubBoxes(int index) {
        return result.getSubBoxes(index);
      }
      public Builder setSubBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.subBoxes_.set(index, value);
        return this;
      }
      public Builder setSubBoxes(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder builderForValue) {
        result.subBoxes_.set(index, builderForValue.build());
        return this;
      }
      public Builder addSubBoxes(net.osmand.binary.OsmandOdb.OsmAndPoiBox value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.subBoxes_.isEmpty()) {
          result.subBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
        }
        result.subBoxes_.add(value);
        return this;
      }
      public Builder addSubBoxes(net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder builderForValue) {
        if (result.subBoxes_.isEmpty()) {
          result.subBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
        }
        result.subBoxes_.add(builderForValue.build());
        return this;
      }
      public Builder addAllSubBoxes(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndPoiBox> values) {
        if (result.subBoxes_.isEmpty()) {
          result.subBoxes_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBox>();
        }
        super.addAll(values, result.subBoxes_);
        return this;
      }
      public Builder clearSubBoxes() {
        result.subBoxes_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional fixed32 shiftToData = 14;
      public boolean hasShiftToData() {
        return result.hasShiftToData();
      }
      public int getShiftToData() {
        return result.getShiftToData();
      }
      public Builder setShiftToData(int value) {
        result.hasShiftToData = true;
        result.shiftToData_ = value;
        return this;
      }
      public Builder clearShiftToData() {
        result.hasShiftToData = false;
        result.shiftToData_ = 0;
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiBox)
    }
    
    static {
      defaultInstance = new OsmAndPoiBox(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiBox)
  }
  
  public static final class OsmAndPoiCategories extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiCategories.newBuilder() to construct.
    private OsmAndPoiCategories() {
      initFields();
    }
    private OsmAndPoiCategories(boolean noInit) {}
    
    private static final OsmAndPoiCategories defaultInstance;
    public static OsmAndPoiCategories getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiCategories getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiCategories_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiCategories_fieldAccessorTable;
    }
    
    // repeated uint32 categories = 3;
    public static final int CATEGORIES_FIELD_NUMBER = 3;
    private java.util.List<java.lang.Integer> categories_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getCategoriesList() {
      return categories_;
    }
    public int getCategoriesCount() { return categories_.size(); }
    public int getCategories(int index) {
      return categories_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      for (int element : getCategoriesList()) {
        output.writeUInt32(3, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      {
        int dataSize = 0;
        for (int element : getCategoriesList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(element);
        }
        size += dataSize;
        size += 1 * getCategoriesList().size();
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiCategories parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiCategories prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiCategories result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiCategories.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiCategories();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiCategories internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiCategories();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiCategories getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiCategories build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiCategories buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiCategories buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.categories_ != java.util.Collections.EMPTY_LIST) {
          result.categories_ =
            java.util.Collections.unmodifiableList(result.categories_);
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiCategories returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiCategories) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiCategories)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiCategories other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiCategories.getDefaultInstance()) return this;
        if (!other.categories_.isEmpty()) {
          if (result.categories_.isEmpty()) {
            result.categories_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.categories_.addAll(other.categories_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 24: {
              addCategories(input.readUInt32());
              break;
            }
            case 26: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addCategories(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
          }
        }
      }
      
      
      // repeated uint32 categories = 3;
      public java.util.List<java.lang.Integer> getCategoriesList() {
        return java.util.Collections.unmodifiableList(result.categories_);
      }
      public int getCategoriesCount() {
        return result.getCategoriesCount();
      }
      public int getCategories(int index) {
        return result.getCategories(index);
      }
      public Builder setCategories(int index, int value) {
        result.categories_.set(index, value);
        return this;
      }
      public Builder addCategories(int value) {
        if (result.categories_.isEmpty()) {
          result.categories_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.categories_.add(value);
        return this;
      }
      public Builder addAllCategories(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.categories_.isEmpty()) {
          result.categories_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.categories_);
        return this;
      }
      public Builder clearCategories() {
        result.categories_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiCategories)
    }
    
    static {
      defaultInstance = new OsmAndPoiCategories(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiCategories)
  }
  
  public static final class OsmAndPoiBoxData extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiBoxData.newBuilder() to construct.
    private OsmAndPoiBoxData() {
      initFields();
    }
    private OsmAndPoiBoxData(boolean noInit) {}
    
    private static final OsmAndPoiBoxData defaultInstance;
    public static OsmAndPoiBoxData getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiBoxData getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBoxData_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBoxData_fieldAccessorTable;
    }
    
    // optional uint32 zoom = 1;
    public static final int ZOOM_FIELD_NUMBER = 1;
    private boolean hasZoom;
    private int zoom_ = 0;
    public boolean hasZoom() { return hasZoom; }
    public int getZoom() { return zoom_; }
    
    // optional uint32 x = 2;
    public static final int X_FIELD_NUMBER = 2;
    private boolean hasX;
    private int x_ = 0;
    public boolean hasX() { return hasX; }
    public int getX() { return x_; }
    
    // optional uint32 y = 3;
    public static final int Y_FIELD_NUMBER = 3;
    private boolean hasY;
    private int y_ = 0;
    public boolean hasY() { return hasY; }
    public int getY() { return y_; }
    
    // repeated .OsmAndPoiBoxDataAtom poiData = 5;
    public static final int POIDATA_FIELD_NUMBER = 5;
    private java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom> poiData_ =
      java.util.Collections.emptyList();
    public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom> getPoiDataList() {
      return poiData_;
    }
    public int getPoiDataCount() { return poiData_.size(); }
    public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom getPoiData(int index) {
      return poiData_.get(index);
    }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom element : getPoiDataList()) {
        if (!element.isInitialized()) return false;
      }
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasZoom()) {
        output.writeUInt32(1, getZoom());
      }
      if (hasX()) {
        output.writeUInt32(2, getX());
      }
      if (hasY()) {
        output.writeUInt32(3, getY());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom element : getPoiDataList()) {
        output.writeMessage(5, element);
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasZoom()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(1, getZoom());
      }
      if (hasX()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(2, getX());
      }
      if (hasY()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt32Size(3, getY());
      }
      for (net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom element : getPoiDataList()) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(5, element);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxData parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiBoxData prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiBoxData result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiBoxData();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiBoxData internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiBoxData();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiBoxData buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBoxData buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.poiData_ != java.util.Collections.EMPTY_LIST) {
          result.poiData_ =
            java.util.Collections.unmodifiableList(result.poiData_);
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiBoxData returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiBoxData) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiBoxData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiBoxData other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.getDefaultInstance()) return this;
        if (other.hasZoom()) {
          setZoom(other.getZoom());
        }
        if (other.hasX()) {
          setX(other.getX());
        }
        if (other.hasY()) {
          setY(other.getY());
        }
        if (!other.poiData_.isEmpty()) {
          if (result.poiData_.isEmpty()) {
            result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom>();
          }
          result.poiData_.addAll(other.poiData_);
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 8: {
              setZoom(input.readUInt32());
              break;
            }
            case 16: {
              setX(input.readUInt32());
              break;
            }
            case 24: {
              setY(input.readUInt32());
              break;
            }
            case 42: {
              net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.Builder subBuilder = net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.newBuilder();
              input.readMessage(subBuilder, extensionRegistry);
              addPoiData(subBuilder.buildPartial());
              break;
            }
          }
        }
      }
      
      
      // optional uint32 zoom = 1;
      public boolean hasZoom() {
        return result.hasZoom();
      }
      public int getZoom() {
        return result.getZoom();
      }
      public Builder setZoom(int value) {
        result.hasZoom = true;
        result.zoom_ = value;
        return this;
      }
      public Builder clearZoom() {
        result.hasZoom = false;
        result.zoom_ = 0;
        return this;
      }
      
      // optional uint32 x = 2;
      public boolean hasX() {
        return result.hasX();
      }
      public int getX() {
        return result.getX();
      }
      public Builder setX(int value) {
        result.hasX = true;
        result.x_ = value;
        return this;
      }
      public Builder clearX() {
        result.hasX = false;
        result.x_ = 0;
        return this;
      }
      
      // optional uint32 y = 3;
      public boolean hasY() {
        return result.hasY();
      }
      public int getY() {
        return result.getY();
      }
      public Builder setY(int value) {
        result.hasY = true;
        result.y_ = value;
        return this;
      }
      public Builder clearY() {
        result.hasY = false;
        result.y_ = 0;
        return this;
      }
      
      // repeated .OsmAndPoiBoxDataAtom poiData = 5;
      public java.util.List<net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom> getPoiDataList() {
        return java.util.Collections.unmodifiableList(result.poiData_);
      }
      public int getPoiDataCount() {
        return result.getPoiDataCount();
      }
      public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom getPoiData(int index) {
        return result.getPoiData(index);
      }
      public Builder setPoiData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom value) {
        if (value == null) {
          throw new NullPointerException();
        }
        result.poiData_.set(index, value);
        return this;
      }
      public Builder setPoiData(int index, net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.Builder builderForValue) {
        result.poiData_.set(index, builderForValue.build());
        return this;
      }
      public Builder addPoiData(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom value) {
        if (value == null) {
          throw new NullPointerException();
        }
        if (result.poiData_.isEmpty()) {
          result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom>();
        }
        result.poiData_.add(value);
        return this;
      }
      public Builder addPoiData(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.Builder builderForValue) {
        if (result.poiData_.isEmpty()) {
          result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom>();
        }
        result.poiData_.add(builderForValue.build());
        return this;
      }
      public Builder addAllPoiData(
          java.lang.Iterable<? extends net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom> values) {
        if (result.poiData_.isEmpty()) {
          result.poiData_ = new java.util.ArrayList<net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom>();
        }
        super.addAll(values, result.poiData_);
        return this;
      }
      public Builder clearPoiData() {
        result.poiData_ = java.util.Collections.emptyList();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiBoxData)
    }
    
    static {
      defaultInstance = new OsmAndPoiBoxData(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiBoxData)
  }
  
  public static final class OsmAndPoiBoxDataAtom extends
      com.google.protobuf.GeneratedMessage {
    // Use OsmAndPoiBoxDataAtom.newBuilder() to construct.
    private OsmAndPoiBoxDataAtom() {
      initFields();
    }
    private OsmAndPoiBoxDataAtom(boolean noInit) {}
    
    private static final OsmAndPoiBoxDataAtom defaultInstance;
    public static OsmAndPoiBoxDataAtom getDefaultInstance() {
      return defaultInstance;
    }
    
    @Override
	public OsmAndPoiBoxDataAtom getDefaultInstanceForType() {
      return defaultInstance;
    }
    
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBoxDataAtom_descriptor;
    }
    
    @Override
	protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return net.osmand.binary.OsmandOdb.internal_static_OsmAndPoiBoxDataAtom_fieldAccessorTable;
    }
    
    // required sint32 dx = 2;
    public static final int DX_FIELD_NUMBER = 2;
    private boolean hasDx;
    private int dx_ = 0;
    public boolean hasDx() { return hasDx; }
    public int getDx() { return dx_; }
    
    // required sint32 dy = 3;
    public static final int DY_FIELD_NUMBER = 3;
    private boolean hasDy;
    private int dy_ = 0;
    public boolean hasDy() { return hasDy; }
    public int getDy() { return dy_; }
    
    // repeated uint32 categories = 4;
    public static final int CATEGORIES_FIELD_NUMBER = 4;
    private java.util.List<java.lang.Integer> categories_ =
      java.util.Collections.emptyList();
    public java.util.List<java.lang.Integer> getCategoriesList() {
      return categories_;
    }
    public int getCategoriesCount() { return categories_.size(); }
    public int getCategories(int index) {
      return categories_.get(index);
    }
    
    // optional string name = 6;
    public static final int NAME_FIELD_NUMBER = 6;
    private boolean hasName;
    private java.lang.String name_ = "";
    public boolean hasName() { return hasName; }
    public java.lang.String getName() { return name_; }
    
    // optional string nameEn = 7;
    public static final int NAMEEN_FIELD_NUMBER = 7;
    private boolean hasNameEn;
    private java.lang.String nameEn_ = "";
    public boolean hasNameEn() { return hasNameEn; }
    public java.lang.String getNameEn() { return nameEn_; }
    
    // optional uint64 id = 8;
    public static final int ID_FIELD_NUMBER = 8;
    private boolean hasId;
    private long id_ = 0L;
    public boolean hasId() { return hasId; }
    public long getId() { return id_; }
    
    // optional string openingHours = 10;
    public static final int OPENINGHOURS_FIELD_NUMBER = 10;
    private boolean hasOpeningHours;
    private java.lang.String openingHours_ = "";
    public boolean hasOpeningHours() { return hasOpeningHours; }
    public java.lang.String getOpeningHours() { return openingHours_; }
    
    // optional string site = 11;
    public static final int SITE_FIELD_NUMBER = 11;
    private boolean hasSite;
    private java.lang.String site_ = "";
    public boolean hasSite() { return hasSite; }
    public java.lang.String getSite() { return site_; }
    
    // optional string phone = 12;
    public static final int PHONE_FIELD_NUMBER = 12;
    private boolean hasPhone;
    private java.lang.String phone_ = "";
    public boolean hasPhone() { return hasPhone; }
    public java.lang.String getPhone() { return phone_; }
    
    // optional string note = 13;
    public static final int NOTE_FIELD_NUMBER = 13;
    private boolean hasNote;
    private java.lang.String note_ = "";
    public boolean hasNote() { return hasNote; }
    public java.lang.String getNote() { return note_; }
    
    private void initFields() {
    }
    @Override
	public final boolean isInitialized() {
      if (!hasDx) return false;
      if (!hasDy) return false;
      return true;
    }
    
    @Override
	public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (hasDx()) {
        output.writeSInt32(2, getDx());
      }
      if (hasDy()) {
        output.writeSInt32(3, getDy());
      }
      for (int element : getCategoriesList()) {
        output.writeUInt32(4, element);
      }
      if (hasName()) {
        output.writeString(6, getName());
      }
      if (hasNameEn()) {
        output.writeString(7, getNameEn());
      }
      if (hasId()) {
        output.writeUInt64(8, getId());
      }
      if (hasOpeningHours()) {
        output.writeString(10, getOpeningHours());
      }
      if (hasSite()) {
        output.writeString(11, getSite());
      }
      if (hasPhone()) {
        output.writeString(12, getPhone());
      }
      if (hasNote()) {
        output.writeString(13, getNote());
      }
      getUnknownFields().writeTo(output);
    }
    
    private int memoizedSerializedSize = -1;
    @Override
	public int getSerializedSize() {
      int size = memoizedSerializedSize;
      if (size != -1) return size;
    
      size = 0;
      if (hasDx()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(2, getDx());
      }
      if (hasDy()) {
        size += com.google.protobuf.CodedOutputStream
          .computeSInt32Size(3, getDy());
      }
      {
        int dataSize = 0;
        for (int element : getCategoriesList()) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(element);
        }
        size += dataSize;
        size += 1 * getCategoriesList().size();
      }
      if (hasName()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(6, getName());
      }
      if (hasNameEn()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(7, getNameEn());
      }
      if (hasId()) {
        size += com.google.protobuf.CodedOutputStream
          .computeUInt64Size(8, getId());
      }
      if (hasOpeningHours()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(10, getOpeningHours());
      }
      if (hasSite()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(11, getSite());
      }
      if (hasPhone()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(12, getPhone());
      }
      if (hasNote()) {
        size += com.google.protobuf.CodedOutputStream
          .computeStringSize(13, getNote());
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSerializedSize = size;
      return size;
    }
    
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return newBuilder().mergeFrom(data, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      Builder builder = newBuilder();
      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
        return builder.buildParsed();
      } else {
        return null;
      }
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input).buildParsed();
    }
    public static net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return newBuilder().mergeFrom(input, extensionRegistry)
               .buildParsed();
    }
    
    public static Builder newBuilder() { return Builder.create(); }
    @Override
	public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom prototype) {
      return newBuilder().mergeFrom(prototype);
    }
    @Override
	public Builder toBuilder() { return newBuilder(this); }
    
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder<Builder> {
      private net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom result;
      
      // Construct using net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.newBuilder()
      private Builder() {}
      
      private static Builder create() {
        Builder builder = new Builder();
        builder.result = new net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom();
        return builder;
      }
      
      @Override
	protected net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom internalGetResult() {
        return result;
      }
      
      @Override
	public Builder clear() {
        if (result == null) {
          throw new IllegalStateException(
            "Cannot call clear() after build().");
        }
        result = new net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom();
        return this;
      }
      
      @Override
	public Builder clone() {
        return create().mergeFrom(result);
      }
      
      @Override
	public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.getDescriptor();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom getDefaultInstanceForType() {
        return net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.getDefaultInstance();
      }
      
      @Override
	public boolean isInitialized() {
        return result.isInitialized();
      }
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom build() {
        if (result != null && !isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return buildPartial();
      }
      
      private net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom buildParsed()
          throws com.google.protobuf.InvalidProtocolBufferException {
        if (!isInitialized()) {
          throw newUninitializedMessageException(
            result).asInvalidProtocolBufferException();
        }
        return buildPartial();
      }
      
      @Override
	public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom buildPartial() {
        if (result == null) {
          throw new IllegalStateException(
            "build() has already been called on this Builder.");
        }
        if (result.categories_ != java.util.Collections.EMPTY_LIST) {
          result.categories_ =
            java.util.Collections.unmodifiableList(result.categories_);
        }
        net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom returnMe = result;
        result = null;
        return returnMe;
      }
      
      @Override
	public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom) {
          return mergeFrom((net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }
      
      public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom other) {
        if (other == net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.getDefaultInstance()) return this;
        if (other.hasDx()) {
          setDx(other.getDx());
        }
        if (other.hasDy()) {
          setDy(other.getDy());
        }
        if (!other.categories_.isEmpty()) {
          if (result.categories_.isEmpty()) {
            result.categories_ = new java.util.ArrayList<java.lang.Integer>();
          }
          result.categories_.addAll(other.categories_);
        }
        if (other.hasName()) {
          setName(other.getName());
        }
        if (other.hasNameEn()) {
          setNameEn(other.getNameEn());
        }
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasOpeningHours()) {
          setOpeningHours(other.getOpeningHours());
        }
        if (other.hasSite()) {
          setSite(other.getSite());
        }
        if (other.hasPhone()) {
          setPhone(other.getPhone());
        }
        if (other.hasNote()) {
          setNote(other.getNote());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }
      
      @Override
	public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
          com.google.protobuf.UnknownFieldSet.newBuilder(
            this.getUnknownFields());
        while (true) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              this.setUnknownFields(unknownFields.build());
              return this;
            default: {
              if (!parseUnknownField(input, unknownFields,
                                     extensionRegistry, tag)) {
                this.setUnknownFields(unknownFields.build());
                return this;
              }
              break;
            }
            case 16: {
              setDx(input.readSInt32());
              break;
            }
            case 24: {
              setDy(input.readSInt32());
              break;
            }
            case 32: {
              addCategories(input.readUInt32());
              break;
            }
            case 34: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              while (input.getBytesUntilLimit() > 0) {
                addCategories(input.readUInt32());
              }
              input.popLimit(limit);
              break;
            }
            case 50: {
              setName(input.readString());
              break;
            }
            case 58: {
              setNameEn(input.readString());
              break;
            }
            case 64: {
              setId(input.readUInt64());
              break;
            }
            case 82: {
              setOpeningHours(input.readString());
              break;
            }
            case 90: {
              setSite(input.readString());
              break;
            }
            case 98: {
              setPhone(input.readString());
              break;
            }
            case 106: {
              setNote(input.readString());
              break;
            }
          }
        }
      }
      
      
      // required sint32 dx = 2;
      public boolean hasDx() {
        return result.hasDx();
      }
      public int getDx() {
        return result.getDx();
      }
      public Builder setDx(int value) {
        result.hasDx = true;
        result.dx_ = value;
        return this;
      }
      public Builder clearDx() {
        result.hasDx = false;
        result.dx_ = 0;
        return this;
      }
      
      // required sint32 dy = 3;
      public boolean hasDy() {
        return result.hasDy();
      }
      public int getDy() {
        return result.getDy();
      }
      public Builder setDy(int value) {
        result.hasDy = true;
        result.dy_ = value;
        return this;
      }
      public Builder clearDy() {
        result.hasDy = false;
        result.dy_ = 0;
        return this;
      }
      
      // repeated uint32 categories = 4;
      public java.util.List<java.lang.Integer> getCategoriesList() {
        return java.util.Collections.unmodifiableList(result.categories_);
      }
      public int getCategoriesCount() {
        return result.getCategoriesCount();
      }
      public int getCategories(int index) {
        return result.getCategories(index);
      }
      public Builder setCategories(int index, int value) {
        result.categories_.set(index, value);
        return this;
      }
      public Builder addCategories(int value) {
        if (result.categories_.isEmpty()) {
          result.categories_ = new java.util.ArrayList<java.lang.Integer>();
        }
        result.categories_.add(value);
        return this;
      }
      public Builder addAllCategories(
          java.lang.Iterable<? extends java.lang.Integer> values) {
        if (result.categories_.isEmpty()) {
          result.categories_ = new java.util.ArrayList<java.lang.Integer>();
        }
        super.addAll(values, result.categories_);
        return this;
      }
      public Builder clearCategories() {
        result.categories_ = java.util.Collections.emptyList();
        return this;
      }
      
      // optional string name = 6;
      public boolean hasName() {
        return result.hasName();
      }
      public java.lang.String getName() {
        return result.getName();
      }
      public Builder setName(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasName = true;
        result.name_ = value;
        return this;
      }
      public Builder clearName() {
        result.hasName = false;
        result.name_ = getDefaultInstance().getName();
        return this;
      }
      
      // optional string nameEn = 7;
      public boolean hasNameEn() {
        return result.hasNameEn();
      }
      public java.lang.String getNameEn() {
        return result.getNameEn();
      }
      public Builder setNameEn(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNameEn = true;
        result.nameEn_ = value;
        return this;
      }
      public Builder clearNameEn() {
        result.hasNameEn = false;
        result.nameEn_ = getDefaultInstance().getNameEn();
        return this;
      }
      
      // optional uint64 id = 8;
      public boolean hasId() {
        return result.hasId();
      }
      public long getId() {
        return result.getId();
      }
      public Builder setId(long value) {
        result.hasId = true;
        result.id_ = value;
        return this;
      }
      public Builder clearId() {
        result.hasId = false;
        result.id_ = 0L;
        return this;
      }
      
      // optional string openingHours = 10;
      public boolean hasOpeningHours() {
        return result.hasOpeningHours();
      }
      public java.lang.String getOpeningHours() {
        return result.getOpeningHours();
      }
      public Builder setOpeningHours(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasOpeningHours = true;
        result.openingHours_ = value;
        return this;
      }
      public Builder clearOpeningHours() {
        result.hasOpeningHours = false;
        result.openingHours_ = getDefaultInstance().getOpeningHours();
        return this;
      }
      
      // optional string site = 11;
      public boolean hasSite() {
        return result.hasSite();
      }
      public java.lang.String getSite() {
        return result.getSite();
      }
      public Builder setSite(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasSite = true;
        result.site_ = value;
        return this;
      }
      public Builder clearSite() {
        result.hasSite = false;
        result.site_ = getDefaultInstance().getSite();
        return this;
      }
      
      // optional string phone = 12;
      public boolean hasPhone() {
        return result.hasPhone();
      }
      public java.lang.String getPhone() {
        return result.getPhone();
      }
      public Builder setPhone(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasPhone = true;
        result.phone_ = value;
        return this;
      }
      public Builder clearPhone() {
        result.hasPhone = false;
        result.phone_ = getDefaultInstance().getPhone();
        return this;
      }
      
      // optional string note = 13;
      public boolean hasNote() {
        return result.hasNote();
      }
      public java.lang.String getNote() {
        return result.getNote();
      }
      public Builder setNote(java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  result.hasNote = true;
        result.note_ = value;
        return this;
      }
      public Builder clearNote() {
        result.hasNote = false;
        result.note_ = getDefaultInstance().getNote();
        return this;
      }
      
      // @@protoc_insertion_point(builder_scope:OsmAndPoiBoxDataAtom)
    }
    
    static {
      defaultInstance = new OsmAndPoiBoxDataAtom(true);
      net.osmand.binary.OsmandOdb.internalForceInit();
      defaultInstance.initFields();
    }
    
    // @@protoc_insertion_point(class_scope:OsmAndPoiBoxDataAtom)
  }
  
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndStructure_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndStructure_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_StringTable_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_StringTable_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_IndexedStringTable_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_IndexedStringTable_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndMapIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndMapIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_MapEncodingRule_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_MapEncodingRule_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_MapRootLevel_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_MapRootLevel_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_MapTree_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_MapTree_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_MapData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_MapData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndAddressIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndAddressIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_CitiesIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_CitiesIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_PostcodesIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_PostcodesIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_CityIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_CityIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_InteresectedStreets_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_InteresectedStreets_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_StreetIntersection_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_StreetIntersection_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_PostcodeIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_PostcodeIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_StreetIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_StreetIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_BuildingIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_BuildingIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TransportRoutes_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TransportRoutes_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TransportRoute_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TransportRoute_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TransportRouteStop_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TransportRouteStop_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TransportStop_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TransportStop_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_TransportStopsTree_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_TransportStopsTree_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndTransportIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndTransportIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndTileBox_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndTileBox_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiNameIndex_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiNameIndex_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiNameIndexData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiNameIndexData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiNameIndexDataAtom_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiNameIndexDataAtom_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndCategoryTable_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndCategoryTable_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiBox_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiBox_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiCategories_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiCategories_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiBoxData_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiBoxData_fieldAccessorTable;
  private static com.google.protobuf.Descriptors.Descriptor
    internal_static_OsmAndPoiBoxDataAtom_descriptor;
  private static
    com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internal_static_OsmAndPoiBoxDataAtom_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\024src/osmand_odb.proto\"\332\001\n\017OsmAndStructu" +
      "re\022\017\n\007version\030\001 \002(\r\022!\n\010mapIndex\030\002 \003(\0132\017." +
      "OsmAndMapIndex\022)\n\014addressIndex\030\003 \003(\0132\023.O" +
      "smAndAddressIndex\022-\n\016transportIndex\030\004 \003(" +
      "\0132\025.OsmAndTransportIndex\022!\n\010poiIndex\030\005 \003" +
      "(\0132\017.OsmAndPoiIndex\022\026\n\016versionConfirm\030  " +
      "\002(\r\"\030\n\013StringTable\022\t\n\001s\030\001 \003(\t\"f\n\022Indexed" +
      "StringTable\022\016\n\006prefix\030\001 \001(\t\022\013\n\003key\030\003 \003(\t" +
      "\022\013\n\003val\030\004 \003(\r\022&\n\tsubtables\030\005 \003(\0132\023.Index" +
      "edStringTable\"^\n\016OsmAndMapIndex\022\035\n\006level",
      "s\030\001 \003(\0132\r.MapRootLevel\022\014\n\004name\030\003 \001(\t\022\037\n\005" +
      "rules\030\010 \003(\0132\020.MapEncodingRule\"]\n\017MapEnco" +
      "dingRule\022\013\n\003tag\030\003 \002(\t\022\r\n\005value\030\005 \001(\t\022\014\n\004" +
      "type\030\006 \002(\r\022\017\n\007subtype\030\007 \002(\r\022\017\n\007minZoom\030\t" +
      " \001(\r\"\202\001\n\014MapRootLevel\022\017\n\007maxZoom\030\001 \002(\005\022\017" +
      "\n\007minZoom\030\002 \002(\005\022\014\n\004left\030\003 \002(\005\022\r\n\005right\030\004" +
      " \002(\005\022\013\n\003top\030\005 \002(\005\022\016\n\006bottom\030\006 \002(\005\022\026\n\004roo" +
      "t\030\007 \003(\0132\010.MapTree\"\344\001\n\007MapTree\022\014\n\004left\030\001 " +
      "\002(\021\022\r\n\005right\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\022\016\n\006botto" +
      "m\030\004 \002(\021\022$\n\016oldstringTable\030\005 \001(\0132\014.String",
      "Table\022\021\n\toldbaseId\030\006 \001(\004\022\032\n\010subtrees\030\007 \003" +
      "(\0132\010.MapTree\022\027\n\005leafs\030\010 \003(\0132\010.MapData\022\016\n" +
      "\006baseId\030\n \001(\004\022!\n\013stringTable\030\013 \001(\0132\014.Str" +
      "ingTable\"v\n\007MapData\022\023\n\013coordinates\030\001 \002(\014" +
      "\022\r\n\005types\030\002 \002(\014\022\n\n\002id\030\003 \002(\022\022\020\n\010stringId\030" +
      "\004 \001(\r\022\024\n\014restrictions\030\005 \001(\014\022\023\n\013highwayMe" +
      "ta\030\006 \001(\005\"\225\001\n\022OsmAndAddressIndex\022\014\n\004name\030" +
      "\001 \002(\t\022\017\n\007name_en\030\002 \001(\t\022\034\n\006cities\030\005 \001(\0132\014" +
      ".CitiesIndex\022\"\n\tpostcodes\030\006 \001(\0132\017.Postco" +
      "desIndex\022\036\n\010villages\030\007 \001(\0132\014.CitiesIndex",
      "\")\n\013CitiesIndex\022\032\n\006cities\030\001 \003(\0132\n.CityIn" +
      "dex\"3\n\016PostcodesIndex\022!\n\tpostcodes\030\001 \003(\013" +
      "2\016.PostcodeIndex\"\253\001\n\tCityIndex\022\021\n\tcity_t" +
      "ype\030\001 \002(\r\022\014\n\004name\030\002 \002(\t\022\017\n\007name_en\030\003 \001(\t" +
      "\022\n\n\002id\030\004 \001(\004\022\t\n\001x\030\005 \002(\007\022\t\n\001y\030\006 \002(\007\022+\n\rin" +
      "tersections\030\016 \001(\0132\024.InteresectedStreets\022" +
      "\035\n\007streets\030\022 \003(\0132\014.StreetIndex\"A\n\023Intere" +
      "sectedStreets\022*\n\rintersections\030\005 \003(\0132\023.S" +
      "treetIntersection\"x\n\022StreetIntersection\022" +
      "\032\n\022intersectedStreet1\030\002 \002(\r\022\032\n\022intersect",
      "edStreet2\030\003 \002(\r\022\024\n\014intersectedX\030\004 \002(\021\022\024\n" +
      "\014intersectedY\030\005 \002(\021\"V\n\rPostcodeIndex\022\020\n\010" +
      "postcode\030\001 \002(\t\022\t\n\001x\030\002 \002(\007\022\t\n\001y\030\003 \002(\007\022\035\n\007" +
      "streets\030\005 \003(\0132\014.StreetIndex\"q\n\013StreetInd" +
      "ex\022\014\n\004name\030\001 \002(\t\022\017\n\007name_en\030\002 \001(\t\022\t\n\001x\030\003" +
      " \002(\021\022\t\n\001y\030\004 \002(\021\022\n\n\002id\030\006 \001(\004\022!\n\tbuildings" +
      "\030\022 \003(\0132\016.BuildingIndex\"b\n\rBuildingIndex\022" +
      "\014\n\004name\030\001 \002(\t\022\017\n\007name_en\030\002 \001(\t\022\n\n\002id\030\005 \001" +
      "(\004\022\020\n\010postcode\030\006 \001(\t\022\t\n\001x\030\003 \002(\021\022\t\n\001y\030\004 \002" +
      "(\021\"2\n\017TransportRoutes\022\037\n\006routes\030\006 \003(\0132\017.",
      "TransportRoute\"\317\001\n\016TransportRoute\022\n\n\002id\030" +
      "\001 \002(\004\022\014\n\004type\030\003 \001(\r\022\020\n\010operator\030\004 \001(\r\022\013\n" +
      "\003ref\030\005 \001(\t\022\014\n\004name\030\006 \001(\r\022\017\n\007name_en\030\007 \001(" +
      "\r\022\020\n\010distance\030\010 \001(\r\022(\n\013directStops\030\017 \003(\013" +
      "2\023.TransportRouteStop\022)\n\014reverseStops\030\020 " +
      "\003(\0132\023.TransportRouteStop\"W\n\022TransportRou" +
      "teStop\022\n\n\002id\030\001 \002(\022\022\n\n\002dx\030\002 \002(\021\022\n\n\002dy\030\003 \002" +
      "(\021\022\014\n\004name\030\006 \002(\r\022\017\n\007name_en\030\007 \001(\r\"b\n\rTra" +
      "nsportStop\022\n\n\002dx\030\001 \002(\021\022\n\n\002dy\030\002 \002(\021\022\n\n\002id" +
      "\030\005 \002(\022\022\014\n\004name\030\006 \002(\r\022\017\n\007name_en\030\007 \001(\r\022\016\n",
      "\006routes\030\020 \003(\r\"\244\001\n\022TransportStopsTree\022\014\n\004" +
      "left\030\001 \002(\021\022\r\n\005right\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\022\016" +
      "\n\006bottom\030\004 \002(\021\022%\n\010subtrees\030\007 \003(\0132\023.Trans" +
      "portStopsTree\022\035\n\005leafs\030\010 \003(\0132\016.Transport" +
      "Stop\022\016\n\006baseId\030\020 \001(\004\"\215\001\n\024OsmAndTransport" +
      "Index\022\014\n\004name\030\001 \001(\t\022 \n\006routes\030\003 \001(\0132\020.Tr" +
      "ansportRoutes\022\"\n\005stops\030\006 \001(\0132\023.Transport" +
      "StopsTree\022!\n\013stringTable\030\t \002(\0132\014.StringT" +
      "able\"I\n\rOsmAndTileBox\022\014\n\004left\030\001 \002(\r\022\r\n\005r" +
      "ight\030\002 \002(\r\022\013\n\003top\030\003 \002(\r\022\016\n\006bottom\030\004 \002(\r\"",
      "\333\001\n\016OsmAndPoiIndex\022\014\n\004name\030\001 \002(\t\022\"\n\nboun" +
      "daries\030\002 \002(\0132\016.OsmAndTileBox\022-\n\017categori" +
      "esTable\030\003 \003(\0132\024.OsmAndCategoryTable\022&\n\tn" +
      "ameIndex\030\004 \001(\0132\023.OsmAndPoiNameIndex\022\034\n\005b" +
      "oxes\030\006 \003(\0132\r.OsmAndPoiBox\022\"\n\007poiData\030\t \003" +
      "(\0132\021.OsmAndPoiBoxData\"_\n\022OsmAndPoiNameIn" +
      "dex\022\"\n\005table\030\002 \002(\0132\023.IndexedStringTable\022" +
      "%\n\004data\030\005 \003(\0132\027.OsmAndPoiNameIndexData\"D" +
      "\n\026OsmAndPoiNameIndexData\022*\n\005atoms\030\004 \003(\0132" +
      "\033.OsmAndPoiNameIndexDataAtom\"Q\n\032OsmAndPo",
      "iNameIndexDataAtom\022\014\n\004zoom\030\002 \001(\r\022\t\n\001x\030\003 " +
      "\001(\r\022\t\n\001y\030\004 \001(\r\022\017\n\007shiftTo\030\016 \001(\007\">\n\023OsmAn" +
      "dCategoryTable\022\020\n\010category\030\001 \002(\t\022\025\n\rsubc" +
      "ategories\030\003 \003(\t\"\227\001\n\014OsmAndPoiBox\022\014\n\004zoom" +
      "\030\001 \002(\r\022\014\n\004left\030\002 \002(\021\022\013\n\003top\030\003 \002(\021\022(\n\ncat" +
      "egories\030\004 \001(\0132\024.OsmAndPoiCategories\022\037\n\010s" +
      "ubBoxes\030\n \003(\0132\r.OsmAndPoiBox\022\023\n\013shiftToD" +
      "ata\030\016 \001(\007\")\n\023OsmAndPoiCategories\022\022\n\ncate" +
      "gories\030\003 \003(\r\"^\n\020OsmAndPoiBoxData\022\014\n\004zoom" +
      "\030\001 \001(\r\022\t\n\001x\030\002 \001(\r\022\t\n\001y\030\003 \001(\r\022&\n\007poiData\030",
      "\005 \003(\0132\025.OsmAndPoiBoxDataAtom\"\255\001\n\024OsmAndP" +
      "oiBoxDataAtom\022\n\n\002dx\030\002 \002(\021\022\n\n\002dy\030\003 \002(\021\022\022\n" +
      "\ncategories\030\004 \003(\r\022\014\n\004name\030\006 \001(\t\022\016\n\006nameE" +
      "n\030\007 \001(\t\022\n\n\002id\030\010 \001(\004\022\024\n\014openingHours\030\n \001(" +
      "\t\022\014\n\004site\030\013 \001(\t\022\r\n\005phone\030\014 \001(\t\022\014\n\004note\030\r" +
      " \001(\tB\023\n\021net.osmand.binary"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
        @Override
		public com.google.protobuf.ExtensionRegistry assignDescriptors(
            com.google.protobuf.Descriptors.FileDescriptor root) {
          descriptor = root;
          internal_static_OsmAndStructure_descriptor =
            getDescriptor().getMessageTypes().get(0);
          internal_static_OsmAndStructure_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndStructure_descriptor,
              new java.lang.String[] { "Version", "MapIndex", "AddressIndex", "TransportIndex", "PoiIndex", "VersionConfirm", },
              net.osmand.binary.OsmandOdb.OsmAndStructure.class,
              net.osmand.binary.OsmandOdb.OsmAndStructure.Builder.class);
          internal_static_StringTable_descriptor =
            getDescriptor().getMessageTypes().get(1);
          internal_static_StringTable_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_StringTable_descriptor,
              new java.lang.String[] { "S", },
              net.osmand.binary.OsmandOdb.StringTable.class,
              net.osmand.binary.OsmandOdb.StringTable.Builder.class);
          internal_static_IndexedStringTable_descriptor =
            getDescriptor().getMessageTypes().get(2);
          internal_static_IndexedStringTable_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_IndexedStringTable_descriptor,
              new java.lang.String[] { "Prefix", "Key", "Val", "Subtables", },
              net.osmand.binary.OsmandOdb.IndexedStringTable.class,
              net.osmand.binary.OsmandOdb.IndexedStringTable.Builder.class);
          internal_static_OsmAndMapIndex_descriptor =
            getDescriptor().getMessageTypes().get(3);
          internal_static_OsmAndMapIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndMapIndex_descriptor,
              new java.lang.String[] { "Levels", "Name", "Rules", },
              net.osmand.binary.OsmandOdb.OsmAndMapIndex.class,
              net.osmand.binary.OsmandOdb.OsmAndMapIndex.Builder.class);
          internal_static_MapEncodingRule_descriptor =
            getDescriptor().getMessageTypes().get(4);
          internal_static_MapEncodingRule_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_MapEncodingRule_descriptor,
              new java.lang.String[] { "Tag", "Value", "Type", "Subtype", "MinZoom", },
              net.osmand.binary.OsmandOdb.MapEncodingRule.class,
              net.osmand.binary.OsmandOdb.MapEncodingRule.Builder.class);
          internal_static_MapRootLevel_descriptor =
            getDescriptor().getMessageTypes().get(5);
          internal_static_MapRootLevel_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_MapRootLevel_descriptor,
              new java.lang.String[] { "MaxZoom", "MinZoom", "Left", "Right", "Top", "Bottom", "Root", },
              net.osmand.binary.OsmandOdb.MapRootLevel.class,
              net.osmand.binary.OsmandOdb.MapRootLevel.Builder.class);
          internal_static_MapTree_descriptor =
            getDescriptor().getMessageTypes().get(6);
          internal_static_MapTree_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_MapTree_descriptor,
              new java.lang.String[] { "Left", "Right", "Top", "Bottom", "OldstringTable", "OldbaseId", "Subtrees", "Leafs", "BaseId", "StringTable", },
              net.osmand.binary.OsmandOdb.MapTree.class,
              net.osmand.binary.OsmandOdb.MapTree.Builder.class);
          internal_static_MapData_descriptor =
            getDescriptor().getMessageTypes().get(7);
          internal_static_MapData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_MapData_descriptor,
              new java.lang.String[] { "Coordinates", "Types", "Id", "StringId", "Restrictions", "HighwayMeta", },
              net.osmand.binary.OsmandOdb.MapData.class,
              net.osmand.binary.OsmandOdb.MapData.Builder.class);
          internal_static_OsmAndAddressIndex_descriptor =
            getDescriptor().getMessageTypes().get(8);
          internal_static_OsmAndAddressIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndAddressIndex_descriptor,
              new java.lang.String[] { "Name", "NameEn", "Cities", "Postcodes", "Villages", },
              net.osmand.binary.OsmandOdb.OsmAndAddressIndex.class,
              net.osmand.binary.OsmandOdb.OsmAndAddressIndex.Builder.class);
          internal_static_CitiesIndex_descriptor =
            getDescriptor().getMessageTypes().get(9);
          internal_static_CitiesIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_CitiesIndex_descriptor,
              new java.lang.String[] { "Cities", },
              net.osmand.binary.OsmandOdb.CitiesIndex.class,
              net.osmand.binary.OsmandOdb.CitiesIndex.Builder.class);
          internal_static_PostcodesIndex_descriptor =
            getDescriptor().getMessageTypes().get(10);
          internal_static_PostcodesIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_PostcodesIndex_descriptor,
              new java.lang.String[] { "Postcodes", },
              net.osmand.binary.OsmandOdb.PostcodesIndex.class,
              net.osmand.binary.OsmandOdb.PostcodesIndex.Builder.class);
          internal_static_CityIndex_descriptor =
            getDescriptor().getMessageTypes().get(11);
          internal_static_CityIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_CityIndex_descriptor,
              new java.lang.String[] { "CityType", "Name", "NameEn", "Id", "X", "Y", "Intersections", "Streets", },
              net.osmand.binary.OsmandOdb.CityIndex.class,
              net.osmand.binary.OsmandOdb.CityIndex.Builder.class);
          internal_static_InteresectedStreets_descriptor =
            getDescriptor().getMessageTypes().get(12);
          internal_static_InteresectedStreets_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_InteresectedStreets_descriptor,
              new java.lang.String[] { "Intersections", },
              net.osmand.binary.OsmandOdb.InteresectedStreets.class,
              net.osmand.binary.OsmandOdb.InteresectedStreets.Builder.class);
          internal_static_StreetIntersection_descriptor =
            getDescriptor().getMessageTypes().get(13);
          internal_static_StreetIntersection_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_StreetIntersection_descriptor,
              new java.lang.String[] { "IntersectedStreet1", "IntersectedStreet2", "IntersectedX", "IntersectedY", },
              net.osmand.binary.OsmandOdb.StreetIntersection.class,
              net.osmand.binary.OsmandOdb.StreetIntersection.Builder.class);
          internal_static_PostcodeIndex_descriptor =
            getDescriptor().getMessageTypes().get(14);
          internal_static_PostcodeIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_PostcodeIndex_descriptor,
              new java.lang.String[] { "Postcode", "X", "Y", "Streets", },
              net.osmand.binary.OsmandOdb.PostcodeIndex.class,
              net.osmand.binary.OsmandOdb.PostcodeIndex.Builder.class);
          internal_static_StreetIndex_descriptor =
            getDescriptor().getMessageTypes().get(15);
          internal_static_StreetIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_StreetIndex_descriptor,
              new java.lang.String[] { "Name", "NameEn", "X", "Y", "Id", "Buildings", },
              net.osmand.binary.OsmandOdb.StreetIndex.class,
              net.osmand.binary.OsmandOdb.StreetIndex.Builder.class);
          internal_static_BuildingIndex_descriptor =
            getDescriptor().getMessageTypes().get(16);
          internal_static_BuildingIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_BuildingIndex_descriptor,
              new java.lang.String[] { "Name", "NameEn", "Id", "Postcode", "X", "Y", },
              net.osmand.binary.OsmandOdb.BuildingIndex.class,
              net.osmand.binary.OsmandOdb.BuildingIndex.Builder.class);
          internal_static_TransportRoutes_descriptor =
            getDescriptor().getMessageTypes().get(17);
          internal_static_TransportRoutes_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TransportRoutes_descriptor,
              new java.lang.String[] { "Routes", },
              net.osmand.binary.OsmandOdb.TransportRoutes.class,
              net.osmand.binary.OsmandOdb.TransportRoutes.Builder.class);
          internal_static_TransportRoute_descriptor =
            getDescriptor().getMessageTypes().get(18);
          internal_static_TransportRoute_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TransportRoute_descriptor,
              new java.lang.String[] { "Id", "Type", "Operator", "Ref", "Name", "NameEn", "Distance", "DirectStops", "ReverseStops", },
              net.osmand.binary.OsmandOdb.TransportRoute.class,
              net.osmand.binary.OsmandOdb.TransportRoute.Builder.class);
          internal_static_TransportRouteStop_descriptor =
            getDescriptor().getMessageTypes().get(19);
          internal_static_TransportRouteStop_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TransportRouteStop_descriptor,
              new java.lang.String[] { "Id", "Dx", "Dy", "Name", "NameEn", },
              net.osmand.binary.OsmandOdb.TransportRouteStop.class,
              net.osmand.binary.OsmandOdb.TransportRouteStop.Builder.class);
          internal_static_TransportStop_descriptor =
            getDescriptor().getMessageTypes().get(20);
          internal_static_TransportStop_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TransportStop_descriptor,
              new java.lang.String[] { "Dx", "Dy", "Id", "Name", "NameEn", "Routes", },
              net.osmand.binary.OsmandOdb.TransportStop.class,
              net.osmand.binary.OsmandOdb.TransportStop.Builder.class);
          internal_static_TransportStopsTree_descriptor =
            getDescriptor().getMessageTypes().get(21);
          internal_static_TransportStopsTree_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_TransportStopsTree_descriptor,
              new java.lang.String[] { "Left", "Right", "Top", "Bottom", "Subtrees", "Leafs", "BaseId", },
              net.osmand.binary.OsmandOdb.TransportStopsTree.class,
              net.osmand.binary.OsmandOdb.TransportStopsTree.Builder.class);
          internal_static_OsmAndTransportIndex_descriptor =
            getDescriptor().getMessageTypes().get(22);
          internal_static_OsmAndTransportIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndTransportIndex_descriptor,
              new java.lang.String[] { "Name", "Routes", "Stops", "StringTable", },
              net.osmand.binary.OsmandOdb.OsmAndTransportIndex.class,
              net.osmand.binary.OsmandOdb.OsmAndTransportIndex.Builder.class);
          internal_static_OsmAndTileBox_descriptor =
            getDescriptor().getMessageTypes().get(23);
          internal_static_OsmAndTileBox_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndTileBox_descriptor,
              new java.lang.String[] { "Left", "Right", "Top", "Bottom", },
              net.osmand.binary.OsmandOdb.OsmAndTileBox.class,
              net.osmand.binary.OsmandOdb.OsmAndTileBox.Builder.class);
          internal_static_OsmAndPoiIndex_descriptor =
            getDescriptor().getMessageTypes().get(24);
          internal_static_OsmAndPoiIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiIndex_descriptor,
              new java.lang.String[] { "Name", "Boundaries", "CategoriesTable", "NameIndex", "Boxes", "PoiData", },
              net.osmand.binary.OsmandOdb.OsmAndPoiIndex.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiIndex.Builder.class);
          internal_static_OsmAndPoiNameIndex_descriptor =
            getDescriptor().getMessageTypes().get(25);
          internal_static_OsmAndPoiNameIndex_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiNameIndex_descriptor,
              new java.lang.String[] { "Table", "Data", },
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndex.Builder.class);
          internal_static_OsmAndPoiNameIndexData_descriptor =
            getDescriptor().getMessageTypes().get(26);
          internal_static_OsmAndPoiNameIndexData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiNameIndexData_descriptor,
              new java.lang.String[] { "Atoms", },
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexData.Builder.class);
          internal_static_OsmAndPoiNameIndexDataAtom_descriptor =
            getDescriptor().getMessageTypes().get(27);
          internal_static_OsmAndPoiNameIndexDataAtom_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiNameIndexDataAtom_descriptor,
              new java.lang.String[] { "Zoom", "X", "Y", "ShiftTo", },
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiNameIndexDataAtom.Builder.class);
          internal_static_OsmAndCategoryTable_descriptor =
            getDescriptor().getMessageTypes().get(28);
          internal_static_OsmAndCategoryTable_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndCategoryTable_descriptor,
              new java.lang.String[] { "Category", "Subcategories", },
              net.osmand.binary.OsmandOdb.OsmAndCategoryTable.class,
              net.osmand.binary.OsmandOdb.OsmAndCategoryTable.Builder.class);
          internal_static_OsmAndPoiBox_descriptor =
            getDescriptor().getMessageTypes().get(29);
          internal_static_OsmAndPoiBox_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiBox_descriptor,
              new java.lang.String[] { "Zoom", "Left", "Top", "Categories", "SubBoxes", "ShiftToData", },
              net.osmand.binary.OsmandOdb.OsmAndPoiBox.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiBox.Builder.class);
          internal_static_OsmAndPoiCategories_descriptor =
            getDescriptor().getMessageTypes().get(30);
          internal_static_OsmAndPoiCategories_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiCategories_descriptor,
              new java.lang.String[] { "Categories", },
              net.osmand.binary.OsmandOdb.OsmAndPoiCategories.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiCategories.Builder.class);
          internal_static_OsmAndPoiBoxData_descriptor =
            getDescriptor().getMessageTypes().get(31);
          internal_static_OsmAndPoiBoxData_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiBoxData_descriptor,
              new java.lang.String[] { "Zoom", "X", "Y", "PoiData", },
              net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiBoxData.Builder.class);
          internal_static_OsmAndPoiBoxDataAtom_descriptor =
            getDescriptor().getMessageTypes().get(32);
          internal_static_OsmAndPoiBoxDataAtom_fieldAccessorTable = new
            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
              internal_static_OsmAndPoiBoxDataAtom_descriptor,
              new java.lang.String[] { "Dx", "Dy", "Categories", "Name", "NameEn", "Id", "OpeningHours", "Site", "Phone", "Note", },
              net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.class,
              net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom.Builder.class);
          return null;
        }
      };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
        }, assigner);
  }
  
  public static void internalForceInit() {}
  
  // @@protoc_insertion_point(outer_class_scope)
}
