text: // Generated by the protocol buffer compiler.  DO NOT EDIT!
  
  #define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION
  #include "osmand_index.pb.h"
  #include <google/protobuf/stubs/once.h>
  #include <google/protobuf/io/coded_stream.h>
  #include <google/protobuf/wire_format_lite_inl.h>
  // @@protoc_insertion_point(includes)
  
  void protobuf_ShutdownFile_osmand_5findex_2eproto() {
    delete OsmAndStoredIndex::default_instance_;
    delete FileIndex::default_instance_;
    delete AddressPart::default_instance_;
    delete CityBlock::default_instance_;
    delete PoiPart::default_instance_;
    delete MapLevel::default_instance_;
    delete MapPart::default_instance_;
    delete RoutingSubregion::default_instance_;
    delete RoutingPart::default_instance_;
    delete TransportPart::default_instance_;
  }
  
  void protobuf_AddDesc_osmand_5findex_2eproto() {
    static bool already_here = false;
    if (already_here) return;
    already_here = true;
    GOOGLE_PROTOBUF_VERIFY_VERSION;
  
    OsmAndStoredIndex::default_instance_ = new OsmAndStoredIndex();
    FileIndex::default_instance_ = new FileIndex();
    AddressPart::default_instance_ = new AddressPart();
    CityBlock::default_instance_ = new CityBlock();
    PoiPart::default_instance_ = new PoiPart();
    MapLevel::default_instance_ = new MapLevel();
    MapPart::default_instance_ = new MapPart();
    RoutingSubregion::default_instance_ = new RoutingSubregion();
    RoutingPart::default_instance_ = new RoutingPart();
    TransportPart::default_instance_ = new TransportPart();
    OsmAndStoredIndex::default_instance_->InitAsDefaultInstance();
    FileIndex::default_instance_->InitAsDefaultInstance();
    AddressPart::default_instance_->InitAsDefaultInstance();
    CityBlock::default_instance_->InitAsDefaultInstance();
    PoiPart::default_instance_->InitAsDefaultInstance();
    MapLevel::default_instance_->InitAsDefaultInstance();
    MapPart::default_instance_->InitAsDefaultInstance();
    RoutingSubregion::default_instance_->InitAsDefaultInstance();
    RoutingPart::default_instance_->InitAsDefaultInstance();
    TransportPart::default_instance_->InitAsDefaultInstance();
    ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_osmand_5findex_2eproto);
  }
  
  // Force AddDescriptors() to be called at static initialization time.
  struct StaticDescriptorInitializer_osmand_5findex_2eproto {
    StaticDescriptorInitializer_osmand_5findex_2eproto() {
      protobuf_AddDesc_osmand_5findex_2eproto();
    }
  } static_descriptor_initializer_osmand_5findex_2eproto_;
  
  
  // ===================================================================
  
  #ifndef _MSC_VER
  const int OsmAndStoredIndex::kVersionFieldNumber;
  const int OsmAndStoredIndex::kDateCreatedFieldNumber;
  const int OsmAndStoredIndex::kFileIndexFieldNumber;
  #endif  // !_MSC_VER
  
  OsmAndStoredIndex::OsmAndStoredIndex()
    : ::google::protobuf::MessageLite() {
    SharedCtor();
  }
  
  void OsmAndStoredIndex::InitAsDefaultInstance() {
  }
  
  OsmAndStoredIndex::OsmAndStoredIndex(const OsmAndStoredIndex& from)
    : ::google::protobuf::MessageLite() {
    SharedCtor();
    MergeFrom(from);
  }
  
  void OsmAndStoredIndex::SharedCtor() {
    _cached_size_ = 0;
    version_ = 0u;
    datecreated_ = GOOGLE_LONGLONG(0);
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  OsmAndStoredIndex::~OsmAndStoredIndex() {
    SharedDtor();
  }
  
  void OsmAndStoredIndex::SharedDtor() {
    if (this != default_instance_) {
    }
  }
  
  void OsmAndStoredIndex::SetCachedSize(int size) const {
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
  }
  const OsmAndStoredIndex& OsmAndStoredIndex::default_instance() {
    if (default_instance_ == NULL) protobuf_AddDesc_osmand_5findex_2eproto();  return *default_instance_;
  }
  
  OsmAndStoredIndex* OsmAndStoredIndex::default_instance_ = NULL;
  
  OsmAndStoredIndex* OsmAndStoredIndex::New() const {
    return new OsmAndStoredIndex;
  }
  
  void OsmAndStoredIndex::Clear() {
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      version_ = 0u;
      datecreated_ = GOOGLE_LONGLONG(0);
    }
    fileindex_.Clear();
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  bool OsmAndStoredIndex::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!(EXPRESSION)) return false
    ::google::protobuf::uint32 tag;
    while ((tag = input->ReadTag()) != 0) {
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // required uint32 version = 1;
        case 1: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                   input, &version_)));
            _set_bit(0);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(58)) goto parse_fileIndex;
          break;
        }
        
        // repeated .FileIndex fileIndex = 7;
        case 7: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_fileIndex:
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                  input, add_fileindex()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(58)) goto parse_fileIndex;
          if (input->ExpectTag(144)) goto parse_dateCreated;
          break;
        }
        
        // required int64 dateCreated = 18;
        case 18: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_dateCreated:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &datecreated_)));
            _set_bit(1);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectAtEnd()) return true;
          break;
        }
        
        default: {
        handle_uninterpreted:
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
            return true;
          }
          DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
          break;
        }
      }
    }
    return true;
  #undef DO_
  }
  
  void OsmAndStoredIndex::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // required uint32 version = 1;
    if (_has_bit(0)) {
      ::google::protobuf::internal::WireFormatLite::WriteUInt32(1, this->version(), output);
    }
    
    // repeated .FileIndex fileIndex = 7;
    for (int i = 0; i < this->fileindex_size(); i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessage(
        7, this->fileindex(i), output);
    }
    
    // required int64 dateCreated = 18;
    if (_has_bit(1)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(18, this->datecreated(), output);
    }
    
  }
  
  int OsmAndStoredIndex::ByteSize() const {
    int total_size = 0;
    
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      // required uint32 version = 1;
      if (has_version()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::UInt32Size(
            this->version());
      }
      
      // required int64 dateCreated = 18;
      if (has_datecreated()) {
        total_size += 2 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->datecreated());
      }
      
    }
    // repeated .FileIndex fileIndex = 7;
    total_size += 1 * this->fileindex_size();
    for (int i = 0; i < this->fileindex_size(); i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
          this->fileindex(i));
    }
    
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = total_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    return total_size;
  }
  
  void OsmAndStoredIndex::CheckTypeAndMergeFrom(
      const ::google::protobuf::MessageLite& from) {
    MergeFrom(*::google::protobuf::down_cast<const OsmAndStoredIndex*>(&from));
  }
  
  void OsmAndStoredIndex::MergeFrom(const OsmAndStoredIndex& from) {
    GOOGLE_CHECK_NE(&from, this);
    fileindex_.MergeFrom(from.fileindex_);
    if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      if (from._has_bit(0)) {
        set_version(from.version());
      }
      if (from._has_bit(1)) {
        set_datecreated(from.datecreated());
      }
    }
  }
  
  void OsmAndStoredIndex::CopyFrom(const OsmAndStoredIndex& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool OsmAndStoredIndex::IsInitialized() const {
    if ((_has_bits_[0] & 0x00000003) != 0x00000003) return false;
    
    for (int i = 0; i < fileindex_size(); i++) {
      if (!this->fileindex(i).IsInitialized()) return false;
    }
    return true;
  }
  
  void OsmAndStoredIndex::Swap(OsmAndStoredIndex* other) {
    if (other != this) {
      std::swap(version_, other->version_);
      std::swap(datecreated_, other->datecreated_);
      fileindex_.Swap(&other->fileindex_);
      std::swap(_has_bits_[0], other->_has_bits_[0]);
      std::swap(_cached_size_, other->_cached_size_);
    }
  }
  
  ::std::string OsmAndStoredIndex::GetTypeName() const {
    return "OsmAndStoredIndex";
  }
  
  
  // ===================================================================
  
  const ::std::string FileIndex::_default_filename_;
  #ifndef _MSC_VER
  const int FileIndex::kSizeFieldNumber;
  const int FileIndex::kDateModifiedFieldNumber;
  const int FileIndex::kFileNameFieldNumber;
  const int FileIndex::kVersionFieldNumber;
  const int FileIndex::kAddressIndexFieldNumber;
  const int FileIndex::kTransportIndexFieldNumber;
  const int FileIndex::kPoiIndexFieldNumber;
  const int FileIndex::kMapIndexFieldNumber;
  const int FileIndex::kRoutingIndexFieldNumber;
  #endif  // !_MSC_VER
  
  FileIndex::FileIndex()
    : ::google::protobuf::MessageLite() {
    SharedCtor();
  }
  
  void FileIndex::InitAsDefaultInstance() {
  }
  
  FileIndex::FileIndex(const FileIndex& from)
    : ::google::protobuf::MessageLite() {
    SharedCtor();
    MergeFrom(from);
  }
  
  void FileIndex::SharedCtor() {
    _cached_size_ = 0;
    size_ = GOOGLE_LONGLONG(0);
    datemodified_ = GOOGLE_LONGLONG(0);
    filename_ = const_cast< ::std::string*>(&_default_filename_);
    version_ = 0;
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  FileIndex::~FileIndex() {
    SharedDtor();
  }
  
  void FileIndex::SharedDtor() {
    if (filename_ != &_default_filename_) {
      delete filename_;
    }
    if (this != default_instance_) {
    }
  }
  
  void FileIndex::SetCachedSize(int size) const {
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
  }
  const FileIndex& FileIndex::default_instance() {
    if (default_instance_ == NULL) protobuf_AddDesc_osmand_5findex_2eproto();  return *default_instance_;
  }
  
  FileIndex* FileIndex::default_instance_ = NULL;
  
  FileIndex* FileIndex::New() const {
    return new FileIndex;
  }
  
  void FileIndex::Clear() {
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      size_ = GOOGLE_LONGLONG(0);
      datemodified_ = GOOGLE_LONGLONG(0);
      if (_has_bit(2)) {
        if (filename_ != &_default_filename_) {
          filename_->clear();
        }
      }
      version_ = 0;
    }
    addressindex_.Clear();
    transportindex_.Clear();
    poiindex_.Clear();
    mapindex_.Clear();
    routingindex_.Clear();
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  bool FileIndex::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!(EXPRESSION)) return false
    ::google::protobuf::uint32 tag;
    while ((tag = input->ReadTag()) != 0) {
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // required int64 size = 1;
        case 1: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &size_)));
            _set_bit(0);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(16)) goto parse_dateModified;
          break;
        }
        
        // required int64 dateModified = 2;
        case 2: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_dateModified:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &datemodified_)));
            _set_bit(1);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(26)) goto parse_fileName;
          break;
        }
        
        // required string fileName = 3;
        case 3: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_fileName:
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_filename()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(32)) goto parse_version;
          break;
        }
        
        // required int32 version = 4;
        case 4: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_version:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &version_)));
            _set_bit(3);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(66)) goto parse_addressIndex;
          break;
        }
        
        // repeated .AddressPart addressIndex = 8;
        case 8: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_addressIndex:
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                  input, add_addressindex()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(66)) goto parse_addressIndex;
          if (input->ExpectTag(74)) goto parse_transportIndex;
          break;
        }
        
        // repeated .TransportPart transportIndex = 9;
        case 9: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_transportIndex:
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                  input, add_transportindex()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(74)) goto parse_transportIndex;
          if (input->ExpectTag(82)) goto parse_poiIndex;
          break;
        }
        
        // repeated .PoiPart poiIndex = 10;
        case 10: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_poiIndex:
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                  input, add_poiindex()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(82)) goto parse_poiIndex;
          if (input->ExpectTag(90)) goto parse_mapIndex;
          break;
        }
        
        // repeated .MapPart mapIndex = 11;
        case 11: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_mapIndex:
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                  input, add_mapindex()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(90)) goto parse_mapIndex;
          if (input->ExpectTag(98)) goto parse_routingIndex;
          break;
        }
        
        // repeated .RoutingPart routingIndex = 12;
        case 12: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_routingIndex:
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                  input, add_routingindex()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(98)) goto parse_routingIndex;
          if (input->ExpectAtEnd()) return true;
          break;
        }
        
        default: {
        handle_uninterpreted:
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
            return true;
          }
          DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
          break;
        }
      }
    }
    return true;
  #undef DO_
  }
  
  void FileIndex::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // required int64 size = 1;
    if (_has_bit(0)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(1, this->size(), output);
    }
    
    // required int64 dateModified = 2;
    if (_has_bit(1)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(2, this->datemodified(), output);
    }
    
    // required string fileName = 3;
    if (_has_bit(2)) {
      ::google::protobuf::internal::WireFormatLite::WriteString(
        3, this->filename(), output);
    }
    
    // required int32 version = 4;
    if (_has_bit(3)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(4, this->version(), output);
    }
    
    // repeated .AddressPart addressIndex = 8;
    for (int i = 0; i < this->addressindex_size(); i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessage(
        8, this->addressindex(i), output);
    }
    
    // repeated .TransportPart transportIndex = 9;
    for (int i = 0; i < this->transportindex_size(); i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessage(
        9, this->transportindex(i), output);
    }
    
    // repeated .PoiPart poiIndex = 10;
    for (int i = 0; i < this->poiindex_size(); i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessage(
        10, this->poiindex(i), output);
    }
    
    // repeated .MapPart mapIndex = 11;
    for (int i = 0; i < this->mapindex_size(); i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessage(
        11, this->mapindex(i), output);
    }
    
    // repeated .RoutingPart routingIndex = 12;
    for (int i = 0; i < this->routingindex_size(); i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessage(
        12, this->routingindex(i), output);
    }
    
  }
  
  int FileIndex::ByteSize() const {
    int total_size = 0;
    
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      // required int64 size = 1;
      if (has_size()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->size());
      }
      
      // required int64 dateModified = 2;
      if (has_datemodified()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->datemodified());
      }
      
      // required string fileName = 3;
      if (has_filename()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::StringSize(
            this->filename());
      }
      
      // required int32 version = 4;
      if (has_version()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->version());
      }
      
    }
    // repeated .AddressPart addressIndex = 8;
    total_size += 1 * this->addressindex_size();
    for (int i = 0; i < this->addressindex_size(); i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
          this->addressindex(i));
    }
    
    // repeated .TransportPart transportIndex = 9;
    total_size += 1 * this->transportindex_size();
    for (int i = 0; i < this->transportindex_size(); i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
          this->transportindex(i));
    }
    
    // repeated .PoiPart poiIndex = 10;
    total_size += 1 * this->poiindex_size();
    for (int i = 0; i < this->poiindex_size(); i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
          this->poiindex(i));
    }
    
    // repeated .MapPart mapIndex = 11;
    total_size += 1 * this->mapindex_size();
    for (int i = 0; i < this->mapindex_size(); i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
          this->mapindex(i));
    }
    
    // repeated .RoutingPart routingIndex = 12;
    total_size += 1 * this->routingindex_size();
    for (int i = 0; i < this->routingindex_size(); i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
          this->routingindex(i));
    }
    
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = total_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    return total_size;
  }
  
  void FileIndex::CheckTypeAndMergeFrom(
      const ::google::protobuf::MessageLite& from) {
    MergeFrom(*::google::protobuf::down_cast<const FileIndex*>(&from));
  }
  
  void FileIndex::MergeFrom(const FileIndex& from) {
    GOOGLE_CHECK_NE(&from, this);
    addressindex_.MergeFrom(from.addressindex_);
    transportindex_.MergeFrom(from.transportindex_);
    poiindex_.MergeFrom(from.poiindex_);
    mapindex_.MergeFrom(from.mapindex_);
    routingindex_.MergeFrom(from.routingindex_);
    if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      if (from._has_bit(0)) {
        set_size(from.size());
      }
      if (from._has_bit(1)) {
        set_datemodified(from.datemodified());
      }
      if (from._has_bit(2)) {
        set_filename(from.filename());
      }
      if (from._has_bit(3)) {
        set_version(from.version());
      }
    }
  }
  
  void FileIndex::CopyFrom(const FileIndex& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool FileIndex::IsInitialized() const {
    if ((_has_bits_[0] & 0x0000000f) != 0x0000000f) return false;
    
    for (int i = 0; i < addressindex_size(); i++) {
      if (!this->addressindex(i).IsInitialized()) return false;
    }
    for (int i = 0; i < transportindex_size(); i++) {
      if (!this->transportindex(i).IsInitialized()) return false;
    }
    for (int i = 0; i < poiindex_size(); i++) {
      if (!this->poiindex(i).IsInitialized()) return false;
    }
    for (int i = 0; i < mapindex_size(); i++) {
      if (!this->mapindex(i).IsInitialized()) return false;
    }
    for (int i = 0; i < routingindex_size(); i++) {
      if (!this->routingindex(i).IsInitialized()) return false;
    }
    return true;
  }
  
  void FileIndex::Swap(FileIndex* other) {
    if (other != this) {
      std::swap(size_, other->size_);
      std::swap(datemodified_, other->datemodified_);
      std::swap(filename_, other->filename_);
      std::swap(version_, other->version_);
      addressindex_.Swap(&other->addressindex_);
      transportindex_.Swap(&other->transportindex_);
      poiindex_.Swap(&other->poiindex_);
      mapindex_.Swap(&other->mapindex_);
      routingindex_.Swap(&other->routingindex_);
      std::swap(_has_bits_[0], other->_has_bits_[0]);
      std::swap(_cached_size_, other->_cached_size_);
    }
  }
  
  ::std::string FileIndex::GetTypeName() const {
    return "FileIndex";
  }
  
  
  // ===================================================================
  
  const ::std::string AddressPart::_default_name_;
  const ::std::string AddressPart::_default_nameen_;
  #ifndef _MSC_VER
  const int AddressPart::kSizeFieldNumber;
  const int AddressPart::kOffsetFieldNumber;
  const int AddressPart::kNameFieldNumber;
  const int AddressPart::kNameEnFieldNumber;
  const int AddressPart::kIndexNameOffsetFieldNumber;
  const int AddressPart::kCitiesFieldNumber;
  #endif  // !_MSC_VER
  
  AddressPart::AddressPart()
    : ::google::protobuf::MessageLite() {
    SharedCtor();
  }
  
  void AddressPart::InitAsDefaultInstance() {
  }
  
  AddressPart::AddressPart(const AddressPart& from)
    : ::google::protobuf::MessageLite() {
    SharedCtor();
    MergeFrom(from);
  }
  
  void AddressPart::SharedCtor() {
    _cached_size_ = 0;
    size_ = GOOGLE_LONGLONG(0);
    offset_ = GOOGLE_LONGLONG(0);
    name_ = const_cast< ::std::string*>(&_default_name_);
    nameen_ = const_cast< ::std::string*>(&_default_nameen_);
    indexnameoffset_ = 0;
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  AddressPart::~AddressPart() {
    SharedDtor();
  }
  
  void AddressPart::SharedDtor() {
    if (name_ != &_default_name_) {
      delete name_;
    }
    if (nameen_ != &_default_nameen_) {
      delete nameen_;
    }
    if (this != default_instance_) {
    }
  }
  
  void AddressPart::SetCachedSize(int size) const {
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
  }
  const AddressPart& AddressPart::default_instance() {
    if (default_instance_ == NULL) protobuf_AddDesc_osmand_5findex_2eproto();  return *default_instance_;
  }
  
  AddressPart* AddressPart::default_instance_ = NULL;
  
  AddressPart* AddressPart::New() const {
    return new AddressPart;
  }
  
  void AddressPart::Clear() {
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      size_ = GOOGLE_LONGLONG(0);
      offset_ = GOOGLE_LONGLONG(0);
      if (_has_bit(2)) {
        if (name_ != &_default_name_) {
          name_->clear();
        }
      }
      if (_has_bit(3)) {
        if (nameen_ != &_default_nameen_) {
          nameen_->clear();
        }
      }
      indexnameoffset_ = 0;
    }
    cities_.Clear();
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  bool AddressPart::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!(EXPRESSION)) return false
    ::google::protobuf::uint32 tag;
    while ((tag = input->ReadTag()) != 0) {
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // required int64 size = 1;
        case 1: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &size_)));
            _set_bit(0);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(16)) goto parse_offset;
          break;
        }
        
        // required int64 offset = 2;
        case 2: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_offset:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &offset_)));
            _set_bit(1);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(26)) goto parse_name;
          break;
        }
        
        // optional string name = 3;
        case 3: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_name:
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_name()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(34)) goto parse_nameEn;
          break;
        }
        
        // optional string nameEn = 4;
        case 4: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_nameEn:
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_nameen()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(40)) goto parse_indexNameOffset;
          break;
        }
        
        // optional int32 indexNameOffset = 5;
        case 5: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_indexNameOffset:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &indexnameoffset_)));
            _set_bit(4);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(66)) goto parse_cities;
          break;
        }
        
        // repeated .CityBlock cities = 8;
        case 8: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_cities:
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                  input, add_cities()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(66)) goto parse_cities;
          if (input->ExpectAtEnd()) return true;
          break;
        }
        
        default: {
        handle_uninterpreted:
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
            return true;
          }
          DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
          break;
        }
      }
    }
    return true;
  #undef DO_
  }
  
  void AddressPart::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // required int64 size = 1;
    if (_has_bit(0)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(1, this->size(), output);
    }
    
    // required int64 offset = 2;
    if (_has_bit(1)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(2, this->offset(), output);
    }
    
    // optional string name = 3;
    if (_has_bit(2)) {
      ::google::protobuf::internal::WireFormatLite::WriteString(
        3, this->name(), output);
    }
    
    // optional string nameEn = 4;
    if (_has_bit(3)) {
      ::google::protobuf::internal::WireFormatLite::WriteString(
        4, this->nameen(), output);
    }
    
    // optional int32 indexNameOffset = 5;
    if (_has_bit(4)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(5, this->indexnameoffset(), output);
    }
    
    // repeated .CityBlock cities = 8;
    for (int i = 0; i < this->cities_size(); i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessage(
        8, this->cities(i), output);
    }
    
  }
  
  int AddressPart::ByteSize() const {
    int total_size = 0;
    
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      // required int64 size = 1;
      if (has_size()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->size());
      }
      
      // required int64 offset = 2;
      if (has_offset()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->offset());
      }
      
      // optional string name = 3;
      if (has_name()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::StringSize(
            this->name());
      }
      
      // optional string nameEn = 4;
      if (has_nameen()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::StringSize(
            this->nameen());
      }
      
      // optional int32 indexNameOffset = 5;
      if (has_indexnameoffset()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->indexnameoffset());
      }
      
    }
    // repeated .CityBlock cities = 8;
    total_size += 1 * this->cities_size();
    for (int i = 0; i < this->cities_size(); i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
          this->cities(i));
    }
    
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = total_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    return total_size;
  }
  
  void AddressPart::CheckTypeAndMergeFrom(
      const ::google::protobuf::MessageLite& from) {
    MergeFrom(*::google::protobuf::down_cast<const AddressPart*>(&from));
  }
  
  void AddressPart::MergeFrom(const AddressPart& from) {
    GOOGLE_CHECK_NE(&from, this);
    cities_.MergeFrom(from.cities_);
    if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      if (from._has_bit(0)) {
        set_size(from.size());
      }
      if (from._has_bit(1)) {
        set_offset(from.offset());
      }
      if (from._has_bit(2)) {
        set_name(from.name());
      }
      if (from._has_bit(3)) {
        set_nameen(from.nameen());
      }
      if (from._has_bit(4)) {
        set_indexnameoffset(from.indexnameoffset());
      }
    }
  }
  
  void AddressPart::CopyFrom(const AddressPart& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool AddressPart::IsInitialized() const {
    if ((_has_bits_[0] & 0x00000003) != 0x00000003) return false;
    
    for (int i = 0; i < cities_size(); i++) {
      if (!this->cities(i).IsInitialized()) return false;
    }
    return true;
  }
  
  void AddressPart::Swap(AddressPart* other) {
    if (other != this) {
      std::swap(size_, other->size_);
      std::swap(offset_, other->offset_);
      std::swap(name_, other->name_);
      std::swap(nameen_, other->nameen_);
      std::swap(indexnameoffset_, other->indexnameoffset_);
      cities_.Swap(&other->cities_);
      std::swap(_has_bits_[0], other->_has_bits_[0]);
      std::swap(_cached_size_, other->_cached_size_);
    }
  }
  
  ::std::string AddressPart::GetTypeName() const {
    return "AddressPart";
  }
  
  
  // ===================================================================
  
  #ifndef _MSC_VER
  const int CityBlock::kSizeFieldNumber;
  const int CityBlock::kOffsetFieldNumber;
  const int CityBlock::kTypeFieldNumber;
  #endif  // !_MSC_VER
  
  CityBlock::CityBlock()
    : ::google::protobuf::MessageLite() {
    SharedCtor();
  }
  
  void CityBlock::InitAsDefaultInstance() {
  }
  
  CityBlock::CityBlock(const CityBlock& from)
    : ::google::protobuf::MessageLite() {
    SharedCtor();
    MergeFrom(from);
  }
  
  void CityBlock::SharedCtor() {
    _cached_size_ = 0;
    size_ = GOOGLE_LONGLONG(0);
    offset_ = GOOGLE_LONGLONG(0);
    type_ = 0;
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  CityBlock::~CityBlock() {
    SharedDtor();
  }
  
  void CityBlock::SharedDtor() {
    if (this != default_instance_) {
    }
  }
  
  void CityBlock::SetCachedSize(int size) const {
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
  }
  const CityBlock& CityBlock::default_instance() {
    if (default_instance_ == NULL) protobuf_AddDesc_osmand_5findex_2eproto();  return *default_instance_;
  }
  
  CityBlock* CityBlock::default_instance_ = NULL;
  
  CityBlock* CityBlock::New() const {
    return new CityBlock;
  }
  
  void CityBlock::Clear() {
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      size_ = GOOGLE_LONGLONG(0);
      offset_ = GOOGLE_LONGLONG(0);
      type_ = 0;
    }
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  bool CityBlock::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!(EXPRESSION)) return false
    ::google::protobuf::uint32 tag;
    while ((tag = input->ReadTag()) != 0) {
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // required int64 size = 1;
        case 1: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &size_)));
            _set_bit(0);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(16)) goto parse_offset;
          break;
        }
        
        // required int64 offset = 2;
        case 2: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_offset:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &offset_)));
            _set_bit(1);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(24)) goto parse_type;
          break;
        }
        
        // required int32 type = 3;
        case 3: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_type:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &type_)));
            _set_bit(2);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectAtEnd()) return true;
          break;
        }
        
        default: {
        handle_uninterpreted:
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
            return true;
          }
          DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
          break;
        }
      }
    }
    return true;
  #undef DO_
  }
  
  void CityBlock::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // required int64 size = 1;
    if (_has_bit(0)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(1, this->size(), output);
    }
    
    // required int64 offset = 2;
    if (_has_bit(1)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(2, this->offset(), output);
    }
    
    // required int32 type = 3;
    if (_has_bit(2)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(3, this->type(), output);
    }
    
  }
  
  int CityBlock::ByteSize() const {
    int total_size = 0;
    
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      // required int64 size = 1;
      if (has_size()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->size());
      }
      
      // required int64 offset = 2;
      if (has_offset()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->offset());
      }
      
      // required int32 type = 3;
      if (has_type()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->type());
      }
      
    }
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = total_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    return total_size;
  }
  
  void CityBlock::CheckTypeAndMergeFrom(
      const ::google::protobuf::MessageLite& from) {
    MergeFrom(*::google::protobuf::down_cast<const CityBlock*>(&from));
  }
  
  void CityBlock::MergeFrom(const CityBlock& from) {
    GOOGLE_CHECK_NE(&from, this);
    if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      if (from._has_bit(0)) {
        set_size(from.size());
      }
      if (from._has_bit(1)) {
        set_offset(from.offset());
      }
      if (from._has_bit(2)) {
        set_type(from.type());
      }
    }
  }
  
  void CityBlock::CopyFrom(const CityBlock& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool CityBlock::IsInitialized() const {
    if ((_has_bits_[0] & 0x00000007) != 0x00000007) return false;
    
    return true;
  }
  
  void CityBlock::Swap(CityBlock* other) {
    if (other != this) {
      std::swap(size_, other->size_);
      std::swap(offset_, other->offset_);
      std::swap(type_, other->type_);
      std::swap(_has_bits_[0], other->_has_bits_[0]);
      std::swap(_cached_size_, other->_cached_size_);
    }
  }
  
  ::std::string CityBlock::GetTypeName() const {
    return "CityBlock";
  }
  
  
  // ===================================================================
  
  const ::std::string PoiPart::_default_name_;
  #ifndef _MSC_VER
  const int PoiPart::kSizeFieldNumber;
  const int PoiPart::kOffsetFieldNumber;
  const int PoiPart::kNameFieldNumber;
  const int PoiPart::kLeftFieldNumber;
  const int PoiPart::kRightFieldNumber;
  const int PoiPart::kTopFieldNumber;
  const int PoiPart::kBottomFieldNumber;
  #endif  // !_MSC_VER
  
  PoiPart::PoiPart()
    : ::google::protobuf::MessageLite() {
    SharedCtor();
  }
  
  void PoiPart::InitAsDefaultInstance() {
  }
  
  PoiPart::PoiPart(const PoiPart& from)
    : ::google::protobuf::MessageLite() {
    SharedCtor();
    MergeFrom(from);
  }
  
  void PoiPart::SharedCtor() {
    _cached_size_ = 0;
    size_ = GOOGLE_LONGLONG(0);
    offset_ = GOOGLE_LONGLONG(0);
    name_ = const_cast< ::std::string*>(&_default_name_);
    left_ = 0;
    right_ = 0;
    top_ = 0;
    bottom_ = 0;
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  PoiPart::~PoiPart() {
    SharedDtor();
  }
  
  void PoiPart::SharedDtor() {
    if (name_ != &_default_name_) {
      delete name_;
    }
    if (this != default_instance_) {
    }
  }
  
  void PoiPart::SetCachedSize(int size) const {
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
  }
  const PoiPart& PoiPart::default_instance() {
    if (default_instance_ == NULL) protobuf_AddDesc_osmand_5findex_2eproto();  return *default_instance_;
  }
  
  PoiPart* PoiPart::default_instance_ = NULL;
  
  PoiPart* PoiPart::New() const {
    return new PoiPart;
  }
  
  void PoiPart::Clear() {
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      size_ = GOOGLE_LONGLONG(0);
      offset_ = GOOGLE_LONGLONG(0);
      if (_has_bit(2)) {
        if (name_ != &_default_name_) {
          name_->clear();
        }
      }
      left_ = 0;
      right_ = 0;
      top_ = 0;
      bottom_ = 0;
    }
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  bool PoiPart::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!(EXPRESSION)) return false
    ::google::protobuf::uint32 tag;
    while ((tag = input->ReadTag()) != 0) {
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // required int64 size = 1;
        case 1: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &size_)));
            _set_bit(0);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(16)) goto parse_offset;
          break;
        }
        
        // required int64 offset = 2;
        case 2: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_offset:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &offset_)));
            _set_bit(1);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(26)) goto parse_name;
          break;
        }
        
        // optional string name = 3;
        case 3: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_name:
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_name()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(32)) goto parse_left;
          break;
        }
        
        // required int32 left = 4;
        case 4: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_left:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &left_)));
            _set_bit(3);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(40)) goto parse_right;
          break;
        }
        
        // required int32 right = 5;
        case 5: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_right:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &right_)));
            _set_bit(4);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(48)) goto parse_top;
          break;
        }
        
        // required int32 top = 6;
        case 6: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_top:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &top_)));
            _set_bit(5);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(56)) goto parse_bottom;
          break;
        }
        
        // required int32 bottom = 7;
        case 7: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_bottom:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &bottom_)));
            _set_bit(6);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectAtEnd()) return true;
          break;
        }
        
        default: {
        handle_uninterpreted:
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
            return true;
          }
          DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
          break;
        }
      }
    }
    return true;
  #undef DO_
  }
  
  void PoiPart::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // required int64 size = 1;
    if (_has_bit(0)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(1, this->size(), output);
    }
    
    // required int64 offset = 2;
    if (_has_bit(1)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(2, this->offset(), output);
    }
    
    // optional string name = 3;
    if (_has_bit(2)) {
      ::google::protobuf::internal::WireFormatLite::WriteString(
        3, this->name(), output);
    }
    
    // required int32 left = 4;
    if (_has_bit(3)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(4, this->left(), output);
    }
    
    // required int32 right = 5;
    if (_has_bit(4)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(5, this->right(), output);
    }
    
    // required int32 top = 6;
    if (_has_bit(5)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(6, this->top(), output);
    }
    
    // required int32 bottom = 7;
    if (_has_bit(6)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(7, this->bottom(), output);
    }
    
  }
  
  int PoiPart::ByteSize() const {
    int total_size = 0;
    
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      // required int64 size = 1;
      if (has_size()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->size());
      }
      
      // required int64 offset = 2;
      if (has_offset()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->offset());
      }
      
      // optional string name = 3;
      if (has_name()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::StringSize(
            this->name());
      }
      
      // required int32 left = 4;
      if (has_left()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->left());
      }
      
      // required int32 right = 5;
      if (has_right()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->right());
      }
      
      // required int32 top = 6;
      if (has_top()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->top());
      }
      
      // required int32 bottom = 7;
      if (has_bottom()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->bottom());
      }
      
    }
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = total_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    return total_size;
  }
  
  void PoiPart::CheckTypeAndMergeFrom(
      const ::google::protobuf::MessageLite& from) {
    MergeFrom(*::google::protobuf::down_cast<const PoiPart*>(&from));
  }
  
  void PoiPart::MergeFrom(const PoiPart& from) {
    GOOGLE_CHECK_NE(&from, this);
    if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      if (from._has_bit(0)) {
        set_size(from.size());
      }
      if (from._has_bit(1)) {
        set_offset(from.offset());
      }
      if (from._has_bit(2)) {
        set_name(from.name());
      }
      if (from._has_bit(3)) {
        set_left(from.left());
      }
      if (from._has_bit(4)) {
        set_right(from.right());
      }
      if (from._has_bit(5)) {
        set_top(from.top());
      }
      if (from._has_bit(6)) {
        set_bottom(from.bottom());
      }
    }
  }
  
  void PoiPart::CopyFrom(const PoiPart& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool PoiPart::IsInitialized() const {
    if ((_has_bits_[0] & 0x0000007b) != 0x0000007b) return false;
    
    return true;
  }
  
  void PoiPart::Swap(PoiPart* other) {
    if (other != this) {
      std::swap(size_, other->size_);
      std::swap(offset_, other->offset_);
      std::swap(name_, other->name_);
      std::swap(left_, other->left_);
      std::swap(right_, other->right_);
      std::swap(top_, other->top_);
      std::swap(bottom_, other->bottom_);
      std::swap(_has_bits_[0], other->_has_bits_[0]);
      std::swap(_cached_size_, other->_cached_size_);
    }
  }
  
  ::std::string PoiPart::GetTypeName() const {
    return "PoiPart";
  }
  
  
  // ===================================================================
  
  #ifndef _MSC_VER
  const int MapLevel::kSizeFieldNumber;
  const int MapLevel::kOffsetFieldNumber;
  const int MapLevel::kLeftFieldNumber;
  const int MapLevel::kRightFieldNumber;
  const int MapLevel::kTopFieldNumber;
  const int MapLevel::kBottomFieldNumber;
  const int MapLevel::kMinzoomFieldNumber;
  const int MapLevel::kMaxzoomFieldNumber;
  #endif  // !_MSC_VER
  
  MapLevel::MapLevel()
    : ::google::protobuf::MessageLite() {
    SharedCtor();
  }
  
  void MapLevel::InitAsDefaultInstance() {
  }
  
  MapLevel::MapLevel(const MapLevel& from)
    : ::google::protobuf::MessageLite() {
    SharedCtor();
    MergeFrom(from);
  }
  
  void MapLevel::SharedCtor() {
    _cached_size_ = 0;
    size_ = GOOGLE_LONGLONG(0);
    offset_ = GOOGLE_LONGLONG(0);
    left_ = 0;
    right_ = 0;
    top_ = 0;
    bottom_ = 0;
    minzoom_ = 0;
    maxzoom_ = 0;
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  MapLevel::~MapLevel() {
    SharedDtor();
  }
  
  void MapLevel::SharedDtor() {
    if (this != default_instance_) {
    }
  }
  
  void MapLevel::SetCachedSize(int size) const {
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
  }
  const MapLevel& MapLevel::default_instance() {
    if (default_instance_ == NULL) protobuf_AddDesc_osmand_5findex_2eproto();  return *default_instance_;
  }
  
  MapLevel* MapLevel::default_instance_ = NULL;
  
  MapLevel* MapLevel::New() const {
    return new MapLevel;
  }
  
  void MapLevel::Clear() {
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      size_ = GOOGLE_LONGLONG(0);
      offset_ = GOOGLE_LONGLONG(0);
      left_ = 0;
      right_ = 0;
      top_ = 0;
      bottom_ = 0;
      minzoom_ = 0;
      maxzoom_ = 0;
    }
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  bool MapLevel::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!(EXPRESSION)) return false
    ::google::protobuf::uint32 tag;
    while ((tag = input->ReadTag()) != 0) {
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // required int64 size = 1;
        case 1: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &size_)));
            _set_bit(0);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(16)) goto parse_offset;
          break;
        }
        
        // required int64 offset = 2;
        case 2: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_offset:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &offset_)));
            _set_bit(1);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(32)) goto parse_left;
          break;
        }
        
        // required int32 left = 4;
        case 4: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_left:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &left_)));
            _set_bit(2);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(40)) goto parse_right;
          break;
        }
        
        // required int32 right = 5;
        case 5: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_right:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &right_)));
            _set_bit(3);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(48)) goto parse_top;
          break;
        }
        
        // required int32 top = 6;
        case 6: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_top:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &top_)));
            _set_bit(4);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(56)) goto parse_bottom;
          break;
        }
        
        // required int32 bottom = 7;
        case 7: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_bottom:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &bottom_)));
            _set_bit(5);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(64)) goto parse_minzoom;
          break;
        }
        
        // optional int32 minzoom = 8;
        case 8: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_minzoom:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &minzoom_)));
            _set_bit(6);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(72)) goto parse_maxzoom;
          break;
        }
        
        // optional int32 maxzoom = 9;
        case 9: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_maxzoom:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &maxzoom_)));
            _set_bit(7);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectAtEnd()) return true;
          break;
        }
        
        default: {
        handle_uninterpreted:
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
            return true;
          }
          DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
          break;
        }
      }
    }
    return true;
  #undef DO_
  }
  
  void MapLevel::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // required int64 size = 1;
    if (_has_bit(0)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(1, this->size(), output);
    }
    
    // required int64 offset = 2;
    if (_has_bit(1)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(2, this->offset(), output);
    }
    
    // required int32 left = 4;
    if (_has_bit(2)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(4, this->left(), output);
    }
    
    // required int32 right = 5;
    if (_has_bit(3)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(5, this->right(), output);
    }
    
    // required int32 top = 6;
    if (_has_bit(4)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(6, this->top(), output);
    }
    
    // required int32 bottom = 7;
    if (_has_bit(5)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(7, this->bottom(), output);
    }
    
    // optional int32 minzoom = 8;
    if (_has_bit(6)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(8, this->minzoom(), output);
    }
    
    // optional int32 maxzoom = 9;
    if (_has_bit(7)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(9, this->maxzoom(), output);
    }
    
  }
  
  int MapLevel::ByteSize() const {
    int total_size = 0;
    
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      // required int64 size = 1;
      if (has_size()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->size());
      }
      
      // required int64 offset = 2;
      if (has_offset()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->offset());
      }
      
      // required int32 left = 4;
      if (has_left()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->left());
      }
      
      // required int32 right = 5;
      if (has_right()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->right());
      }
      
      // required int32 top = 6;
      if (has_top()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->top());
      }
      
      // required int32 bottom = 7;
      if (has_bottom()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->bottom());
      }
      
      // optional int32 minzoom = 8;
      if (has_minzoom()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->minzoom());
      }
      
      // optional int32 maxzoom = 9;
      if (has_maxzoom()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->maxzoom());
      }
      
    }
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = total_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    return total_size;
  }
  
  void MapLevel::CheckTypeAndMergeFrom(
      const ::google::protobuf::MessageLite& from) {
    MergeFrom(*::google::protobuf::down_cast<const MapLevel*>(&from));
  }
  
  void MapLevel::MergeFrom(const MapLevel& from) {
    GOOGLE_CHECK_NE(&from, this);
    if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      if (from._has_bit(0)) {
        set_size(from.size());
      }
      if (from._has_bit(1)) {
        set_offset(from.offset());
      }
      if (from._has_bit(2)) {
        set_left(from.left());
      }
      if (from._has_bit(3)) {
        set_right(from.right());
      }
      if (from._has_bit(4)) {
        set_top(from.top());
      }
      if (from._has_bit(5)) {
        set_bottom(from.bottom());
      }
      if (from._has_bit(6)) {
        set_minzoom(from.minzoom());
      }
      if (from._has_bit(7)) {
        set_maxzoom(from.maxzoom());
      }
    }
  }
  
  void MapLevel::CopyFrom(const MapLevel& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MapLevel::IsInitialized() const {
    if ((_has_bits_[0] & 0x0000003f) != 0x0000003f) return false;
    
    return true;
  }
  
  void MapLevel::Swap(MapLevel* other) {
    if (other != this) {
      std::swap(size_, other->size_);
      std::swap(offset_, other->offset_);
      std::swap(left_, other->left_);
      std::swap(right_, other->right_);
      std::swap(top_, other->top_);
      std::swap(bottom_, other->bottom_);
      std::swap(minzoom_, other->minzoom_);
      std::swap(maxzoom_, other->maxzoom_);
      std::swap(_has_bits_[0], other->_has_bits_[0]);
      std::swap(_cached_size_, other->_cached_size_);
    }
  }
  
  ::std::string MapLevel::GetTypeName() const {
    return "MapLevel";
  }
  
  
  // ===================================================================
  
  const ::std::string MapPart::_default_name_;
  #ifndef _MSC_VER
  const int MapPart::kSizeFieldNumber;
  const int MapPart::kOffsetFieldNumber;
  const int MapPart::kNameFieldNumber;
  const int MapPart::kLevelsFieldNumber;
  #endif  // !_MSC_VER
  
  MapPart::MapPart()
    : ::google::protobuf::MessageLite() {
    SharedCtor();
  }
  
  void MapPart::InitAsDefaultInstance() {
  }
  
  MapPart::MapPart(const MapPart& from)
    : ::google::protobuf::MessageLite() {
    SharedCtor();
    MergeFrom(from);
  }
  
  void MapPart::SharedCtor() {
    _cached_size_ = 0;
    size_ = GOOGLE_LONGLONG(0);
    offset_ = GOOGLE_LONGLONG(0);
    name_ = const_cast< ::std::string*>(&_default_name_);
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  MapPart::~MapPart() {
    SharedDtor();
  }
  
  void MapPart::SharedDtor() {
    if (name_ != &_default_name_) {
      delete name_;
    }
    if (this != default_instance_) {
    }
  }
  
  void MapPart::SetCachedSize(int size) const {
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
  }
  const MapPart& MapPart::default_instance() {
    if (default_instance_ == NULL) protobuf_AddDesc_osmand_5findex_2eproto();  return *default_instance_;
  }
  
  MapPart* MapPart::default_instance_ = NULL;
  
  MapPart* MapPart::New() const {
    return new MapPart;
  }
  
  void MapPart::Clear() {
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      size_ = GOOGLE_LONGLONG(0);
      offset_ = GOOGLE_LONGLONG(0);
      if (_has_bit(2)) {
        if (name_ != &_default_name_) {
          name_->clear();
        }
      }
    }
    levels_.Clear();
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  bool MapPart::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!(EXPRESSION)) return false
    ::google::protobuf::uint32 tag;
    while ((tag = input->ReadTag()) != 0) {
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // required int64 size = 1;
        case 1: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &size_)));
            _set_bit(0);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(16)) goto parse_offset;
          break;
        }
        
        // required int64 offset = 2;
        case 2: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_offset:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &offset_)));
            _set_bit(1);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(26)) goto parse_name;
          break;
        }
        
        // optional string name = 3;
        case 3: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_name:
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_name()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(42)) goto parse_levels;
          break;
        }
        
        // repeated .MapLevel levels = 5;
        case 5: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_levels:
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                  input, add_levels()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(42)) goto parse_levels;
          if (input->ExpectAtEnd()) return true;
          break;
        }
        
        default: {
        handle_uninterpreted:
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
            return true;
          }
          DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
          break;
        }
      }
    }
    return true;
  #undef DO_
  }
  
  void MapPart::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // required int64 size = 1;
    if (_has_bit(0)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(1, this->size(), output);
    }
    
    // required int64 offset = 2;
    if (_has_bit(1)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(2, this->offset(), output);
    }
    
    // optional string name = 3;
    if (_has_bit(2)) {
      ::google::protobuf::internal::WireFormatLite::WriteString(
        3, this->name(), output);
    }
    
    // repeated .MapLevel levels = 5;
    for (int i = 0; i < this->levels_size(); i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessage(
        5, this->levels(i), output);
    }
    
  }
  
  int MapPart::ByteSize() const {
    int total_size = 0;
    
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      // required int64 size = 1;
      if (has_size()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->size());
      }
      
      // required int64 offset = 2;
      if (has_offset()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->offset());
      }
      
      // optional string name = 3;
      if (has_name()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::StringSize(
            this->name());
      }
      
    }
    // repeated .MapLevel levels = 5;
    total_size += 1 * this->levels_size();
    for (int i = 0; i < this->levels_size(); i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
          this->levels(i));
    }
    
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = total_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    return total_size;
  }
  
  void MapPart::CheckTypeAndMergeFrom(
      const ::google::protobuf::MessageLite& from) {
    MergeFrom(*::google::protobuf::down_cast<const MapPart*>(&from));
  }
  
  void MapPart::MergeFrom(const MapPart& from) {
    GOOGLE_CHECK_NE(&from, this);
    levels_.MergeFrom(from.levels_);
    if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      if (from._has_bit(0)) {
        set_size(from.size());
      }
      if (from._has_bit(1)) {
        set_offset(from.offset());
      }
      if (from._has_bit(2)) {
        set_name(from.name());
      }
    }
  }
  
  void MapPart::CopyFrom(const MapPart& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool MapPart::IsInitialized() const {
    if ((_has_bits_[0] & 0x00000003) != 0x00000003) return false;
    
    for (int i = 0; i < levels_size(); i++) {
      if (!this->levels(i).IsInitialized()) return false;
    }
    return true;
  }
  
  void MapPart::Swap(MapPart* other) {
    if (other != this) {
      std::swap(size_, other->size_);
      std::swap(offset_, other->offset_);
      std::swap(name_, other->name_);
      levels_.Swap(&other->levels_);
      std::swap(_has_bits_[0], other->_has_bits_[0]);
      std::swap(_cached_size_, other->_cached_size_);
    }
  }
  
  ::std::string MapPart::GetTypeName() const {
    return "MapPart";
  }
  
  
  // ===================================================================
  
  #ifndef _MSC_VER
  const int RoutingSubregion::kSizeFieldNumber;
  const int RoutingSubregion::kOffsetFieldNumber;
  const int RoutingSubregion::kLeftFieldNumber;
  const int RoutingSubregion::kRightFieldNumber;
  const int RoutingSubregion::kTopFieldNumber;
  const int RoutingSubregion::kBottomFieldNumber;
  const int RoutingSubregion::kShifToDataFieldNumber;
  #endif  // !_MSC_VER
  
  RoutingSubregion::RoutingSubregion()
    : ::google::protobuf::MessageLite() {
    SharedCtor();
  }
  
  void RoutingSubregion::InitAsDefaultInstance() {
  }
  
  RoutingSubregion::RoutingSubregion(const RoutingSubregion& from)
    : ::google::protobuf::MessageLite() {
    SharedCtor();
    MergeFrom(from);
  }
  
  void RoutingSubregion::SharedCtor() {
    _cached_size_ = 0;
    size_ = GOOGLE_LONGLONG(0);
    offset_ = GOOGLE_LONGLONG(0);
    left_ = 0;
    right_ = 0;
    top_ = 0;
    bottom_ = 0;
    shiftodata_ = 0u;
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  RoutingSubregion::~RoutingSubregion() {
    SharedDtor();
  }
  
  void RoutingSubregion::SharedDtor() {
    if (this != default_instance_) {
    }
  }
  
  void RoutingSubregion::SetCachedSize(int size) const {
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
  }
  const RoutingSubregion& RoutingSubregion::default_instance() {
    if (default_instance_ == NULL) protobuf_AddDesc_osmand_5findex_2eproto();  return *default_instance_;
  }
  
  RoutingSubregion* RoutingSubregion::default_instance_ = NULL;
  
  RoutingSubregion* RoutingSubregion::New() const {
    return new RoutingSubregion;
  }
  
  void RoutingSubregion::Clear() {
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      size_ = GOOGLE_LONGLONG(0);
      offset_ = GOOGLE_LONGLONG(0);
      left_ = 0;
      right_ = 0;
      top_ = 0;
      bottom_ = 0;
      shiftodata_ = 0u;
    }
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  bool RoutingSubregion::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!(EXPRESSION)) return false
    ::google::protobuf::uint32 tag;
    while ((tag = input->ReadTag()) != 0) {
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // required int64 size = 1;
        case 1: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &size_)));
            _set_bit(0);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(16)) goto parse_offset;
          break;
        }
        
        // required int64 offset = 2;
        case 2: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_offset:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &offset_)));
            _set_bit(1);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(32)) goto parse_left;
          break;
        }
        
        // required int32 left = 4;
        case 4: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_left:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &left_)));
            _set_bit(2);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(40)) goto parse_right;
          break;
        }
        
        // required int32 right = 5;
        case 5: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_right:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &right_)));
            _set_bit(3);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(48)) goto parse_top;
          break;
        }
        
        // required int32 top = 6;
        case 6: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_top:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &top_)));
            _set_bit(4);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(56)) goto parse_bottom;
          break;
        }
        
        // required int32 bottom = 7;
        case 7: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_bottom:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &bottom_)));
            _set_bit(5);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(64)) goto parse_shifToData;
          break;
        }
        
        // required uint32 shifToData = 8;
        case 8: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_shifToData:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                   input, &shiftodata_)));
            _set_bit(6);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectAtEnd()) return true;
          break;
        }
        
        default: {
        handle_uninterpreted:
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
            return true;
          }
          DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
          break;
        }
      }
    }
    return true;
  #undef DO_
  }
  
  void RoutingSubregion::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // required int64 size = 1;
    if (_has_bit(0)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(1, this->size(), output);
    }
    
    // required int64 offset = 2;
    if (_has_bit(1)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(2, this->offset(), output);
    }
    
    // required int32 left = 4;
    if (_has_bit(2)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(4, this->left(), output);
    }
    
    // required int32 right = 5;
    if (_has_bit(3)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(5, this->right(), output);
    }
    
    // required int32 top = 6;
    if (_has_bit(4)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(6, this->top(), output);
    }
    
    // required int32 bottom = 7;
    if (_has_bit(5)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(7, this->bottom(), output);
    }
    
    // required uint32 shifToData = 8;
    if (_has_bit(6)) {
      ::google::protobuf::internal::WireFormatLite::WriteUInt32(8, this->shiftodata(), output);
    }
    
  }
  
  int RoutingSubregion::ByteSize() const {
    int total_size = 0;
    
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      // required int64 size = 1;
      if (has_size()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->size());
      }
      
      // required int64 offset = 2;
      if (has_offset()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->offset());
      }
      
      // required int32 left = 4;
      if (has_left()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->left());
      }
      
      // required int32 right = 5;
      if (has_right()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->right());
      }
      
      // required int32 top = 6;
      if (has_top()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->top());
      }
      
      // required int32 bottom = 7;
      if (has_bottom()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->bottom());
      }
      
      // required uint32 shifToData = 8;
      if (has_shiftodata()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::UInt32Size(
            this->shiftodata());
      }
      
    }
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = total_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    return total_size;
  }
  
  void RoutingSubregion::CheckTypeAndMergeFrom(
      const ::google::protobuf::MessageLite& from) {
    MergeFrom(*::google::protobuf::down_cast<const RoutingSubregion*>(&from));
  }
  
  void RoutingSubregion::MergeFrom(const RoutingSubregion& from) {
    GOOGLE_CHECK_NE(&from, this);
    if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      if (from._has_bit(0)) {
        set_size(from.size());
      }
      if (from._has_bit(1)) {
        set_offset(from.offset());
      }
      if (from._has_bit(2)) {
        set_left(from.left());
      }
      if (from._has_bit(3)) {
        set_right(from.right());
      }
      if (from._has_bit(4)) {
        set_top(from.top());
      }
      if (from._has_bit(5)) {
        set_bottom(from.bottom());
      }
      if (from._has_bit(6)) {
        set_shiftodata(from.shiftodata());
      }
    }
  }
  
  void RoutingSubregion::CopyFrom(const RoutingSubregion& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool RoutingSubregion::IsInitialized() const {
    if ((_has_bits_[0] & 0x0000007f) != 0x0000007f) return false;
    
    return true;
  }
  
  void RoutingSubregion::Swap(RoutingSubregion* other) {
    if (other != this) {
      std::swap(size_, other->size_);
      std::swap(offset_, other->offset_);
      std::swap(left_, other->left_);
      std::swap(right_, other->right_);
      std::swap(top_, other->top_);
      std::swap(bottom_, other->bottom_);
      std::swap(shiftodata_, other->shiftodata_);
      std::swap(_has_bits_[0], other->_has_bits_[0]);
      std::swap(_cached_size_, other->_cached_size_);
    }
  }
  
  ::std::string RoutingSubregion::GetTypeName() const {
    return "RoutingSubregion";
  }
  
  
  // ===================================================================
  
  const ::std::string RoutingPart::_default_name_;
  #ifndef _MSC_VER
  const int RoutingPart::kSizeFieldNumber;
  const int RoutingPart::kOffsetFieldNumber;
  const int RoutingPart::kNameFieldNumber;
  const int RoutingPart::kSubregionsFieldNumber;
  #endif  // !_MSC_VER
  
  RoutingPart::RoutingPart()
    : ::google::protobuf::MessageLite() {
    SharedCtor();
  }
  
  void RoutingPart::InitAsDefaultInstance() {
  }
  
  RoutingPart::RoutingPart(const RoutingPart& from)
    : ::google::protobuf::MessageLite() {
    SharedCtor();
    MergeFrom(from);
  }
  
  void RoutingPart::SharedCtor() {
    _cached_size_ = 0;
    size_ = GOOGLE_LONGLONG(0);
    offset_ = GOOGLE_LONGLONG(0);
    name_ = const_cast< ::std::string*>(&_default_name_);
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  RoutingPart::~RoutingPart() {
    SharedDtor();
  }
  
  void RoutingPart::SharedDtor() {
    if (name_ != &_default_name_) {
      delete name_;
    }
    if (this != default_instance_) {
    }
  }
  
  void RoutingPart::SetCachedSize(int size) const {
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
  }
  const RoutingPart& RoutingPart::default_instance() {
    if (default_instance_ == NULL) protobuf_AddDesc_osmand_5findex_2eproto();  return *default_instance_;
  }
  
  RoutingPart* RoutingPart::default_instance_ = NULL;
  
  RoutingPart* RoutingPart::New() const {
    return new RoutingPart;
  }
  
  void RoutingPart::Clear() {
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      size_ = GOOGLE_LONGLONG(0);
      offset_ = GOOGLE_LONGLONG(0);
      if (_has_bit(2)) {
        if (name_ != &_default_name_) {
          name_->clear();
        }
      }
    }
    subregions_.Clear();
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  bool RoutingPart::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!(EXPRESSION)) return false
    ::google::protobuf::uint32 tag;
    while ((tag = input->ReadTag()) != 0) {
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // required int64 size = 1;
        case 1: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &size_)));
            _set_bit(0);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(16)) goto parse_offset;
          break;
        }
        
        // required int64 offset = 2;
        case 2: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_offset:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &offset_)));
            _set_bit(1);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(26)) goto parse_name;
          break;
        }
        
        // optional string name = 3;
        case 3: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_name:
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_name()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(42)) goto parse_subregions;
          break;
        }
        
        // repeated .RoutingSubregion subregions = 5;
        case 5: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_subregions:
            DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual(
                  input, add_subregions()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(42)) goto parse_subregions;
          if (input->ExpectAtEnd()) return true;
          break;
        }
        
        default: {
        handle_uninterpreted:
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
            return true;
          }
          DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
          break;
        }
      }
    }
    return true;
  #undef DO_
  }
  
  void RoutingPart::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // required int64 size = 1;
    if (_has_bit(0)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(1, this->size(), output);
    }
    
    // required int64 offset = 2;
    if (_has_bit(1)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(2, this->offset(), output);
    }
    
    // optional string name = 3;
    if (_has_bit(2)) {
      ::google::protobuf::internal::WireFormatLite::WriteString(
        3, this->name(), output);
    }
    
    // repeated .RoutingSubregion subregions = 5;
    for (int i = 0; i < this->subregions_size(); i++) {
      ::google::protobuf::internal::WireFormatLite::WriteMessage(
        5, this->subregions(i), output);
    }
    
  }
  
  int RoutingPart::ByteSize() const {
    int total_size = 0;
    
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      // required int64 size = 1;
      if (has_size()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->size());
      }
      
      // required int64 offset = 2;
      if (has_offset()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->offset());
      }
      
      // optional string name = 3;
      if (has_name()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::StringSize(
            this->name());
      }
      
    }
    // repeated .RoutingSubregion subregions = 5;
    total_size += 1 * this->subregions_size();
    for (int i = 0; i < this->subregions_size(); i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual(
          this->subregions(i));
    }
    
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = total_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    return total_size;
  }
  
  void RoutingPart::CheckTypeAndMergeFrom(
      const ::google::protobuf::MessageLite& from) {
    MergeFrom(*::google::protobuf::down_cast<const RoutingPart*>(&from));
  }
  
  void RoutingPart::MergeFrom(const RoutingPart& from) {
    GOOGLE_CHECK_NE(&from, this);
    subregions_.MergeFrom(from.subregions_);
    if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      if (from._has_bit(0)) {
        set_size(from.size());
      }
      if (from._has_bit(1)) {
        set_offset(from.offset());
      }
      if (from._has_bit(2)) {
        set_name(from.name());
      }
    }
  }
  
  void RoutingPart::CopyFrom(const RoutingPart& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool RoutingPart::IsInitialized() const {
    if ((_has_bits_[0] & 0x00000003) != 0x00000003) return false;
    
    for (int i = 0; i < subregions_size(); i++) {
      if (!this->subregions(i).IsInitialized()) return false;
    }
    return true;
  }
  
  void RoutingPart::Swap(RoutingPart* other) {
    if (other != this) {
      std::swap(size_, other->size_);
      std::swap(offset_, other->offset_);
      std::swap(name_, other->name_);
      subregions_.Swap(&other->subregions_);
      std::swap(_has_bits_[0], other->_has_bits_[0]);
      std::swap(_cached_size_, other->_cached_size_);
    }
  }
  
  ::std::string RoutingPart::GetTypeName() const {
    return "RoutingPart";
  }
  
  
  // ===================================================================
  
  const ::std::string TransportPart::_default_name_;
  #ifndef _MSC_VER
  const int TransportPart::kSizeFieldNumber;
  const int TransportPart::kOffsetFieldNumber;
  const int TransportPart::kNameFieldNumber;
  const int TransportPart::kLeftFieldNumber;
  const int TransportPart::kRightFieldNumber;
  const int TransportPart::kTopFieldNumber;
  const int TransportPart::kBottomFieldNumber;
  const int TransportPart::kStringTableOffsetFieldNumber;
  const int TransportPart::kStringTableLengthFieldNumber;
  const int TransportPart::kStopsTableOffsetFieldNumber;
  const int TransportPart::kStopsTableLengthFieldNumber;
  #endif  // !_MSC_VER
  
  TransportPart::TransportPart()
    : ::google::protobuf::MessageLite() {
    SharedCtor();
  }
  
  void TransportPart::InitAsDefaultInstance() {
  }
  
  TransportPart::TransportPart(const TransportPart& from)
    : ::google::protobuf::MessageLite() {
    SharedCtor();
    MergeFrom(from);
  }
  
  void TransportPart::SharedCtor() {
    _cached_size_ = 0;
    size_ = GOOGLE_LONGLONG(0);
    offset_ = GOOGLE_LONGLONG(0);
    name_ = const_cast< ::std::string*>(&_default_name_);
    left_ = 0;
    right_ = 0;
    top_ = 0;
    bottom_ = 0;
    stringtableoffset_ = 0u;
    stringtablelength_ = 0u;
    stopstableoffset_ = 0u;
    stopstablelength_ = 0u;
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  TransportPart::~TransportPart() {
    SharedDtor();
  }
  
  void TransportPart::SharedDtor() {
    if (name_ != &_default_name_) {
      delete name_;
    }
    if (this != default_instance_) {
    }
  }
  
  void TransportPart::SetCachedSize(int size) const {
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
  }
  const TransportPart& TransportPart::default_instance() {
    if (default_instance_ == NULL) protobuf_AddDesc_osmand_5findex_2eproto();  return *default_instance_;
  }
  
  TransportPart* TransportPart::default_instance_ = NULL;
  
  TransportPart* TransportPart::New() const {
    return new TransportPart;
  }
  
  void TransportPart::Clear() {
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      size_ = GOOGLE_LONGLONG(0);
      offset_ = GOOGLE_LONGLONG(0);
      if (_has_bit(2)) {
        if (name_ != &_default_name_) {
          name_->clear();
        }
      }
      left_ = 0;
      right_ = 0;
      top_ = 0;
      bottom_ = 0;
      stringtableoffset_ = 0u;
    }
    if (_has_bits_[8 / 32] & (0xffu << (8 % 32))) {
      stringtablelength_ = 0u;
      stopstableoffset_ = 0u;
      stopstablelength_ = 0u;
    }
    ::memset(_has_bits_, 0, sizeof(_has_bits_));
  }
  
  bool TransportPart::MergePartialFromCodedStream(
      ::google::protobuf::io::CodedInputStream* input) {
  #define DO_(EXPRESSION) if (!(EXPRESSION)) return false
    ::google::protobuf::uint32 tag;
    while ((tag = input->ReadTag()) != 0) {
      switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
        // required int64 size = 1;
        case 1: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &size_)));
            _set_bit(0);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(16)) goto parse_offset;
          break;
        }
        
        // required int64 offset = 2;
        case 2: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_offset:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                   input, &offset_)));
            _set_bit(1);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(26)) goto parse_name;
          break;
        }
        
        // optional string name = 3;
        case 3: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
           parse_name:
            DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                  input, this->mutable_name()));
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(32)) goto parse_left;
          break;
        }
        
        // optional int32 left = 4;
        case 4: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_left:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &left_)));
            _set_bit(3);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(40)) goto parse_right;
          break;
        }
        
        // optional int32 right = 5;
        case 5: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_right:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &right_)));
            _set_bit(4);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(48)) goto parse_top;
          break;
        }
        
        // optional int32 top = 6;
        case 6: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_top:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &top_)));
            _set_bit(5);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(56)) goto parse_bottom;
          break;
        }
        
        // optional int32 bottom = 7;
        case 7: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_bottom:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                   input, &bottom_)));
            _set_bit(6);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(64)) goto parse_stringTableOffset;
          break;
        }
        
        // optional uint32 stringTableOffset = 8;
        case 8: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_stringTableOffset:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                   input, &stringtableoffset_)));
            _set_bit(7);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(72)) goto parse_stringTableLength;
          break;
        }
        
        // optional uint32 stringTableLength = 9;
        case 9: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_stringTableLength:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                   input, &stringtablelength_)));
            _set_bit(8);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(80)) goto parse_stopsTableOffset;
          break;
        }
        
        // optional uint32 stopsTableOffset = 10;
        case 10: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_stopsTableOffset:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                   input, &stopstableoffset_)));
            _set_bit(9);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectTag(88)) goto parse_stopsTableLength;
          break;
        }
        
        // optional uint32 stopsTableLength = 11;
        case 11: {
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_VARINT) {
           parse_stopsTableLength:
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                     ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                   input, &stopstablelength_)));
            _set_bit(10);
          } else {
            goto handle_uninterpreted;
          }
          if (input->ExpectAtEnd()) return true;
          break;
        }
        
        default: {
        handle_uninterpreted:
          if (::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) ==
              ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) {
            return true;
          }
          DO_(::google::protobuf::internal::WireFormatLite::SkipField(input, tag));
          break;
        }
      }
    }
    return true;
  #undef DO_
  }
  
  void TransportPart::SerializeWithCachedSizes(
      ::google::protobuf::io::CodedOutputStream* output) const {
    // required int64 size = 1;
    if (_has_bit(0)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(1, this->size(), output);
    }
    
    // required int64 offset = 2;
    if (_has_bit(1)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt64(2, this->offset(), output);
    }
    
    // optional string name = 3;
    if (_has_bit(2)) {
      ::google::protobuf::internal::WireFormatLite::WriteString(
        3, this->name(), output);
    }
    
    // optional int32 left = 4;
    if (_has_bit(3)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(4, this->left(), output);
    }
    
    // optional int32 right = 5;
    if (_has_bit(4)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(5, this->right(), output);
    }
    
    // optional int32 top = 6;
    if (_has_bit(5)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(6, this->top(), output);
    }
    
    // optional int32 bottom = 7;
    if (_has_bit(6)) {
      ::google::protobuf::internal::WireFormatLite::WriteInt32(7, this->bottom(), output);
    }
    
    // optional uint32 stringTableOffset = 8;
    if (_has_bit(7)) {
      ::google::protobuf::internal::WireFormatLite::WriteUInt32(8, this->stringtableoffset(), output);
    }
    
    // optional uint32 stringTableLength = 9;
    if (_has_bit(8)) {
      ::google::protobuf::internal::WireFormatLite::WriteUInt32(9, this->stringtablelength(), output);
    }
    
    // optional uint32 stopsTableOffset = 10;
    if (_has_bit(9)) {
      ::google::protobuf::internal::WireFormatLite::WriteUInt32(10, this->stopstableoffset(), output);
    }
    
    // optional uint32 stopsTableLength = 11;
    if (_has_bit(10)) {
      ::google::protobuf::internal::WireFormatLite::WriteUInt32(11, this->stopstablelength(), output);
    }
    
  }
  
  int TransportPart::ByteSize() const {
    int total_size = 0;
    
    if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      // required int64 size = 1;
      if (has_size()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->size());
      }
      
      // required int64 offset = 2;
      if (has_offset()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int64Size(
            this->offset());
      }
      
      // optional string name = 3;
      if (has_name()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::StringSize(
            this->name());
      }
      
      // optional int32 left = 4;
      if (has_left()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->left());
      }
      
      // optional int32 right = 5;
      if (has_right()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->right());
      }
      
      // optional int32 top = 6;
      if (has_top()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->top());
      }
      
      // optional int32 bottom = 7;
      if (has_bottom()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::Int32Size(
            this->bottom());
      }
      
      // optional uint32 stringTableOffset = 8;
      if (has_stringtableoffset()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::UInt32Size(
            this->stringtableoffset());
      }
      
    }
    if (_has_bits_[8 / 32] & (0xffu << (8 % 32))) {
      // optional uint32 stringTableLength = 9;
      if (has_stringtablelength()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::UInt32Size(
            this->stringtablelength());
      }
      
      // optional uint32 stopsTableOffset = 10;
      if (has_stopstableoffset()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::UInt32Size(
            this->stopstableoffset());
      }
      
      // optional uint32 stopsTableLength = 11;
      if (has_stopstablelength()) {
        total_size += 1 +
          ::google::protobuf::internal::WireFormatLite::UInt32Size(
            this->stopstablelength());
      }
      
    }
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _cached_size_ = total_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    return total_size;
  }
  
  void TransportPart::CheckTypeAndMergeFrom(
      const ::google::protobuf::MessageLite& from) {
    MergeFrom(*::google::protobuf::down_cast<const TransportPart*>(&from));
  }
  
  void TransportPart::MergeFrom(const TransportPart& from) {
    GOOGLE_CHECK_NE(&from, this);
    if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) {
      if (from._has_bit(0)) {
        set_size(from.size());
      }
      if (from._has_bit(1)) {
        set_offset(from.offset());
      }
      if (from._has_bit(2)) {
        set_name(from.name());
      }
      if (from._has_bit(3)) {
        set_left(from.left());
      }
      if (from._has_bit(4)) {
        set_right(from.right());
      }
      if (from._has_bit(5)) {
        set_top(from.top());
      }
      if (from._has_bit(6)) {
        set_bottom(from.bottom());
      }
      if (from._has_bit(7)) {
        set_stringtableoffset(from.stringtableoffset());
      }
    }
    if (from._has_bits_[8 / 32] & (0xffu << (8 % 32))) {
      if (from._has_bit(8)) {
        set_stringtablelength(from.stringtablelength());
      }
      if (from._has_bit(9)) {
        set_stopstableoffset(from.stopstableoffset());
      }
      if (from._has_bit(10)) {
        set_stopstablelength(from.stopstablelength());
      }
    }
  }
  
  void TransportPart::CopyFrom(const TransportPart& from) {
    if (&from == this) return;
    Clear();
    MergeFrom(from);
  }
  
  bool TransportPart::IsInitialized() const {
    if ((_has_bits_[0] & 0x00000003) != 0x00000003) return false;
    
    return true;
  }
  
  void TransportPart::Swap(TransportPart* other) {
    if (other != this) {
      std::swap(size_, other->size_);
      std::swap(offset_, other->offset_);
      std::swap(name_, other->name_);
      std::swap(left_, other->left_);
      std::swap(right_, other->right_);
      std::swap(top_, other->top_);
      std::swap(bottom_, other->bottom_);
      std::swap(stringtableoffset_, other->stringtableoffset_);
      std::swap(stringtablelength_, other->stringtablelength_);
      std::swap(stopstableoffset_, other->stopstableoffset_);
      std::swap(stopstablelength_, other->stopstablelength_);
      std::swap(_has_bits_[0], other->_has_bits_[0]);
      std::swap(_cached_size_, other->_cached_size_);
    }
  }
  
  ::std::string TransportPart::GetTypeName() const {
    return "TransportPart";
  }
  
  
  // @@protoc_insertion_point(namespace_scope)
  
  // @@protoc_insertion_point(global_scope)
  