OSMPBF.java

// Generated by the protocol buffer compiler.  DO NOT EDIT!
// NO CHECKED-IN PROTOBUF GENCODE
// source: osmformat.proto
// Protobuf Java Version: 4.31.1

package nl.tudelft.simulation.dsol.animation.gis.osm.pbf;
//CHECKSTYLE:OFF

@SuppressWarnings("javadoc")

@com.google.protobuf.Generated
public final class OSMPBF
{
    private OSMPBF()
    {
    }

    static
    {
        com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 31, /* patch= */ 1,
                /* suffix= */ "", OSMPBF.class.getName());
    }

    public static void registerAllExtensions(final com.google.protobuf.ExtensionRegistryLite registry)
    {
    }

    public static void registerAllExtensions(final com.google.protobuf.ExtensionRegistry registry)
    {
        registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry);
    }

    public interface HeaderBlockOrBuilder extends
            // @@protoc_insertion_point(interface_extends:OSMPBF.HeaderBlock)
            com.google.protobuf.MessageOrBuilder
    {

        /**
         * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
         * @return Whether the bbox field is set.
         */
        boolean hasBbox();

        /**
         * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
         * @return The bbox.
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox getBbox();

        /**
         * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBoxOrBuilder getBboxOrBuilder();

        /**
         * <pre>
         * Additional tags to aid in parsing this dataset
         * </pre>
         *
         * <code>repeated string required_features = 4;</code>
         * @return A list containing the requiredFeatures.
         */
        java.util.List<java.lang.String> getRequiredFeaturesList();

        /**
         * <pre>
         * Additional tags to aid in parsing this dataset
         * </pre>
         *
         * <code>repeated string required_features = 4;</code>
         * @return The count of requiredFeatures.
         */
        int getRequiredFeaturesCount();

        /**
         * <pre>
         * Additional tags to aid in parsing this dataset
         * </pre>
         *
         * <code>repeated string required_features = 4;</code>
         * @param index The index of the element to return.
         * @return The requiredFeatures at the given index.
         */
        java.lang.String getRequiredFeatures(int index);

        /**
         * <pre>
         * Additional tags to aid in parsing this dataset
         * </pre>
         *
         * <code>repeated string required_features = 4;</code>
         * @param index The index of the value to return.
         * @return The bytes of the requiredFeatures at the given index.
         */
        com.google.protobuf.ByteString getRequiredFeaturesBytes(int index);

        /**
         * <code>repeated string optional_features = 5;</code>
         * @return A list containing the optionalFeatures.
         */
        java.util.List<java.lang.String> getOptionalFeaturesList();

        /**
         * <code>repeated string optional_features = 5;</code>
         * @return The count of optionalFeatures.
         */
        int getOptionalFeaturesCount();

        /**
         * <code>repeated string optional_features = 5;</code>
         * @param index The index of the element to return.
         * @return The optionalFeatures at the given index.
         */
        java.lang.String getOptionalFeatures(int index);

        /**
         * <code>repeated string optional_features = 5;</code>
         * @param index The index of the value to return.
         * @return The bytes of the optionalFeatures at the given index.
         */
        com.google.protobuf.ByteString getOptionalFeaturesBytes(int index);

        /**
         * <code>optional string writingprogram = 16;</code>
         * @return Whether the writingprogram field is set.
         */
        boolean hasWritingprogram();

        /**
         * <code>optional string writingprogram = 16;</code>
         * @return The writingprogram.
         */
        java.lang.String getWritingprogram();

        /**
         * <code>optional string writingprogram = 16;</code>
         * @return The bytes for writingprogram.
         */
        com.google.protobuf.ByteString getWritingprogramBytes();

        /**
         * <pre>
         * From the bbox field.
         * </pre>
         *
         * <code>optional string source = 17;</code>
         * @return Whether the source field is set.
         */
        boolean hasSource();

        /**
         * <pre>
         * From the bbox field.
         * </pre>
         *
         * <code>optional string source = 17;</code>
         * @return The source.
         */
        java.lang.String getSource();

        /**
         * <pre>
         * From the bbox field.
         * </pre>
         *
         * <code>optional string source = 17;</code>
         * @return The bytes for source.
         */
        com.google.protobuf.ByteString getSourceBytes();

        /**
         * <pre>
         * Replication timestamp, expressed in seconds since the epoch,
         * otherwise the same value as in the "timestamp=..." field
         * in the state.txt file used by Osmosis.
         * </pre>
         *
         * <code>optional int64 osmosis_replication_timestamp = 32;</code>
         * @return Whether the osmosisReplicationTimestamp field is set.
         */
        boolean hasOsmosisReplicationTimestamp();

        /**
         * <pre>
         * Replication timestamp, expressed in seconds since the epoch,
         * otherwise the same value as in the "timestamp=..." field
         * in the state.txt file used by Osmosis.
         * </pre>
         *
         * <code>optional int64 osmosis_replication_timestamp = 32;</code>
         * @return The osmosisReplicationTimestamp.
         */
        long getOsmosisReplicationTimestamp();

        /**
         * <pre>
         * Replication sequence number (sequenceNumber in state.txt).
         * </pre>
         *
         * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
         * @return Whether the osmosisReplicationSequenceNumber field is set.
         */
        boolean hasOsmosisReplicationSequenceNumber();

        /**
         * <pre>
         * Replication sequence number (sequenceNumber in state.txt).
         * </pre>
         *
         * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
         * @return The osmosisReplicationSequenceNumber.
         */
        long getOsmosisReplicationSequenceNumber();

        /**
         * <pre>
         * Replication base URL (from Osmosis' configuration.txt file).
         * </pre>
         *
         * <code>optional string osmosis_replication_base_url = 34;</code>
         * @return Whether the osmosisReplicationBaseUrl field is set.
         */
        boolean hasOsmosisReplicationBaseUrl();

        /**
         * <pre>
         * Replication base URL (from Osmosis' configuration.txt file).
         * </pre>
         *
         * <code>optional string osmosis_replication_base_url = 34;</code>
         * @return The osmosisReplicationBaseUrl.
         */
        java.lang.String getOsmosisReplicationBaseUrl();

        /**
         * <pre>
         * Replication base URL (from Osmosis' configuration.txt file).
         * </pre>
         *
         * <code>optional string osmosis_replication_base_url = 34;</code>
         * @return The bytes for osmosisReplicationBaseUrl.
         */
        com.google.protobuf.ByteString getOsmosisReplicationBaseUrlBytes();
    }

    /**
     * Protobuf type {@code OSMPBF.HeaderBlock}
     */
    public static final class HeaderBlock extends com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:OSMPBF.HeaderBlock)
            HeaderBlockOrBuilder
    {
        private static final long serialVersionUID = 0L;
        static
        {
            com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                    com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 31, /* patch= */ 1,
                    /* suffix= */ "", HeaderBlock.class.getName());
        }

        // Use HeaderBlock.newBuilder() to construct.
        private HeaderBlock(final com.google.protobuf.GeneratedMessage.Builder<?> builder)
        {
            super(builder);
        }

        private HeaderBlock()
        {
            this.requiredFeatures_ = com.google.protobuf.LazyStringArrayList.emptyList();
            this.optionalFeatures_ = com.google.protobuf.LazyStringArrayList.emptyList();
            this.writingprogram_ = "";
            this.source_ = "";
            this.osmosisReplicationBaseUrl_ = "";
        }

        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_HeaderBlock_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_HeaderBlock_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock.class,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock.Builder.class);
        }

        private int bitField0_;

        public static final int BBOX_FIELD_NUMBER = 1;

        private nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox bbox_;

        /**
         * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
         * @return Whether the bbox field is set.
         */
        @java.lang.Override
        public boolean hasBbox()
        {
            return ((this.bitField0_ & 0x00000001) != 0);
        }

        /**
         * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
         * @return The bbox.
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox getBbox()
        {
            return this.bbox_ == null ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.getDefaultInstance()
                    : this.bbox_;
        }

        /**
         * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBoxOrBuilder getBboxOrBuilder()
        {
            return this.bbox_ == null ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.getDefaultInstance()
                    : this.bbox_;
        }

        public static final int REQUIRED_FEATURES_FIELD_NUMBER = 4;

        @SuppressWarnings("serial")
        private com.google.protobuf.LazyStringArrayList requiredFeatures_ = com.google.protobuf.LazyStringArrayList.emptyList();

        /**
         * <pre>
         * Additional tags to aid in parsing this dataset
         * </pre>
         *
         * <code>repeated string required_features = 4;</code>
         * @return A list containing the requiredFeatures.
         */
        @Override
        public com.google.protobuf.ProtocolStringList getRequiredFeaturesList()
        {
            return this.requiredFeatures_;
        }

        /**
         * <pre>
         * Additional tags to aid in parsing this dataset
         * </pre>
         *
         * <code>repeated string required_features = 4;</code>
         * @return The count of requiredFeatures.
         */
        @Override
        public int getRequiredFeaturesCount()
        {
            return this.requiredFeatures_.size();
        }

        /**
         * <pre>
         * Additional tags to aid in parsing this dataset
         * </pre>
         *
         * <code>repeated string required_features = 4;</code>
         * @param index The index of the element to return.
         * @return The requiredFeatures at the given index.
         */
        @Override
        public java.lang.String getRequiredFeatures(final int index)
        {
            return this.requiredFeatures_.get(index);
        }

        /**
         * <pre>
         * Additional tags to aid in parsing this dataset
         * </pre>
         *
         * <code>repeated string required_features = 4;</code>
         * @param index The index of the value to return.
         * @return The bytes of the requiredFeatures at the given index.
         */
        @Override
        public com.google.protobuf.ByteString getRequiredFeaturesBytes(final int index)
        {
            return this.requiredFeatures_.getByteString(index);
        }

        public static final int OPTIONAL_FEATURES_FIELD_NUMBER = 5;

        @SuppressWarnings("serial")
        private com.google.protobuf.LazyStringArrayList optionalFeatures_ = com.google.protobuf.LazyStringArrayList.emptyList();

        /**
         * <code>repeated string optional_features = 5;</code>
         * @return A list containing the optionalFeatures.
         */
        @Override
        public com.google.protobuf.ProtocolStringList getOptionalFeaturesList()
        {
            return this.optionalFeatures_;
        }

        /**
         * <code>repeated string optional_features = 5;</code>
         * @return The count of optionalFeatures.
         */
        @Override
        public int getOptionalFeaturesCount()
        {
            return this.optionalFeatures_.size();
        }

        /**
         * <code>repeated string optional_features = 5;</code>
         * @param index The index of the element to return.
         * @return The optionalFeatures at the given index.
         */
        @Override
        public java.lang.String getOptionalFeatures(final int index)
        {
            return this.optionalFeatures_.get(index);
        }

        /**
         * <code>repeated string optional_features = 5;</code>
         * @param index The index of the value to return.
         * @return The bytes of the optionalFeatures at the given index.
         */
        @Override
        public com.google.protobuf.ByteString getOptionalFeaturesBytes(final int index)
        {
            return this.optionalFeatures_.getByteString(index);
        }

        public static final int WRITINGPROGRAM_FIELD_NUMBER = 16;

        @SuppressWarnings("serial")
        private volatile java.lang.Object writingprogram_ = "";

        /**
         * <code>optional string writingprogram = 16;</code>
         * @return Whether the writingprogram field is set.
         */
        @java.lang.Override
        public boolean hasWritingprogram()
        {
            return ((this.bitField0_ & 0x00000002) != 0);
        }

        /**
         * <code>optional string writingprogram = 16;</code>
         * @return The writingprogram.
         */
        @java.lang.Override
        public java.lang.String getWritingprogram()
        {
            java.lang.Object ref = this.writingprogram_;
            if (ref instanceof java.lang.String)
            {
                return (java.lang.String) ref;
            }
            else
            {
                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8())
                {
                    this.writingprogram_ = s;
                }
                return s;
            }
        }

        /**
         * <code>optional string writingprogram = 16;</code>
         * @return The bytes for writingprogram.
         */
        @java.lang.Override
        public com.google.protobuf.ByteString getWritingprogramBytes()
        {
            java.lang.Object ref = this.writingprogram_;
            if (ref instanceof java.lang.String)
            {
                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
                this.writingprogram_ = b;
                return b;
            }
            else
            {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int SOURCE_FIELD_NUMBER = 17;

        @SuppressWarnings("serial")
        private volatile java.lang.Object source_ = "";

        /**
         * <pre>
         * From the bbox field.
         * </pre>
         *
         * <code>optional string source = 17;</code>
         * @return Whether the source field is set.
         */
        @java.lang.Override
        public boolean hasSource()
        {
            return ((this.bitField0_ & 0x00000004) != 0);
        }

        /**
         * <pre>
         * From the bbox field.
         * </pre>
         *
         * <code>optional string source = 17;</code>
         * @return The source.
         */
        @java.lang.Override
        public java.lang.String getSource()
        {
            java.lang.Object ref = this.source_;
            if (ref instanceof java.lang.String)
            {
                return (java.lang.String) ref;
            }
            else
            {
                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8())
                {
                    this.source_ = s;
                }
                return s;
            }
        }

        /**
         * <pre>
         * From the bbox field.
         * </pre>
         *
         * <code>optional string source = 17;</code>
         * @return The bytes for source.
         */
        @java.lang.Override
        public com.google.protobuf.ByteString getSourceBytes()
        {
            java.lang.Object ref = this.source_;
            if (ref instanceof java.lang.String)
            {
                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
                this.source_ = b;
                return b;
            }
            else
            {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        public static final int OSMOSIS_REPLICATION_TIMESTAMP_FIELD_NUMBER = 32;

        private long osmosisReplicationTimestamp_ = 0L;

        /**
         * <pre>
         * Replication timestamp, expressed in seconds since the epoch,
         * otherwise the same value as in the "timestamp=..." field
         * in the state.txt file used by Osmosis.
         * </pre>
         *
         * <code>optional int64 osmosis_replication_timestamp = 32;</code>
         * @return Whether the osmosisReplicationTimestamp field is set.
         */
        @java.lang.Override
        public boolean hasOsmosisReplicationTimestamp()
        {
            return ((this.bitField0_ & 0x00000008) != 0);
        }

        /**
         * <pre>
         * Replication timestamp, expressed in seconds since the epoch,
         * otherwise the same value as in the "timestamp=..." field
         * in the state.txt file used by Osmosis.
         * </pre>
         *
         * <code>optional int64 osmosis_replication_timestamp = 32;</code>
         * @return The osmosisReplicationTimestamp.
         */
        @java.lang.Override
        public long getOsmosisReplicationTimestamp()
        {
            return this.osmosisReplicationTimestamp_;
        }

        public static final int OSMOSIS_REPLICATION_SEQUENCE_NUMBER_FIELD_NUMBER = 33;

        private long osmosisReplicationSequenceNumber_ = 0L;

        /**
         * <pre>
         * Replication sequence number (sequenceNumber in state.txt).
         * </pre>
         *
         * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
         * @return Whether the osmosisReplicationSequenceNumber field is set.
         */
        @java.lang.Override
        public boolean hasOsmosisReplicationSequenceNumber()
        {
            return ((this.bitField0_ & 0x00000010) != 0);
        }

        /**
         * <pre>
         * Replication sequence number (sequenceNumber in state.txt).
         * </pre>
         *
         * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
         * @return The osmosisReplicationSequenceNumber.
         */
        @java.lang.Override
        public long getOsmosisReplicationSequenceNumber()
        {
            return this.osmosisReplicationSequenceNumber_;
        }

        public static final int OSMOSIS_REPLICATION_BASE_URL_FIELD_NUMBER = 34;

        @SuppressWarnings("serial")
        private volatile java.lang.Object osmosisReplicationBaseUrl_ = "";

        /**
         * <pre>
         * Replication base URL (from Osmosis' configuration.txt file).
         * </pre>
         *
         * <code>optional string osmosis_replication_base_url = 34;</code>
         * @return Whether the osmosisReplicationBaseUrl field is set.
         */
        @java.lang.Override
        public boolean hasOsmosisReplicationBaseUrl()
        {
            return ((this.bitField0_ & 0x00000020) != 0);
        }

        /**
         * <pre>
         * Replication base URL (from Osmosis' configuration.txt file).
         * </pre>
         *
         * <code>optional string osmosis_replication_base_url = 34;</code>
         * @return The osmosisReplicationBaseUrl.
         */
        @java.lang.Override
        public java.lang.String getOsmosisReplicationBaseUrl()
        {
            java.lang.Object ref = this.osmosisReplicationBaseUrl_;
            if (ref instanceof java.lang.String)
            {
                return (java.lang.String) ref;
            }
            else
            {
                com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
                java.lang.String s = bs.toStringUtf8();
                if (bs.isValidUtf8())
                {
                    this.osmosisReplicationBaseUrl_ = s;
                }
                return s;
            }
        }

        /**
         * <pre>
         * Replication base URL (from Osmosis' configuration.txt file).
         * </pre>
         *
         * <code>optional string osmosis_replication_base_url = 34;</code>
         * @return The bytes for osmosisReplicationBaseUrl.
         */
        @java.lang.Override
        public com.google.protobuf.ByteString getOsmosisReplicationBaseUrlBytes()
        {
            java.lang.Object ref = this.osmosisReplicationBaseUrl_;
            if (ref instanceof java.lang.String)
            {
                com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
                this.osmosisReplicationBaseUrl_ = b;
                return b;
            }
            else
            {
                return (com.google.protobuf.ByteString) ref;
            }
        }

        private byte memoizedIsInitialized = -1;

        @java.lang.Override
        public final boolean isInitialized()
        {
            byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1)
                return true;
            if (isInitialized == 0)
                return false;

            if (hasBbox())
            {
                if (!getBbox().isInitialized())
                {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            this.memoizedIsInitialized = 1;
            return true;
        }

        @java.lang.Override
        public void writeTo(final com.google.protobuf.CodedOutputStream output) throws java.io.IOException
        {
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                output.writeMessage(1, getBbox());
            }
            for (int i = 0; i < this.requiredFeatures_.size(); i++)
            {
                com.google.protobuf.GeneratedMessage.writeString(output, 4, this.requiredFeatures_.getRaw(i));
            }
            for (int i = 0; i < this.optionalFeatures_.size(); i++)
            {
                com.google.protobuf.GeneratedMessage.writeString(output, 5, this.optionalFeatures_.getRaw(i));
            }
            if (((this.bitField0_ & 0x00000002) != 0))
            {
                com.google.protobuf.GeneratedMessage.writeString(output, 16, this.writingprogram_);
            }
            if (((this.bitField0_ & 0x00000004) != 0))
            {
                com.google.protobuf.GeneratedMessage.writeString(output, 17, this.source_);
            }
            if (((this.bitField0_ & 0x00000008) != 0))
            {
                output.writeInt64(32, this.osmosisReplicationTimestamp_);
            }
            if (((this.bitField0_ & 0x00000010) != 0))
            {
                output.writeInt64(33, this.osmosisReplicationSequenceNumber_);
            }
            if (((this.bitField0_ & 0x00000020) != 0))
            {
                com.google.protobuf.GeneratedMessage.writeString(output, 34, this.osmosisReplicationBaseUrl_);
            }
            getUnknownFields().writeTo(output);
        }

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

            size = 0;
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getBbox());
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.requiredFeatures_.size(); i++)
                {
                    dataSize += computeStringSizeNoTag(this.requiredFeatures_.getRaw(i));
                }
                size += dataSize;
                size += 1 * getRequiredFeaturesList().size();
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.optionalFeatures_.size(); i++)
                {
                    dataSize += computeStringSizeNoTag(this.optionalFeatures_.getRaw(i));
                }
                size += dataSize;
                size += 1 * getOptionalFeaturesList().size();
            }
            if (((this.bitField0_ & 0x00000002) != 0))
            {
                size += com.google.protobuf.GeneratedMessage.computeStringSize(16, this.writingprogram_);
            }
            if (((this.bitField0_ & 0x00000004) != 0))
            {
                size += com.google.protobuf.GeneratedMessage.computeStringSize(17, this.source_);
            }
            if (((this.bitField0_ & 0x00000008) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeInt64Size(32, this.osmosisReplicationTimestamp_);
            }
            if (((this.bitField0_ & 0x00000010) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeInt64Size(33, this.osmosisReplicationSequenceNumber_);
            }
            if (((this.bitField0_ & 0x00000020) != 0))
            {
                size += com.google.protobuf.GeneratedMessage.computeStringSize(34, this.osmosisReplicationBaseUrl_);
            }
            size += getUnknownFields().getSerializedSize();
            this.memoizedSize = size;
            return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj)
        {
            if (obj == this)
            {
                return true;
            }
            if (!(obj instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock))
            {
                return super.equals(obj);
            }
            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock other =
                    (nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock) obj;

            if (hasBbox() != other.hasBbox())
                return false;
            if (hasBbox())
            {
                if (!getBbox().equals(other.getBbox()))
                    return false;
            }
            if (!getRequiredFeaturesList().equals(other.getRequiredFeaturesList()))
                return false;
            if (!getOptionalFeaturesList().equals(other.getOptionalFeaturesList()))
                return false;
            if (hasWritingprogram() != other.hasWritingprogram())
                return false;
            if (hasWritingprogram())
            {
                if (!getWritingprogram().equals(other.getWritingprogram()))
                    return false;
            }
            if (hasSource() != other.hasSource())
                return false;
            if (hasSource())
            {
                if (!getSource().equals(other.getSource()))
                    return false;
            }
            if (hasOsmosisReplicationTimestamp() != other.hasOsmosisReplicationTimestamp())
                return false;
            if (hasOsmosisReplicationTimestamp())
            {
                if (getOsmosisReplicationTimestamp() != other.getOsmosisReplicationTimestamp())
                    return false;
            }
            if (hasOsmosisReplicationSequenceNumber() != other.hasOsmosisReplicationSequenceNumber())
                return false;
            if (hasOsmosisReplicationSequenceNumber())
            {
                if (getOsmosisReplicationSequenceNumber() != other.getOsmosisReplicationSequenceNumber())
                    return false;
            }
            if (hasOsmosisReplicationBaseUrl() != other.hasOsmosisReplicationBaseUrl())
                return false;
            if (hasOsmosisReplicationBaseUrl())
            {
                if (!getOsmosisReplicationBaseUrl().equals(other.getOsmosisReplicationBaseUrl()))
                    return false;
            }
            if (!getUnknownFields().equals(other.getUnknownFields()))
                return false;
            return true;
        }

        @java.lang.Override
        public int hashCode()
        {
            if (this.memoizedHashCode != 0)
            {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = (19 * hash) + getDescriptor().hashCode();
            if (hasBbox())
            {
                hash = (37 * hash) + BBOX_FIELD_NUMBER;
                hash = (53 * hash) + getBbox().hashCode();
            }
            if (getRequiredFeaturesCount() > 0)
            {
                hash = (37 * hash) + REQUIRED_FEATURES_FIELD_NUMBER;
                hash = (53 * hash) + getRequiredFeaturesList().hashCode();
            }
            if (getOptionalFeaturesCount() > 0)
            {
                hash = (37 * hash) + OPTIONAL_FEATURES_FIELD_NUMBER;
                hash = (53 * hash) + getOptionalFeaturesList().hashCode();
            }
            if (hasWritingprogram())
            {
                hash = (37 * hash) + WRITINGPROGRAM_FIELD_NUMBER;
                hash = (53 * hash) + getWritingprogram().hashCode();
            }
            if (hasSource())
            {
                hash = (37 * hash) + SOURCE_FIELD_NUMBER;
                hash = (53 * hash) + getSource().hashCode();
            }
            if (hasOsmosisReplicationTimestamp())
            {
                hash = (37 * hash) + OSMOSIS_REPLICATION_TIMESTAMP_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getOsmosisReplicationTimestamp());
            }
            if (hasOsmosisReplicationSequenceNumber())
            {
                hash = (37 * hash) + OSMOSIS_REPLICATION_SEQUENCE_NUMBER_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getOsmosisReplicationSequenceNumber());
            }
            if (hasOsmosisReplicationBaseUrl())
            {
                hash = (37 * hash) + OSMOSIS_REPLICATION_BASE_URL_FIELD_NUMBER;
                hash = (53 * hash) + getOsmosisReplicationBaseUrl().hashCode();
            }
            hash = (29 * hash) + getUnknownFields().hashCode();
            this.memoizedHashCode = hash;
            return hash;
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock parseFrom(
                final java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock parseFrom(
                final java.nio.ByteBuffer data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock parseFrom(
                final com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock parseFrom(
                final com.google.protobuf.ByteString data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock parseFrom(final byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock parseFrom(final byte[] data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock parseFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock parseFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock parseDelimitedFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock parseDelimitedFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock parseFrom(
                final com.google.protobuf.CodedInputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock parseFrom(
                final com.google.protobuf.CodedInputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        @java.lang.Override
        public Builder newBuilderForType()
        {
            return newBuilder();
        }

        public static Builder newBuilder()
        {
            return DEFAULT_INSTANCE.toBuilder();
        }

        public static Builder newBuilder(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock prototype)
        {
            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }

        @java.lang.Override
        public Builder toBuilder()
        {
            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
        }

        @java.lang.Override
        protected Builder newBuilderForType(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
        {
            Builder builder = new Builder(parent);
            return builder;
        }

        /**
         * Protobuf type {@code OSMPBF.HeaderBlock}
         */
        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:OSMPBF.HeaderBlock)
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlockOrBuilder
        {
            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_HeaderBlock_descriptor;
            }

            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_HeaderBlock_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock.class,
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock.Builder.class);
            }

            // Construct using nl.tudelft.simulation.dsol.animation.gis.osm.pbf.Osmformat.HeaderBlock.newBuilder()
            private Builder()
            {
                maybeForceBuilderInitialization();
            }

            private Builder(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
            {
                super(parent);
                maybeForceBuilderInitialization();
            }

            private void maybeForceBuilderInitialization()
            {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders)
                {
                    internalGetBboxFieldBuilder();
                }
            }

            @java.lang.Override
            public Builder clear()
            {
                super.clear();
                this.bitField0_ = 0;
                this.bbox_ = null;
                if (this.bboxBuilder_ != null)
                {
                    this.bboxBuilder_.dispose();
                    this.bboxBuilder_ = null;
                }
                this.requiredFeatures_ = com.google.protobuf.LazyStringArrayList.emptyList();
                this.optionalFeatures_ = com.google.protobuf.LazyStringArrayList.emptyList();
                this.writingprogram_ = "";
                this.source_ = "";
                this.osmosisReplicationTimestamp_ = 0L;
                this.osmosisReplicationSequenceNumber_ = 0L;
                this.osmosisReplicationBaseUrl_ = "";
                return this;
            }

            @java.lang.Override
            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_HeaderBlock_descriptor;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock getDefaultInstanceForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock.getDefaultInstance();
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock build()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock result = buildPartial();
                if (!result.isInitialized())
                {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock buildPartial()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock result =
                        new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock(this);
                if (this.bitField0_ != 0)
                {
                    buildPartial0(result);
                }
                onBuilt();
                return result;
            }

            private void buildPartial0(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock result)
            {
                int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) != 0))
                {
                    result.bbox_ = this.bboxBuilder_ == null ? this.bbox_ : this.bboxBuilder_.build();
                    to_bitField0_ |= 0x00000001;
                }
                if (((from_bitField0_ & 0x00000002) != 0))
                {
                    this.requiredFeatures_.makeImmutable();
                    result.requiredFeatures_ = this.requiredFeatures_;
                }
                if (((from_bitField0_ & 0x00000004) != 0))
                {
                    this.optionalFeatures_.makeImmutable();
                    result.optionalFeatures_ = this.optionalFeatures_;
                }
                if (((from_bitField0_ & 0x00000008) != 0))
                {
                    result.writingprogram_ = this.writingprogram_;
                    to_bitField0_ |= 0x00000002;
                }
                if (((from_bitField0_ & 0x00000010) != 0))
                {
                    result.source_ = this.source_;
                    to_bitField0_ |= 0x00000004;
                }
                if (((from_bitField0_ & 0x00000020) != 0))
                {
                    result.osmosisReplicationTimestamp_ = this.osmosisReplicationTimestamp_;
                    to_bitField0_ |= 0x00000008;
                }
                if (((from_bitField0_ & 0x00000040) != 0))
                {
                    result.osmosisReplicationSequenceNumber_ = this.osmosisReplicationSequenceNumber_;
                    to_bitField0_ |= 0x00000010;
                }
                if (((from_bitField0_ & 0x00000080) != 0))
                {
                    result.osmosisReplicationBaseUrl_ = this.osmosisReplicationBaseUrl_;
                    to_bitField0_ |= 0x00000020;
                }
                result.bitField0_ |= to_bitField0_;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.Message other)
            {
                if (other instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock)
                {
                    return mergeFrom((nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock) other);
                }
                else
                {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock other)
            {
                if (other == nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock.getDefaultInstance())
                    return this;
                if (other.hasBbox())
                {
                    mergeBbox(other.getBbox());
                }
                if (!other.requiredFeatures_.isEmpty())
                {
                    if (this.requiredFeatures_.isEmpty())
                    {
                        this.requiredFeatures_ = other.requiredFeatures_;
                        this.bitField0_ |= 0x00000002;
                    }
                    else
                    {
                        ensureRequiredFeaturesIsMutable();
                        this.requiredFeatures_.addAll(other.requiredFeatures_);
                    }
                    onChanged();
                }
                if (!other.optionalFeatures_.isEmpty())
                {
                    if (this.optionalFeatures_.isEmpty())
                    {
                        this.optionalFeatures_ = other.optionalFeatures_;
                        this.bitField0_ |= 0x00000004;
                    }
                    else
                    {
                        ensureOptionalFeaturesIsMutable();
                        this.optionalFeatures_.addAll(other.optionalFeatures_);
                    }
                    onChanged();
                }
                if (other.hasWritingprogram())
                {
                    this.writingprogram_ = other.writingprogram_;
                    this.bitField0_ |= 0x00000008;
                    onChanged();
                }
                if (other.hasSource())
                {
                    this.source_ = other.source_;
                    this.bitField0_ |= 0x00000010;
                    onChanged();
                }
                if (other.hasOsmosisReplicationTimestamp())
                {
                    setOsmosisReplicationTimestamp(other.getOsmosisReplicationTimestamp());
                }
                if (other.hasOsmosisReplicationSequenceNumber())
                {
                    setOsmosisReplicationSequenceNumber(other.getOsmosisReplicationSequenceNumber());
                }
                if (other.hasOsmosisReplicationBaseUrl())
                {
                    this.osmosisReplicationBaseUrl_ = other.osmosisReplicationBaseUrl_;
                    this.bitField0_ |= 0x00000080;
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                onChanged();
                return this;
            }

            @java.lang.Override
            public final boolean isInitialized()
            {
                if (hasBbox())
                {
                    if (!getBbox().isInitialized())
                    {
                        return false;
                    }
                }
                return true;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
            {
                if (extensionRegistry == null)
                {
                    throw new java.lang.NullPointerException();
                }
                try
                {
                    boolean done = false;
                    while (!done)
                    {
                        int tag = input.readTag();
                        switch (tag)
                        {
                            case 0:
                                done = true;
                                break;
                            case 10:
                            {
                                input.readMessage(internalGetBboxFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x00000001;
                                break;
                            } // case 10
                            case 34:
                            {
                                com.google.protobuf.ByteString bs = input.readBytes();
                                ensureRequiredFeaturesIsMutable();
                                this.requiredFeatures_.add(bs);
                                break;
                            } // case 34
                            case 42:
                            {
                                com.google.protobuf.ByteString bs = input.readBytes();
                                ensureOptionalFeaturesIsMutable();
                                this.optionalFeatures_.add(bs);
                                break;
                            } // case 42
                            case 130:
                            {
                                this.writingprogram_ = input.readBytes();
                                this.bitField0_ |= 0x00000008;
                                break;
                            } // case 130
                            case 138:
                            {
                                this.source_ = input.readBytes();
                                this.bitField0_ |= 0x00000010;
                                break;
                            } // case 138
                            case 256:
                            {
                                this.osmosisReplicationTimestamp_ = input.readInt64();
                                this.bitField0_ |= 0x00000020;
                                break;
                            } // case 256
                            case 264:
                            {
                                this.osmosisReplicationSequenceNumber_ = input.readInt64();
                                this.bitField0_ |= 0x00000040;
                                break;
                            } // case 264
                            case 274:
                            {
                                this.osmosisReplicationBaseUrl_ = input.readBytes();
                                this.bitField0_ |= 0x00000080;
                                break;
                            } // case 274
                            default:
                            {
                                if (!super.parseUnknownField(input, extensionRegistry, tag))
                                {
                                    done = true; // was an endgroup tag
                                }
                                break;
                            } // default:
                        } // switch (tag)
                    } // while (!done)
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.unwrapIOException();
                }
                finally
                {
                    onChanged();
                } // finally
                return this;
            }

            private int bitField0_;

            private nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox bbox_;

            private com.google.protobuf.SingleFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBoxOrBuilder> bboxBuilder_;

            /**
             * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
             * @return Whether the bbox field is set.
             */
            @Override
            public boolean hasBbox()
            {
                return ((this.bitField0_ & 0x00000001) != 0);
            }

            /**
             * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
             * @return The bbox.
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox getBbox()
            {
                if (this.bboxBuilder_ == null)
                {
                    return this.bbox_ == null
                            ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.getDefaultInstance()
                            : this.bbox_;
                }
                else
                {
                    return this.bboxBuilder_.getMessage();
                }
            }

            /**
             * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
             */
            public Builder setBbox(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox value)
            {
                if (this.bboxBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    this.bbox_ = value;
                }
                else
                {
                    this.bboxBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
             */
            public Builder setBbox(
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.Builder builderForValue)
            {
                if (this.bboxBuilder_ == null)
                {
                    this.bbox_ = builderForValue.build();
                }
                else
                {
                    this.bboxBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
             */
            public Builder mergeBbox(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox value)
            {
                if (this.bboxBuilder_ == null)
                {
                    if (((this.bitField0_ & 0x00000001) != 0) && this.bbox_ != null
                            && this.bbox_ != nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox
                                    .getDefaultInstance())
                    {
                        getBboxBuilder().mergeFrom(value);
                    }
                    else
                    {
                        this.bbox_ = value;
                    }
                }
                else
                {
                    this.bboxBuilder_.mergeFrom(value);
                }
                if (this.bbox_ != null)
                {
                    this.bitField0_ |= 0x00000001;
                    onChanged();
                }
                return this;
            }

            /**
             * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
             */
            public Builder clearBbox()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000001);
                this.bbox_ = null;
                if (this.bboxBuilder_ != null)
                {
                    this.bboxBuilder_.dispose();
                    this.bboxBuilder_ = null;
                }
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.Builder getBboxBuilder()
            {
                this.bitField0_ |= 0x00000001;
                onChanged();
                return internalGetBboxFieldBuilder().getBuilder();
            }

            /**
             * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBoxOrBuilder getBboxOrBuilder()
            {
                if (this.bboxBuilder_ != null)
                {
                    return this.bboxBuilder_.getMessageOrBuilder();
                }
                else
                {
                    return this.bbox_ == null
                            ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.getDefaultInstance()
                            : this.bbox_;
                }
            }

            /**
             * <code>optional .OSMPBF.HeaderBBox bbox = 1;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBoxOrBuilder> internalGetBboxFieldBuilder()
            {
                if (this.bboxBuilder_ == null)
                {
                    this.bboxBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.Builder,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBoxOrBuilder>(getBbox(),
                                    getParentForChildren(), isClean());
                    this.bbox_ = null;
                }
                return this.bboxBuilder_;
            }

            private com.google.protobuf.LazyStringArrayList requiredFeatures_ =
                    com.google.protobuf.LazyStringArrayList.emptyList();

            private void ensureRequiredFeaturesIsMutable()
            {
                if (!this.requiredFeatures_.isModifiable())
                {
                    this.requiredFeatures_ = new com.google.protobuf.LazyStringArrayList(this.requiredFeatures_);
                }
                this.bitField0_ |= 0x00000002;
            }

            /**
             * <pre>
             * Additional tags to aid in parsing this dataset
             * </pre>
             *
             * <code>repeated string required_features = 4;</code>
             * @return A list containing the requiredFeatures.
             */
            @Override
            public com.google.protobuf.ProtocolStringList getRequiredFeaturesList()
            {
                this.requiredFeatures_.makeImmutable();
                return this.requiredFeatures_;
            }

            /**
             * <pre>
             * Additional tags to aid in parsing this dataset
             * </pre>
             *
             * <code>repeated string required_features = 4;</code>
             * @return The count of requiredFeatures.
             */
            @Override
            public int getRequiredFeaturesCount()
            {
                return this.requiredFeatures_.size();
            }

            /**
             * <pre>
             * Additional tags to aid in parsing this dataset
             * </pre>
             *
             * <code>repeated string required_features = 4;</code>
             * @param index The index of the element to return.
             * @return The requiredFeatures at the given index.
             */
            @Override
            public java.lang.String getRequiredFeatures(final int index)
            {
                return this.requiredFeatures_.get(index);
            }

            /**
             * <pre>
             * Additional tags to aid in parsing this dataset
             * </pre>
             *
             * <code>repeated string required_features = 4;</code>
             * @param index The index of the value to return.
             * @return The bytes of the requiredFeatures at the given index.
             */
            @Override
            public com.google.protobuf.ByteString getRequiredFeaturesBytes(final int index)
            {
                return this.requiredFeatures_.getByteString(index);
            }

            /**
             * <pre>
             * Additional tags to aid in parsing this dataset
             * </pre>
             *
             * <code>repeated string required_features = 4;</code>
             * @param index The index to set the value at.
             * @param value The requiredFeatures to set.
             * @return This builder for chaining.
             */
            public Builder setRequiredFeatures(final int index, final java.lang.String value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                ensureRequiredFeaturesIsMutable();
                this.requiredFeatures_.set(index, value);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Additional tags to aid in parsing this dataset
             * </pre>
             *
             * <code>repeated string required_features = 4;</code>
             * @param value The requiredFeatures to add.
             * @return This builder for chaining.
             */
            public Builder addRequiredFeatures(final java.lang.String value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                ensureRequiredFeaturesIsMutable();
                this.requiredFeatures_.add(value);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Additional tags to aid in parsing this dataset
             * </pre>
             *
             * <code>repeated string required_features = 4;</code>
             * @param values The requiredFeatures to add.
             * @return This builder for chaining.
             */
            public Builder addAllRequiredFeatures(final java.lang.Iterable<java.lang.String> values)
            {
                ensureRequiredFeaturesIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.requiredFeatures_);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Additional tags to aid in parsing this dataset
             * </pre>
             *
             * <code>repeated string required_features = 4;</code>
             * @return This builder for chaining.
             */
            public Builder clearRequiredFeatures()
            {
                this.requiredFeatures_ = com.google.protobuf.LazyStringArrayList.emptyList();
                this.bitField0_ = (this.bitField0_ & ~0x00000002);
                ;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Additional tags to aid in parsing this dataset
             * </pre>
             *
             * <code>repeated string required_features = 4;</code>
             * @param value The bytes of the requiredFeatures to add.
             * @return This builder for chaining.
             */
            public Builder addRequiredFeaturesBytes(final com.google.protobuf.ByteString value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                ensureRequiredFeaturesIsMutable();
                this.requiredFeatures_.add(value);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            private com.google.protobuf.LazyStringArrayList optionalFeatures_ =
                    com.google.protobuf.LazyStringArrayList.emptyList();

            private void ensureOptionalFeaturesIsMutable()
            {
                if (!this.optionalFeatures_.isModifiable())
                {
                    this.optionalFeatures_ = new com.google.protobuf.LazyStringArrayList(this.optionalFeatures_);
                }
                this.bitField0_ |= 0x00000004;
            }

            /**
             * <code>repeated string optional_features = 5;</code>
             * @return A list containing the optionalFeatures.
             */
            @Override
            public com.google.protobuf.ProtocolStringList getOptionalFeaturesList()
            {
                this.optionalFeatures_.makeImmutable();
                return this.optionalFeatures_;
            }

            /**
             * <code>repeated string optional_features = 5;</code>
             * @return The count of optionalFeatures.
             */
            @Override
            public int getOptionalFeaturesCount()
            {
                return this.optionalFeatures_.size();
            }

            /**
             * <code>repeated string optional_features = 5;</code>
             * @param index The index of the element to return.
             * @return The optionalFeatures at the given index.
             */
            @Override
            public java.lang.String getOptionalFeatures(final int index)
            {
                return this.optionalFeatures_.get(index);
            }

            /**
             * <code>repeated string optional_features = 5;</code>
             * @param index The index of the value to return.
             * @return The bytes of the optionalFeatures at the given index.
             */
            @Override
            public com.google.protobuf.ByteString getOptionalFeaturesBytes(final int index)
            {
                return this.optionalFeatures_.getByteString(index);
            }

            /**
             * <code>repeated string optional_features = 5;</code>
             * @param index The index to set the value at.
             * @param value The optionalFeatures to set.
             * @return This builder for chaining.
             */
            public Builder setOptionalFeatures(final int index, final java.lang.String value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                ensureOptionalFeaturesIsMutable();
                this.optionalFeatures_.set(index, value);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <code>repeated string optional_features = 5;</code>
             * @param value The optionalFeatures to add.
             * @return This builder for chaining.
             */
            public Builder addOptionalFeatures(final java.lang.String value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                ensureOptionalFeaturesIsMutable();
                this.optionalFeatures_.add(value);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <code>repeated string optional_features = 5;</code>
             * @param values The optionalFeatures to add.
             * @return This builder for chaining.
             */
            public Builder addAllOptionalFeatures(final java.lang.Iterable<java.lang.String> values)
            {
                ensureOptionalFeaturesIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.optionalFeatures_);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <code>repeated string optional_features = 5;</code>
             * @return This builder for chaining.
             */
            public Builder clearOptionalFeatures()
            {
                this.optionalFeatures_ = com.google.protobuf.LazyStringArrayList.emptyList();
                this.bitField0_ = (this.bitField0_ & ~0x00000004);
                ;
                onChanged();
                return this;
            }

            /**
             * <code>repeated string optional_features = 5;</code>
             * @param value The bytes of the optionalFeatures to add.
             * @return This builder for chaining.
             */
            public Builder addOptionalFeaturesBytes(final com.google.protobuf.ByteString value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                ensureOptionalFeaturesIsMutable();
                this.optionalFeatures_.add(value);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            private java.lang.Object writingprogram_ = "";

            /**
             * <code>optional string writingprogram = 16;</code>
             * @return Whether the writingprogram field is set.
             */
            @Override
            public boolean hasWritingprogram()
            {
                return ((this.bitField0_ & 0x00000008) != 0);
            }

            /**
             * <code>optional string writingprogram = 16;</code>
             * @return The writingprogram.
             */
            @Override
            public java.lang.String getWritingprogram()
            {
                java.lang.Object ref = this.writingprogram_;
                if (!(ref instanceof java.lang.String))
                {
                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8())
                    {
                        this.writingprogram_ = s;
                    }
                    return s;
                }
                else
                {
                    return (java.lang.String) ref;
                }
            }

            /**
             * <code>optional string writingprogram = 16;</code>
             * @return The bytes for writingprogram.
             */
            @Override
            public com.google.protobuf.ByteString getWritingprogramBytes()
            {
                java.lang.Object ref = this.writingprogram_;
                if (ref instanceof String)
                {
                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
                    this.writingprogram_ = b;
                    return b;
                }
                else
                {
                    return (com.google.protobuf.ByteString) ref;
                }
            }

            /**
             * <code>optional string writingprogram = 16;</code>
             * @param value The writingprogram to set.
             * @return This builder for chaining.
             */
            public Builder setWritingprogram(final java.lang.String value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                this.writingprogram_ = value;
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <code>optional string writingprogram = 16;</code>
             * @return This builder for chaining.
             */
            public Builder clearWritingprogram()
            {
                this.writingprogram_ = getDefaultInstance().getWritingprogram();
                this.bitField0_ = (this.bitField0_ & ~0x00000008);
                onChanged();
                return this;
            }

            /**
             * <code>optional string writingprogram = 16;</code>
             * @param value The bytes for writingprogram to set.
             * @return This builder for chaining.
             */
            public Builder setWritingprogramBytes(final com.google.protobuf.ByteString value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                this.writingprogram_ = value;
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            private java.lang.Object source_ = "";

            /**
             * <pre>
             * From the bbox field.
             * </pre>
             *
             * <code>optional string source = 17;</code>
             * @return Whether the source field is set.
             */
            @Override
            public boolean hasSource()
            {
                return ((this.bitField0_ & 0x00000010) != 0);
            }

            /**
             * <pre>
             * From the bbox field.
             * </pre>
             *
             * <code>optional string source = 17;</code>
             * @return The source.
             */
            @Override
            public java.lang.String getSource()
            {
                java.lang.Object ref = this.source_;
                if (!(ref instanceof java.lang.String))
                {
                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8())
                    {
                        this.source_ = s;
                    }
                    return s;
                }
                else
                {
                    return (java.lang.String) ref;
                }
            }

            /**
             * <pre>
             * From the bbox field.
             * </pre>
             *
             * <code>optional string source = 17;</code>
             * @return The bytes for source.
             */
            @Override
            public com.google.protobuf.ByteString getSourceBytes()
            {
                java.lang.Object ref = this.source_;
                if (ref instanceof String)
                {
                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
                    this.source_ = b;
                    return b;
                }
                else
                {
                    return (com.google.protobuf.ByteString) ref;
                }
            }

            /**
             * <pre>
             * From the bbox field.
             * </pre>
             *
             * <code>optional string source = 17;</code>
             * @param value The source to set.
             * @return This builder for chaining.
             */
            public Builder setSource(final java.lang.String value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                this.source_ = value;
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * From the bbox field.
             * </pre>
             *
             * <code>optional string source = 17;</code>
             * @return This builder for chaining.
             */
            public Builder clearSource()
            {
                this.source_ = getDefaultInstance().getSource();
                this.bitField0_ = (this.bitField0_ & ~0x00000010);
                onChanged();
                return this;
            }

            /**
             * <pre>
             * From the bbox field.
             * </pre>
             *
             * <code>optional string source = 17;</code>
             * @param value The bytes for source to set.
             * @return This builder for chaining.
             */
            public Builder setSourceBytes(final com.google.protobuf.ByteString value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                this.source_ = value;
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            private long osmosisReplicationTimestamp_;

            /**
             * <pre>
             * Replication timestamp, expressed in seconds since the epoch,
             * otherwise the same value as in the "timestamp=..." field
             * in the state.txt file used by Osmosis.
             * </pre>
             *
             * <code>optional int64 osmosis_replication_timestamp = 32;</code>
             * @return Whether the osmosisReplicationTimestamp field is set.
             */
            @java.lang.Override
            public boolean hasOsmosisReplicationTimestamp()
            {
                return ((this.bitField0_ & 0x00000020) != 0);
            }

            /**
             * <pre>
             * Replication timestamp, expressed in seconds since the epoch,
             * otherwise the same value as in the "timestamp=..." field
             * in the state.txt file used by Osmosis.
             * </pre>
             *
             * <code>optional int64 osmosis_replication_timestamp = 32;</code>
             * @return The osmosisReplicationTimestamp.
             */
            @java.lang.Override
            public long getOsmosisReplicationTimestamp()
            {
                return this.osmosisReplicationTimestamp_;
            }

            /**
             * <pre>
             * Replication timestamp, expressed in seconds since the epoch,
             * otherwise the same value as in the "timestamp=..." field
             * in the state.txt file used by Osmosis.
             * </pre>
             *
             * <code>optional int64 osmosis_replication_timestamp = 32;</code>
             * @param value The osmosisReplicationTimestamp to set.
             * @return This builder for chaining.
             */
            public Builder setOsmosisReplicationTimestamp(final long value)
            {

                this.osmosisReplicationTimestamp_ = value;
                this.bitField0_ |= 0x00000020;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Replication timestamp, expressed in seconds since the epoch,
             * otherwise the same value as in the "timestamp=..." field
             * in the state.txt file used by Osmosis.
             * </pre>
             *
             * <code>optional int64 osmosis_replication_timestamp = 32;</code>
             * @return This builder for chaining.
             */
            public Builder clearOsmosisReplicationTimestamp()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000020);
                this.osmosisReplicationTimestamp_ = 0L;
                onChanged();
                return this;
            }

            private long osmosisReplicationSequenceNumber_;

            /**
             * <pre>
             * Replication sequence number (sequenceNumber in state.txt).
             * </pre>
             *
             * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
             * @return Whether the osmosisReplicationSequenceNumber field is set.
             */
            @java.lang.Override
            public boolean hasOsmosisReplicationSequenceNumber()
            {
                return ((this.bitField0_ & 0x00000040) != 0);
            }

            /**
             * <pre>
             * Replication sequence number (sequenceNumber in state.txt).
             * </pre>
             *
             * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
             * @return The osmosisReplicationSequenceNumber.
             */
            @java.lang.Override
            public long getOsmosisReplicationSequenceNumber()
            {
                return this.osmosisReplicationSequenceNumber_;
            }

            /**
             * <pre>
             * Replication sequence number (sequenceNumber in state.txt).
             * </pre>
             *
             * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
             * @param value The osmosisReplicationSequenceNumber to set.
             * @return This builder for chaining.
             */
            public Builder setOsmosisReplicationSequenceNumber(final long value)
            {

                this.osmosisReplicationSequenceNumber_ = value;
                this.bitField0_ |= 0x00000040;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Replication sequence number (sequenceNumber in state.txt).
             * </pre>
             *
             * <code>optional int64 osmosis_replication_sequence_number = 33;</code>
             * @return This builder for chaining.
             */
            public Builder clearOsmosisReplicationSequenceNumber()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000040);
                this.osmosisReplicationSequenceNumber_ = 0L;
                onChanged();
                return this;
            }

            private java.lang.Object osmosisReplicationBaseUrl_ = "";

            /**
             * <pre>
             * Replication base URL (from Osmosis' configuration.txt file).
             * </pre>
             *
             * <code>optional string osmosis_replication_base_url = 34;</code>
             * @return Whether the osmosisReplicationBaseUrl field is set.
             */
            @Override
            public boolean hasOsmosisReplicationBaseUrl()
            {
                return ((this.bitField0_ & 0x00000080) != 0);
            }

            /**
             * <pre>
             * Replication base URL (from Osmosis' configuration.txt file).
             * </pre>
             *
             * <code>optional string osmosis_replication_base_url = 34;</code>
             * @return The osmosisReplicationBaseUrl.
             */
            @Override
            public java.lang.String getOsmosisReplicationBaseUrl()
            {
                java.lang.Object ref = this.osmosisReplicationBaseUrl_;
                if (!(ref instanceof java.lang.String))
                {
                    com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref;
                    java.lang.String s = bs.toStringUtf8();
                    if (bs.isValidUtf8())
                    {
                        this.osmosisReplicationBaseUrl_ = s;
                    }
                    return s;
                }
                else
                {
                    return (java.lang.String) ref;
                }
            }

            /**
             * <pre>
             * Replication base URL (from Osmosis' configuration.txt file).
             * </pre>
             *
             * <code>optional string osmosis_replication_base_url = 34;</code>
             * @return The bytes for osmosisReplicationBaseUrl.
             */
            @Override
            public com.google.protobuf.ByteString getOsmosisReplicationBaseUrlBytes()
            {
                java.lang.Object ref = this.osmosisReplicationBaseUrl_;
                if (ref instanceof String)
                {
                    com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref);
                    this.osmosisReplicationBaseUrl_ = b;
                    return b;
                }
                else
                {
                    return (com.google.protobuf.ByteString) ref;
                }
            }

            /**
             * <pre>
             * Replication base URL (from Osmosis' configuration.txt file).
             * </pre>
             *
             * <code>optional string osmosis_replication_base_url = 34;</code>
             * @param value The osmosisReplicationBaseUrl to set.
             * @return This builder for chaining.
             */
            public Builder setOsmosisReplicationBaseUrl(final java.lang.String value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                this.osmosisReplicationBaseUrl_ = value;
                this.bitField0_ |= 0x00000080;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Replication base URL (from Osmosis' configuration.txt file).
             * </pre>
             *
             * <code>optional string osmosis_replication_base_url = 34;</code>
             * @return This builder for chaining.
             */
            public Builder clearOsmosisReplicationBaseUrl()
            {
                this.osmosisReplicationBaseUrl_ = getDefaultInstance().getOsmosisReplicationBaseUrl();
                this.bitField0_ = (this.bitField0_ & ~0x00000080);
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Replication base URL (from Osmosis' configuration.txt file).
             * </pre>
             *
             * <code>optional string osmosis_replication_base_url = 34;</code>
             * @param value The bytes for osmosisReplicationBaseUrl to set.
             * @return This builder for chaining.
             */
            public Builder setOsmosisReplicationBaseUrlBytes(final com.google.protobuf.ByteString value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                this.osmosisReplicationBaseUrl_ = value;
                this.bitField0_ |= 0x00000080;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:OSMPBF.HeaderBlock)
        }

        // @@protoc_insertion_point(class_scope:OSMPBF.HeaderBlock)
        private static final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock DEFAULT_INSTANCE;
        static
        {
            DEFAULT_INSTANCE = new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock();
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock getDefaultInstance()
        {
            return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<HeaderBlock> PARSER =
                new com.google.protobuf.AbstractParser<HeaderBlock>()
                {
                    @java.lang.Override
                    public HeaderBlock parsePartialFrom(final com.google.protobuf.CodedInputStream input,
                            final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException
                    {
                        Builder builder = newBuilder();
                        try
                        {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (com.google.protobuf.InvalidProtocolBufferException e)
                        {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (com.google.protobuf.UninitializedMessageException e)
                        {
                            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (java.io.IOException e)
                        {
                            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                                    .setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };

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

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

        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBlock getDefaultInstanceForType()
        {
            return DEFAULT_INSTANCE;
        }

    }

    public interface HeaderBBoxOrBuilder extends
            // @@protoc_insertion_point(interface_extends:OSMPBF.HeaderBBox)
            com.google.protobuf.MessageOrBuilder
    {

        /**
         * <code>required sint64 left = 1;</code>
         * @return Whether the left field is set.
         */
        boolean hasLeft();

        /**
         * <code>required sint64 left = 1;</code>
         * @return The left.
         */
        long getLeft();

        /**
         * <code>required sint64 right = 2;</code>
         * @return Whether the right field is set.
         */
        boolean hasRight();

        /**
         * <code>required sint64 right = 2;</code>
         * @return The right.
         */
        long getRight();

        /**
         * <code>required sint64 top = 3;</code>
         * @return Whether the top field is set.
         */
        boolean hasTop();

        /**
         * <code>required sint64 top = 3;</code>
         * @return The top.
         */
        long getTop();

        /**
         * <code>required sint64 bottom = 4;</code>
         * @return Whether the bottom field is set.
         */
        boolean hasBottom();

        /**
         * <code>required sint64 bottom = 4;</code>
         * @return The bottom.
         */
        long getBottom();
    }

    /**
     * Protobuf type {@code OSMPBF.HeaderBBox}
     */
    public static final class HeaderBBox extends com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:OSMPBF.HeaderBBox)
            HeaderBBoxOrBuilder
    {
        private static final long serialVersionUID = 0L;
        static
        {
            com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                    com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 31, /* patch= */ 1,
                    /* suffix= */ "", HeaderBBox.class.getName());
        }

        // Use HeaderBBox.newBuilder() to construct.
        private HeaderBBox(final com.google.protobuf.GeneratedMessage.Builder<?> builder)
        {
            super(builder);
        }

        private HeaderBBox()
        {
        }

        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_HeaderBBox_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_HeaderBBox_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.class,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.Builder.class);
        }

        private int bitField0_;

        public static final int LEFT_FIELD_NUMBER = 1;

        private long left_ = 0L;

        /**
         * <code>required sint64 left = 1;</code>
         * @return Whether the left field is set.
         */
        @java.lang.Override
        public boolean hasLeft()
        {
            return ((this.bitField0_ & 0x00000001) != 0);
        }

        /**
         * <code>required sint64 left = 1;</code>
         * @return The left.
         */
        @java.lang.Override
        public long getLeft()
        {
            return this.left_;
        }

        public static final int RIGHT_FIELD_NUMBER = 2;

        private long right_ = 0L;

        /**
         * <code>required sint64 right = 2;</code>
         * @return Whether the right field is set.
         */
        @java.lang.Override
        public boolean hasRight()
        {
            return ((this.bitField0_ & 0x00000002) != 0);
        }

        /**
         * <code>required sint64 right = 2;</code>
         * @return The right.
         */
        @java.lang.Override
        public long getRight()
        {
            return this.right_;
        }

        public static final int TOP_FIELD_NUMBER = 3;

        private long top_ = 0L;

        /**
         * <code>required sint64 top = 3;</code>
         * @return Whether the top field is set.
         */
        @java.lang.Override
        public boolean hasTop()
        {
            return ((this.bitField0_ & 0x00000004) != 0);
        }

        /**
         * <code>required sint64 top = 3;</code>
         * @return The top.
         */
        @java.lang.Override
        public long getTop()
        {
            return this.top_;
        }

        public static final int BOTTOM_FIELD_NUMBER = 4;

        private long bottom_ = 0L;

        /**
         * <code>required sint64 bottom = 4;</code>
         * @return Whether the bottom field is set.
         */
        @java.lang.Override
        public boolean hasBottom()
        {
            return ((this.bitField0_ & 0x00000008) != 0);
        }

        /**
         * <code>required sint64 bottom = 4;</code>
         * @return The bottom.
         */
        @java.lang.Override
        public long getBottom()
        {
            return this.bottom_;
        }

        private byte memoizedIsInitialized = -1;

        @java.lang.Override
        public final boolean isInitialized()
        {
            byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1)
                return true;
            if (isInitialized == 0)
                return false;

            if (!hasLeft())
            {
                this.memoizedIsInitialized = 0;
                return false;
            }
            if (!hasRight())
            {
                this.memoizedIsInitialized = 0;
                return false;
            }
            if (!hasTop())
            {
                this.memoizedIsInitialized = 0;
                return false;
            }
            if (!hasBottom())
            {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }

        @java.lang.Override
        public void writeTo(final com.google.protobuf.CodedOutputStream output) throws java.io.IOException
        {
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                output.writeSInt64(1, this.left_);
            }
            if (((this.bitField0_ & 0x00000002) != 0))
            {
                output.writeSInt64(2, this.right_);
            }
            if (((this.bitField0_ & 0x00000004) != 0))
            {
                output.writeSInt64(3, this.top_);
            }
            if (((this.bitField0_ & 0x00000008) != 0))
            {
                output.writeSInt64(4, this.bottom_);
            }
            getUnknownFields().writeTo(output);
        }

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

            size = 0;
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeSInt64Size(1, this.left_);
            }
            if (((this.bitField0_ & 0x00000002) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeSInt64Size(2, this.right_);
            }
            if (((this.bitField0_ & 0x00000004) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeSInt64Size(3, this.top_);
            }
            if (((this.bitField0_ & 0x00000008) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeSInt64Size(4, this.bottom_);
            }
            size += getUnknownFields().getSerializedSize();
            this.memoizedSize = size;
            return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj)
        {
            if (obj == this)
            {
                return true;
            }
            if (!(obj instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox))
            {
                return super.equals(obj);
            }
            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox other =
                    (nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox) obj;

            if (hasLeft() != other.hasLeft())
                return false;
            if (hasLeft())
            {
                if (getLeft() != other.getLeft())
                    return false;
            }
            if (hasRight() != other.hasRight())
                return false;
            if (hasRight())
            {
                if (getRight() != other.getRight())
                    return false;
            }
            if (hasTop() != other.hasTop())
                return false;
            if (hasTop())
            {
                if (getTop() != other.getTop())
                    return false;
            }
            if (hasBottom() != other.hasBottom())
                return false;
            if (hasBottom())
            {
                if (getBottom() != other.getBottom())
                    return false;
            }
            if (!getUnknownFields().equals(other.getUnknownFields()))
                return false;
            return true;
        }

        @java.lang.Override
        public int hashCode()
        {
            if (this.memoizedHashCode != 0)
            {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = (19 * hash) + getDescriptor().hashCode();
            if (hasLeft())
            {
                hash = (37 * hash) + LEFT_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getLeft());
            }
            if (hasRight())
            {
                hash = (37 * hash) + RIGHT_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getRight());
            }
            if (hasTop())
            {
                hash = (37 * hash) + TOP_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getTop());
            }
            if (hasBottom())
            {
                hash = (37 * hash) + BOTTOM_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getBottom());
            }
            hash = (29 * hash) + getUnknownFields().hashCode();
            this.memoizedHashCode = hash;
            return hash;
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox parseFrom(
                final java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox parseFrom(
                final java.nio.ByteBuffer data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox parseFrom(
                final com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox parseFrom(
                final com.google.protobuf.ByteString data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox parseFrom(final byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox parseFrom(final byte[] data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox parseFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox parseFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox parseDelimitedFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox parseDelimitedFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox parseFrom(
                final com.google.protobuf.CodedInputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox parseFrom(
                final com.google.protobuf.CodedInputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        @java.lang.Override
        public Builder newBuilderForType()
        {
            return newBuilder();
        }

        public static Builder newBuilder()
        {
            return DEFAULT_INSTANCE.toBuilder();
        }

        public static Builder newBuilder(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox prototype)
        {
            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }

        @java.lang.Override
        public Builder toBuilder()
        {
            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
        }

        @java.lang.Override
        protected Builder newBuilderForType(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
        {
            Builder builder = new Builder(parent);
            return builder;
        }

        /**
         * Protobuf type {@code OSMPBF.HeaderBBox}
         */
        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:OSMPBF.HeaderBBox)
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBoxOrBuilder
        {
            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_HeaderBBox_descriptor;
            }

            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_HeaderBBox_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.class,
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.Builder.class);
            }

            // Construct using nl.tudelft.simulation.dsol.animation.gis.osm.pbf.Osmformat.HeaderBBox.newBuilder()
            private Builder()
            {

            }

            private Builder(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
            {
                super(parent);

            }

            @java.lang.Override
            public Builder clear()
            {
                super.clear();
                this.bitField0_ = 0;
                this.left_ = 0L;
                this.right_ = 0L;
                this.top_ = 0L;
                this.bottom_ = 0L;
                return this;
            }

            @java.lang.Override
            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_HeaderBBox_descriptor;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox getDefaultInstanceForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.getDefaultInstance();
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox build()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox result = buildPartial();
                if (!result.isInitialized())
                {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox buildPartial()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox result =
                        new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox(this);
                if (this.bitField0_ != 0)
                {
                    buildPartial0(result);
                }
                onBuilt();
                return result;
            }

            private void buildPartial0(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox result)
            {
                int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) != 0))
                {
                    result.left_ = this.left_;
                    to_bitField0_ |= 0x00000001;
                }
                if (((from_bitField0_ & 0x00000002) != 0))
                {
                    result.right_ = this.right_;
                    to_bitField0_ |= 0x00000002;
                }
                if (((from_bitField0_ & 0x00000004) != 0))
                {
                    result.top_ = this.top_;
                    to_bitField0_ |= 0x00000004;
                }
                if (((from_bitField0_ & 0x00000008) != 0))
                {
                    result.bottom_ = this.bottom_;
                    to_bitField0_ |= 0x00000008;
                }
                result.bitField0_ |= to_bitField0_;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.Message other)
            {
                if (other instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox)
                {
                    return mergeFrom((nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox) other);
                }
                else
                {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox other)
            {
                if (other == nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox.getDefaultInstance())
                    return this;
                if (other.hasLeft())
                {
                    setLeft(other.getLeft());
                }
                if (other.hasRight())
                {
                    setRight(other.getRight());
                }
                if (other.hasTop())
                {
                    setTop(other.getTop());
                }
                if (other.hasBottom())
                {
                    setBottom(other.getBottom());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                onChanged();
                return this;
            }

            @java.lang.Override
            public final boolean isInitialized()
            {
                if (!hasLeft())
                {
                    return false;
                }
                if (!hasRight())
                {
                    return false;
                }
                if (!hasTop())
                {
                    return false;
                }
                if (!hasBottom())
                {
                    return false;
                }
                return true;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
            {
                if (extensionRegistry == null)
                {
                    throw new java.lang.NullPointerException();
                }
                try
                {
                    boolean done = false;
                    while (!done)
                    {
                        int tag = input.readTag();
                        switch (tag)
                        {
                            case 0:
                                done = true;
                                break;
                            case 8:
                            {
                                this.left_ = input.readSInt64();
                                this.bitField0_ |= 0x00000001;
                                break;
                            } // case 8
                            case 16:
                            {
                                this.right_ = input.readSInt64();
                                this.bitField0_ |= 0x00000002;
                                break;
                            } // case 16
                            case 24:
                            {
                                this.top_ = input.readSInt64();
                                this.bitField0_ |= 0x00000004;
                                break;
                            } // case 24
                            case 32:
                            {
                                this.bottom_ = input.readSInt64();
                                this.bitField0_ |= 0x00000008;
                                break;
                            } // case 32
                            default:
                            {
                                if (!super.parseUnknownField(input, extensionRegistry, tag))
                                {
                                    done = true; // was an endgroup tag
                                }
                                break;
                            } // default:
                        } // switch (tag)
                    } // while (!done)
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.unwrapIOException();
                }
                finally
                {
                    onChanged();
                } // finally
                return this;
            }

            private int bitField0_;

            private long left_;

            /**
             * <code>required sint64 left = 1;</code>
             * @return Whether the left field is set.
             */
            @java.lang.Override
            public boolean hasLeft()
            {
                return ((this.bitField0_ & 0x00000001) != 0);
            }

            /**
             * <code>required sint64 left = 1;</code>
             * @return The left.
             */
            @java.lang.Override
            public long getLeft()
            {
                return this.left_;
            }

            /**
             * <code>required sint64 left = 1;</code>
             * @param value The left to set.
             * @return This builder for chaining.
             */
            public Builder setLeft(final long value)
            {

                this.left_ = value;
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>required sint64 left = 1;</code>
             * @return This builder for chaining.
             */
            public Builder clearLeft()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000001);
                this.left_ = 0L;
                onChanged();
                return this;
            }

            private long right_;

            /**
             * <code>required sint64 right = 2;</code>
             * @return Whether the right field is set.
             */
            @java.lang.Override
            public boolean hasRight()
            {
                return ((this.bitField0_ & 0x00000002) != 0);
            }

            /**
             * <code>required sint64 right = 2;</code>
             * @return The right.
             */
            @java.lang.Override
            public long getRight()
            {
                return this.right_;
            }

            /**
             * <code>required sint64 right = 2;</code>
             * @param value The right to set.
             * @return This builder for chaining.
             */
            public Builder setRight(final long value)
            {

                this.right_ = value;
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <code>required sint64 right = 2;</code>
             * @return This builder for chaining.
             */
            public Builder clearRight()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000002);
                this.right_ = 0L;
                onChanged();
                return this;
            }

            private long top_;

            /**
             * <code>required sint64 top = 3;</code>
             * @return Whether the top field is set.
             */
            @java.lang.Override
            public boolean hasTop()
            {
                return ((this.bitField0_ & 0x00000004) != 0);
            }

            /**
             * <code>required sint64 top = 3;</code>
             * @return The top.
             */
            @java.lang.Override
            public long getTop()
            {
                return this.top_;
            }

            /**
             * <code>required sint64 top = 3;</code>
             * @param value The top to set.
             * @return This builder for chaining.
             */
            public Builder setTop(final long value)
            {

                this.top_ = value;
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <code>required sint64 top = 3;</code>
             * @return This builder for chaining.
             */
            public Builder clearTop()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000004);
                this.top_ = 0L;
                onChanged();
                return this;
            }

            private long bottom_;

            /**
             * <code>required sint64 bottom = 4;</code>
             * @return Whether the bottom field is set.
             */
            @java.lang.Override
            public boolean hasBottom()
            {
                return ((this.bitField0_ & 0x00000008) != 0);
            }

            /**
             * <code>required sint64 bottom = 4;</code>
             * @return The bottom.
             */
            @java.lang.Override
            public long getBottom()
            {
                return this.bottom_;
            }

            /**
             * <code>required sint64 bottom = 4;</code>
             * @param value The bottom to set.
             * @return This builder for chaining.
             */
            public Builder setBottom(final long value)
            {

                this.bottom_ = value;
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <code>required sint64 bottom = 4;</code>
             * @return This builder for chaining.
             */
            public Builder clearBottom()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000008);
                this.bottom_ = 0L;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:OSMPBF.HeaderBBox)
        }

        // @@protoc_insertion_point(class_scope:OSMPBF.HeaderBBox)
        private static final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox DEFAULT_INSTANCE;
        static
        {
            DEFAULT_INSTANCE = new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox();
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox getDefaultInstance()
        {
            return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<HeaderBBox> PARSER =
                new com.google.protobuf.AbstractParser<HeaderBBox>()
                {
                    @java.lang.Override
                    public HeaderBBox parsePartialFrom(final com.google.protobuf.CodedInputStream input,
                            final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException
                    {
                        Builder builder = newBuilder();
                        try
                        {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (com.google.protobuf.InvalidProtocolBufferException e)
                        {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (com.google.protobuf.UninitializedMessageException e)
                        {
                            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (java.io.IOException e)
                        {
                            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                                    .setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };

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

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

        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.HeaderBBox getDefaultInstanceForType()
        {
            return DEFAULT_INSTANCE;
        }

    }

    public interface PrimitiveBlockOrBuilder extends
            // @@protoc_insertion_point(interface_extends:OSMPBF.PrimitiveBlock)
            com.google.protobuf.MessageOrBuilder
    {

        /**
         * <code>required .OSMPBF.StringTable stringtable = 1;</code>
         * @return Whether the stringtable field is set.
         */
        boolean hasStringtable();

        /**
         * <code>required .OSMPBF.StringTable stringtable = 1;</code>
         * @return The stringtable.
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable getStringtable();

        /**
         * <code>required .OSMPBF.StringTable stringtable = 1;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTableOrBuilder getStringtableOrBuilder();

        /**
         * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
         */
        java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup> getPrimitivegroupList();

        /**
         * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup getPrimitivegroup(int index);

        /**
         * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
         */
        int getPrimitivegroupCount();

        /**
         * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
         */
        java.util.List<
                ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroupOrBuilder> getPrimitivegroupOrBuilderList();

        /**
         * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroupOrBuilder getPrimitivegroupOrBuilder(int index);

        /**
         * <pre>
         * Granularity, units of nanodegrees, used to store coordinates in this block.
         * </pre>
         *
         * <code>optional int32 granularity = 17 [default = 100];</code>
         * @return Whether the granularity field is set.
         */
        boolean hasGranularity();

        /**
         * <pre>
         * Granularity, units of nanodegrees, used to store coordinates in this block.
         * </pre>
         *
         * <code>optional int32 granularity = 17 [default = 100];</code>
         * @return The granularity.
         */
        int getGranularity();

        /**
         * <pre>
         * Offset value between the output coordinates and the granularity grid in units of nanodegrees.
         * </pre>
         *
         * <code>optional int64 lat_offset = 19 [default = 0];</code>
         * @return Whether the latOffset field is set.
         */
        boolean hasLatOffset();

        /**
         * <pre>
         * Offset value between the output coordinates and the granularity grid in units of nanodegrees.
         * </pre>
         *
         * <code>optional int64 lat_offset = 19 [default = 0];</code>
         * @return The latOffset.
         */
        long getLatOffset();

        /**
         * <code>optional int64 lon_offset = 20 [default = 0];</code>
         * @return Whether the lonOffset field is set.
         */
        boolean hasLonOffset();

        /**
         * <code>optional int64 lon_offset = 20 [default = 0];</code>
         * @return The lonOffset.
         */
        long getLonOffset();

        /**
         * <pre>
         * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
         * </pre>
         *
         * <code>optional int32 date_granularity = 18 [default = 1000];</code>
         * @return Whether the dateGranularity field is set.
         */
        boolean hasDateGranularity();

        /**
         * <pre>
         * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
         * </pre>
         *
         * <code>optional int32 date_granularity = 18 [default = 1000];</code>
         * @return The dateGranularity.
         */
        int getDateGranularity();
    }

    /**
     * Protobuf type {@code OSMPBF.PrimitiveBlock}
     */
    public static final class PrimitiveBlock extends com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:OSMPBF.PrimitiveBlock)
            PrimitiveBlockOrBuilder
    {
        private static final long serialVersionUID = 0L;
        static
        {
            com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                    com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 31, /* patch= */ 1,
                    /* suffix= */ "", PrimitiveBlock.class.getName());
        }

        // Use PrimitiveBlock.newBuilder() to construct.
        private PrimitiveBlock(final com.google.protobuf.GeneratedMessage.Builder<?> builder)
        {
            super(builder);
        }

        private PrimitiveBlock()
        {
            this.primitivegroup_ = java.util.Collections.emptyList();
            this.granularity_ = 100;
            this.dateGranularity_ = 1000;
        }

        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_PrimitiveBlock_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_PrimitiveBlock_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock.class,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock.Builder.class);
        }

        private int bitField0_;

        public static final int STRINGTABLE_FIELD_NUMBER = 1;

        private nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable stringtable_;

        /**
         * <code>required .OSMPBF.StringTable stringtable = 1;</code>
         * @return Whether the stringtable field is set.
         */
        @java.lang.Override
        public boolean hasStringtable()
        {
            return ((this.bitField0_ & 0x00000001) != 0);
        }

        /**
         * <code>required .OSMPBF.StringTable stringtable = 1;</code>
         * @return The stringtable.
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable getStringtable()
        {
            return this.stringtable_ == null
                    ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.getDefaultInstance()
                    : this.stringtable_;
        }

        /**
         * <code>required .OSMPBF.StringTable stringtable = 1;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTableOrBuilder getStringtableOrBuilder()
        {
            return this.stringtable_ == null
                    ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.getDefaultInstance()
                    : this.stringtable_;
        }

        public static final int PRIMITIVEGROUP_FIELD_NUMBER = 2;

        @SuppressWarnings("serial")
        private java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup> primitivegroup_;

        /**
         * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
         */
        @java.lang.Override
        public java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup> getPrimitivegroupList()
        {
            return this.primitivegroup_;
        }

        /**
         * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
         */
        @java.lang.Override
        public java.util.List<
                ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroupOrBuilder> getPrimitivegroupOrBuilderList()
        {
            return this.primitivegroup_;
        }

        /**
         * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
         */
        @java.lang.Override
        public int getPrimitivegroupCount()
        {
            return this.primitivegroup_.size();
        }

        /**
         * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup getPrimitivegroup(final int index)
        {
            return this.primitivegroup_.get(index);
        }

        /**
         * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroupOrBuilder getPrimitivegroupOrBuilder(
                final int index)
        {
            return this.primitivegroup_.get(index);
        }

        public static final int GRANULARITY_FIELD_NUMBER = 17;

        private int granularity_ = 100;

        /**
         * <pre>
         * Granularity, units of nanodegrees, used to store coordinates in this block.
         * </pre>
         *
         * <code>optional int32 granularity = 17 [default = 100];</code>
         * @return Whether the granularity field is set.
         */
        @java.lang.Override
        public boolean hasGranularity()
        {
            return ((this.bitField0_ & 0x00000002) != 0);
        }

        /**
         * <pre>
         * Granularity, units of nanodegrees, used to store coordinates in this block.
         * </pre>
         *
         * <code>optional int32 granularity = 17 [default = 100];</code>
         * @return The granularity.
         */
        @java.lang.Override
        public int getGranularity()
        {
            return this.granularity_;
        }

        public static final int LAT_OFFSET_FIELD_NUMBER = 19;

        private long latOffset_ = 0L;

        /**
         * <pre>
         * Offset value between the output coordinates and the granularity grid in units of nanodegrees.
         * </pre>
         *
         * <code>optional int64 lat_offset = 19 [default = 0];</code>
         * @return Whether the latOffset field is set.
         */
        @java.lang.Override
        public boolean hasLatOffset()
        {
            return ((this.bitField0_ & 0x00000004) != 0);
        }

        /**
         * <pre>
         * Offset value between the output coordinates and the granularity grid in units of nanodegrees.
         * </pre>
         *
         * <code>optional int64 lat_offset = 19 [default = 0];</code>
         * @return The latOffset.
         */
        @java.lang.Override
        public long getLatOffset()
        {
            return this.latOffset_;
        }

        public static final int LON_OFFSET_FIELD_NUMBER = 20;

        private long lonOffset_ = 0L;

        /**
         * <code>optional int64 lon_offset = 20 [default = 0];</code>
         * @return Whether the lonOffset field is set.
         */
        @java.lang.Override
        public boolean hasLonOffset()
        {
            return ((this.bitField0_ & 0x00000008) != 0);
        }

        /**
         * <code>optional int64 lon_offset = 20 [default = 0];</code>
         * @return The lonOffset.
         */
        @java.lang.Override
        public long getLonOffset()
        {
            return this.lonOffset_;
        }

        public static final int DATE_GRANULARITY_FIELD_NUMBER = 18;

        private int dateGranularity_ = 1000;

        /**
         * <pre>
         * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
         * </pre>
         *
         * <code>optional int32 date_granularity = 18 [default = 1000];</code>
         * @return Whether the dateGranularity field is set.
         */
        @java.lang.Override
        public boolean hasDateGranularity()
        {
            return ((this.bitField0_ & 0x00000010) != 0);
        }

        /**
         * <pre>
         * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
         * </pre>
         *
         * <code>optional int32 date_granularity = 18 [default = 1000];</code>
         * @return The dateGranularity.
         */
        @java.lang.Override
        public int getDateGranularity()
        {
            return this.dateGranularity_;
        }

        private byte memoizedIsInitialized = -1;

        @java.lang.Override
        public final boolean isInitialized()
        {
            byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1)
                return true;
            if (isInitialized == 0)
                return false;

            if (!hasStringtable())
            {
                this.memoizedIsInitialized = 0;
                return false;
            }
            for (int i = 0; i < getPrimitivegroupCount(); i++)
            {
                if (!getPrimitivegroup(i).isInitialized())
                {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            this.memoizedIsInitialized = 1;
            return true;
        }

        @java.lang.Override
        public void writeTo(final com.google.protobuf.CodedOutputStream output) throws java.io.IOException
        {
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                output.writeMessage(1, getStringtable());
            }
            for (int i = 0; i < this.primitivegroup_.size(); i++)
            {
                output.writeMessage(2, this.primitivegroup_.get(i));
            }
            if (((this.bitField0_ & 0x00000002) != 0))
            {
                output.writeInt32(17, this.granularity_);
            }
            if (((this.bitField0_ & 0x00000010) != 0))
            {
                output.writeInt32(18, this.dateGranularity_);
            }
            if (((this.bitField0_ & 0x00000004) != 0))
            {
                output.writeInt64(19, this.latOffset_);
            }
            if (((this.bitField0_ & 0x00000008) != 0))
            {
                output.writeInt64(20, this.lonOffset_);
            }
            getUnknownFields().writeTo(output);
        }

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

            size = 0;
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getStringtable());
            }
            for (int i = 0; i < this.primitivegroup_.size(); i++)
            {
                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, this.primitivegroup_.get(i));
            }
            if (((this.bitField0_ & 0x00000002) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeInt32Size(17, this.granularity_);
            }
            if (((this.bitField0_ & 0x00000010) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeInt32Size(18, this.dateGranularity_);
            }
            if (((this.bitField0_ & 0x00000004) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeInt64Size(19, this.latOffset_);
            }
            if (((this.bitField0_ & 0x00000008) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeInt64Size(20, this.lonOffset_);
            }
            size += getUnknownFields().getSerializedSize();
            this.memoizedSize = size;
            return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj)
        {
            if (obj == this)
            {
                return true;
            }
            if (!(obj instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock))
            {
                return super.equals(obj);
            }
            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock other =
                    (nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock) obj;

            if (hasStringtable() != other.hasStringtable())
                return false;
            if (hasStringtable())
            {
                if (!getStringtable().equals(other.getStringtable()))
                    return false;
            }
            if (!getPrimitivegroupList().equals(other.getPrimitivegroupList()))
                return false;
            if (hasGranularity() != other.hasGranularity())
                return false;
            if (hasGranularity())
            {
                if (getGranularity() != other.getGranularity())
                    return false;
            }
            if (hasLatOffset() != other.hasLatOffset())
                return false;
            if (hasLatOffset())
            {
                if (getLatOffset() != other.getLatOffset())
                    return false;
            }
            if (hasLonOffset() != other.hasLonOffset())
                return false;
            if (hasLonOffset())
            {
                if (getLonOffset() != other.getLonOffset())
                    return false;
            }
            if (hasDateGranularity() != other.hasDateGranularity())
                return false;
            if (hasDateGranularity())
            {
                if (getDateGranularity() != other.getDateGranularity())
                    return false;
            }
            if (!getUnknownFields().equals(other.getUnknownFields()))
                return false;
            return true;
        }

        @java.lang.Override
        public int hashCode()
        {
            if (this.memoizedHashCode != 0)
            {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = (19 * hash) + getDescriptor().hashCode();
            if (hasStringtable())
            {
                hash = (37 * hash) + STRINGTABLE_FIELD_NUMBER;
                hash = (53 * hash) + getStringtable().hashCode();
            }
            if (getPrimitivegroupCount() > 0)
            {
                hash = (37 * hash) + PRIMITIVEGROUP_FIELD_NUMBER;
                hash = (53 * hash) + getPrimitivegroupList().hashCode();
            }
            if (hasGranularity())
            {
                hash = (37 * hash) + GRANULARITY_FIELD_NUMBER;
                hash = (53 * hash) + getGranularity();
            }
            if (hasLatOffset())
            {
                hash = (37 * hash) + LAT_OFFSET_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getLatOffset());
            }
            if (hasLonOffset())
            {
                hash = (37 * hash) + LON_OFFSET_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getLonOffset());
            }
            if (hasDateGranularity())
            {
                hash = (37 * hash) + DATE_GRANULARITY_FIELD_NUMBER;
                hash = (53 * hash) + getDateGranularity();
            }
            hash = (29 * hash) + getUnknownFields().hashCode();
            this.memoizedHashCode = hash;
            return hash;
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock parseFrom(
                final java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock parseFrom(
                final java.nio.ByteBuffer data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock parseFrom(
                final com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock parseFrom(
                final com.google.protobuf.ByteString data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock parseFrom(final byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock parseFrom(final byte[] data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock parseFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock parseFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock parseDelimitedFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock parseDelimitedFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock parseFrom(
                final com.google.protobuf.CodedInputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock parseFrom(
                final com.google.protobuf.CodedInputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        @java.lang.Override
        public Builder newBuilderForType()
        {
            return newBuilder();
        }

        public static Builder newBuilder()
        {
            return DEFAULT_INSTANCE.toBuilder();
        }

        public static Builder newBuilder(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock prototype)
        {
            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }

        @java.lang.Override
        public Builder toBuilder()
        {
            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
        }

        @java.lang.Override
        protected Builder newBuilderForType(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
        {
            Builder builder = new Builder(parent);
            return builder;
        }

        /**
         * Protobuf type {@code OSMPBF.PrimitiveBlock}
         */
        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:OSMPBF.PrimitiveBlock)
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlockOrBuilder
        {
            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_PrimitiveBlock_descriptor;
            }

            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_PrimitiveBlock_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock.class,
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock.Builder.class);
            }

            // Construct using nl.tudelft.simulation.dsol.animation.gis.osm.pbf.Osmformat.PrimitiveBlock.newBuilder()
            private Builder()
            {
                maybeForceBuilderInitialization();
            }

            private Builder(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
            {
                super(parent);
                maybeForceBuilderInitialization();
            }

            private void maybeForceBuilderInitialization()
            {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders)
                {
                    internalGetStringtableFieldBuilder();
                    internalGetPrimitivegroupFieldBuilder();
                }
            }

            @java.lang.Override
            public Builder clear()
            {
                super.clear();
                this.bitField0_ = 0;
                this.stringtable_ = null;
                if (this.stringtableBuilder_ != null)
                {
                    this.stringtableBuilder_.dispose();
                    this.stringtableBuilder_ = null;
                }
                if (this.primitivegroupBuilder_ == null)
                {
                    this.primitivegroup_ = java.util.Collections.emptyList();
                }
                else
                {
                    this.primitivegroup_ = null;
                    this.primitivegroupBuilder_.clear();
                }
                this.bitField0_ = (this.bitField0_ & ~0x00000002);
                this.granularity_ = 100;
                this.latOffset_ = 0L;
                this.lonOffset_ = 0L;
                this.dateGranularity_ = 1000;
                return this;
            }

            @java.lang.Override
            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_PrimitiveBlock_descriptor;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock getDefaultInstanceForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock.getDefaultInstance();
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock build()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock result = buildPartial();
                if (!result.isInitialized())
                {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock buildPartial()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock result =
                        new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock(this);
                buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0)
                {
                    buildPartial0(result);
                }
                onBuilt();
                return result;
            }

            private void buildPartialRepeatedFields(
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock result)
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    if (((this.bitField0_ & 0x00000002) != 0))
                    {
                        this.primitivegroup_ = java.util.Collections.unmodifiableList(this.primitivegroup_);
                        this.bitField0_ = (this.bitField0_ & ~0x00000002);
                    }
                    result.primitivegroup_ = this.primitivegroup_;
                }
                else
                {
                    result.primitivegroup_ = this.primitivegroupBuilder_.build();
                }
            }

            private void buildPartial0(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock result)
            {
                int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) != 0))
                {
                    result.stringtable_ =
                            this.stringtableBuilder_ == null ? this.stringtable_ : this.stringtableBuilder_.build();
                    to_bitField0_ |= 0x00000001;
                }
                if (((from_bitField0_ & 0x00000004) != 0))
                {
                    result.granularity_ = this.granularity_;
                    to_bitField0_ |= 0x00000002;
                }
                if (((from_bitField0_ & 0x00000008) != 0))
                {
                    result.latOffset_ = this.latOffset_;
                    to_bitField0_ |= 0x00000004;
                }
                if (((from_bitField0_ & 0x00000010) != 0))
                {
                    result.lonOffset_ = this.lonOffset_;
                    to_bitField0_ |= 0x00000008;
                }
                if (((from_bitField0_ & 0x00000020) != 0))
                {
                    result.dateGranularity_ = this.dateGranularity_;
                    to_bitField0_ |= 0x00000010;
                }
                result.bitField0_ |= to_bitField0_;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.Message other)
            {
                if (other instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock)
                {
                    return mergeFrom((nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock) other);
                }
                else
                {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock other)
            {
                if (other == nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock.getDefaultInstance())
                    return this;
                if (other.hasStringtable())
                {
                    mergeStringtable(other.getStringtable());
                }
                if (this.primitivegroupBuilder_ == null)
                {
                    if (!other.primitivegroup_.isEmpty())
                    {
                        if (this.primitivegroup_.isEmpty())
                        {
                            this.primitivegroup_ = other.primitivegroup_;
                            this.bitField0_ = (this.bitField0_ & ~0x00000002);
                        }
                        else
                        {
                            ensurePrimitivegroupIsMutable();
                            this.primitivegroup_.addAll(other.primitivegroup_);
                        }
                        onChanged();
                    }
                }
                else
                {
                    if (!other.primitivegroup_.isEmpty())
                    {
                        if (this.primitivegroupBuilder_.isEmpty())
                        {
                            this.primitivegroupBuilder_.dispose();
                            this.primitivegroupBuilder_ = null;
                            this.primitivegroup_ = other.primitivegroup_;
                            this.bitField0_ = (this.bitField0_ & ~0x00000002);
                            this.primitivegroupBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
                                    ? internalGetPrimitivegroupFieldBuilder() : null;
                        }
                        else
                        {
                            this.primitivegroupBuilder_.addAllMessages(other.primitivegroup_);
                        }
                    }
                }
                if (other.hasGranularity())
                {
                    setGranularity(other.getGranularity());
                }
                if (other.hasLatOffset())
                {
                    setLatOffset(other.getLatOffset());
                }
                if (other.hasLonOffset())
                {
                    setLonOffset(other.getLonOffset());
                }
                if (other.hasDateGranularity())
                {
                    setDateGranularity(other.getDateGranularity());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                onChanged();
                return this;
            }

            @java.lang.Override
            public final boolean isInitialized()
            {
                if (!hasStringtable())
                {
                    return false;
                }
                for (int i = 0; i < getPrimitivegroupCount(); i++)
                {
                    if (!getPrimitivegroup(i).isInitialized())
                    {
                        return false;
                    }
                }
                return true;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
            {
                if (extensionRegistry == null)
                {
                    throw new java.lang.NullPointerException();
                }
                try
                {
                    boolean done = false;
                    while (!done)
                    {
                        int tag = input.readTag();
                        switch (tag)
                        {
                            case 0:
                                done = true;
                                break;
                            case 10:
                            {
                                input.readMessage(internalGetStringtableFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x00000001;
                                break;
                            } // case 10
                            case 18:
                            {
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup m = input.readMessage(
                                        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.parser(),
                                        extensionRegistry);
                                if (this.primitivegroupBuilder_ == null)
                                {
                                    ensurePrimitivegroupIsMutable();
                                    this.primitivegroup_.add(m);
                                }
                                else
                                {
                                    this.primitivegroupBuilder_.addMessage(m);
                                }
                                break;
                            } // case 18
                            case 136:
                            {
                                this.granularity_ = input.readInt32();
                                this.bitField0_ |= 0x00000004;
                                break;
                            } // case 136
                            case 144:
                            {
                                this.dateGranularity_ = input.readInt32();
                                this.bitField0_ |= 0x00000020;
                                break;
                            } // case 144
                            case 152:
                            {
                                this.latOffset_ = input.readInt64();
                                this.bitField0_ |= 0x00000008;
                                break;
                            } // case 152
                            case 160:
                            {
                                this.lonOffset_ = input.readInt64();
                                this.bitField0_ |= 0x00000010;
                                break;
                            } // case 160
                            default:
                            {
                                if (!super.parseUnknownField(input, extensionRegistry, tag))
                                {
                                    done = true; // was an endgroup tag
                                }
                                break;
                            } // default:
                        } // switch (tag)
                    } // while (!done)
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.unwrapIOException();
                }
                finally
                {
                    onChanged();
                } // finally
                return this;
            }

            private int bitField0_;

            private nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable stringtable_;

            private com.google.protobuf.SingleFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTableOrBuilder> stringtableBuilder_;

            /**
             * <code>required .OSMPBF.StringTable stringtable = 1;</code>
             * @return Whether the stringtable field is set.
             */
            @Override
            public boolean hasStringtable()
            {
                return ((this.bitField0_ & 0x00000001) != 0);
            }

            /**
             * <code>required .OSMPBF.StringTable stringtable = 1;</code>
             * @return The stringtable.
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable getStringtable()
            {
                if (this.stringtableBuilder_ == null)
                {
                    return this.stringtable_ == null
                            ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.getDefaultInstance()
                            : this.stringtable_;
                }
                else
                {
                    return this.stringtableBuilder_.getMessage();
                }
            }

            /**
             * <code>required .OSMPBF.StringTable stringtable = 1;</code>
             */
            public Builder setStringtable(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable value)
            {
                if (this.stringtableBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    this.stringtable_ = value;
                }
                else
                {
                    this.stringtableBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>required .OSMPBF.StringTable stringtable = 1;</code>
             */
            public Builder setStringtable(
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.Builder builderForValue)
            {
                if (this.stringtableBuilder_ == null)
                {
                    this.stringtable_ = builderForValue.build();
                }
                else
                {
                    this.stringtableBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>required .OSMPBF.StringTable stringtable = 1;</code>
             */
            public Builder mergeStringtable(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable value)
            {
                if (this.stringtableBuilder_ == null)
                {
                    if (((this.bitField0_ & 0x00000001) != 0) && this.stringtable_ != null
                            && this.stringtable_ != nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable
                                    .getDefaultInstance())
                    {
                        getStringtableBuilder().mergeFrom(value);
                    }
                    else
                    {
                        this.stringtable_ = value;
                    }
                }
                else
                {
                    this.stringtableBuilder_.mergeFrom(value);
                }
                if (this.stringtable_ != null)
                {
                    this.bitField0_ |= 0x00000001;
                    onChanged();
                }
                return this;
            }

            /**
             * <code>required .OSMPBF.StringTable stringtable = 1;</code>
             */
            public Builder clearStringtable()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000001);
                this.stringtable_ = null;
                if (this.stringtableBuilder_ != null)
                {
                    this.stringtableBuilder_.dispose();
                    this.stringtableBuilder_ = null;
                }
                onChanged();
                return this;
            }

            /**
             * <code>required .OSMPBF.StringTable stringtable = 1;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.Builder getStringtableBuilder()
            {
                this.bitField0_ |= 0x00000001;
                onChanged();
                return internalGetStringtableFieldBuilder().getBuilder();
            }

            /**
             * <code>required .OSMPBF.StringTable stringtable = 1;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTableOrBuilder getStringtableOrBuilder()
            {
                if (this.stringtableBuilder_ != null)
                {
                    return this.stringtableBuilder_.getMessageOrBuilder();
                }
                else
                {
                    return this.stringtable_ == null
                            ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.getDefaultInstance()
                            : this.stringtable_;
                }
            }

            /**
             * <code>required .OSMPBF.StringTable stringtable = 1;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTableOrBuilder> internalGetStringtableFieldBuilder()
            {
                if (this.stringtableBuilder_ == null)
                {
                    this.stringtableBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.Builder,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTableOrBuilder>(getStringtable(),
                                    getParentForChildren(), isClean());
                    this.stringtable_ = null;
                }
                return this.stringtableBuilder_;
            }

            private java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup> primitivegroup_ =
                    java.util.Collections.emptyList();

            private void ensurePrimitivegroupIsMutable()
            {
                if (!((this.bitField0_ & 0x00000002) != 0))
                {
                    this.primitivegroup_ =
                            new java.util.ArrayList<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup>(
                                    this.primitivegroup_);
                    this.bitField0_ |= 0x00000002;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroupOrBuilder> primitivegroupBuilder_;

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            @Override
            public java.util.List<
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup> getPrimitivegroupList()
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    return java.util.Collections.unmodifiableList(this.primitivegroup_);
                }
                else
                {
                    return this.primitivegroupBuilder_.getMessageList();
                }
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            @Override
            public int getPrimitivegroupCount()
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    return this.primitivegroup_.size();
                }
                else
                {
                    return this.primitivegroupBuilder_.getCount();
                }
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup getPrimitivegroup(final int index)
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    return this.primitivegroup_.get(index);
                }
                else
                {
                    return this.primitivegroupBuilder_.getMessage(index);
                }
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            public Builder setPrimitivegroup(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup value)
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensurePrimitivegroupIsMutable();
                    this.primitivegroup_.set(index, value);
                    onChanged();
                }
                else
                {
                    this.primitivegroupBuilder_.setMessage(index, value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            public Builder setPrimitivegroup(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.Builder builderForValue)
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    ensurePrimitivegroupIsMutable();
                    this.primitivegroup_.set(index, builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.primitivegroupBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            public Builder addPrimitivegroup(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup value)
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensurePrimitivegroupIsMutable();
                    this.primitivegroup_.add(value);
                    onChanged();
                }
                else
                {
                    this.primitivegroupBuilder_.addMessage(value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            public Builder addPrimitivegroup(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup value)
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensurePrimitivegroupIsMutable();
                    this.primitivegroup_.add(index, value);
                    onChanged();
                }
                else
                {
                    this.primitivegroupBuilder_.addMessage(index, value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            public Builder addPrimitivegroup(
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.Builder builderForValue)
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    ensurePrimitivegroupIsMutable();
                    this.primitivegroup_.add(builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.primitivegroupBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            public Builder addPrimitivegroup(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.Builder builderForValue)
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    ensurePrimitivegroupIsMutable();
                    this.primitivegroup_.add(index, builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.primitivegroupBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            public Builder addAllPrimitivegroup(final java.lang.Iterable<
                    ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup> values)
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    ensurePrimitivegroupIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.primitivegroup_);
                    onChanged();
                }
                else
                {
                    this.primitivegroupBuilder_.addAllMessages(values);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            public Builder clearPrimitivegroup()
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    this.primitivegroup_ = java.util.Collections.emptyList();
                    this.bitField0_ = (this.bitField0_ & ~0x00000002);
                    onChanged();
                }
                else
                {
                    this.primitivegroupBuilder_.clear();
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            public Builder removePrimitivegroup(final int index)
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    ensurePrimitivegroupIsMutable();
                    this.primitivegroup_.remove(index);
                    onChanged();
                }
                else
                {
                    this.primitivegroupBuilder_.remove(index);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.Builder getPrimitivegroupBuilder(
                    final int index)
            {
                return internalGetPrimitivegroupFieldBuilder().getBuilder(index);
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroupOrBuilder getPrimitivegroupOrBuilder(
                    final int index)
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    return this.primitivegroup_.get(index);
                }
                else
                {
                    return this.primitivegroupBuilder_.getMessageOrBuilder(index);
                }
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            @Override
            public java.util.List<
                    ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroupOrBuilder> getPrimitivegroupOrBuilderList()
            {
                if (this.primitivegroupBuilder_ != null)
                {
                    return this.primitivegroupBuilder_.getMessageOrBuilderList();
                }
                else
                {
                    return java.util.Collections.unmodifiableList(this.primitivegroup_);
                }
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.Builder addPrimitivegroupBuilder()
            {
                return internalGetPrimitivegroupFieldBuilder().addBuilder(
                        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.getDefaultInstance());
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.Builder addPrimitivegroupBuilder(
                    final int index)
            {
                return internalGetPrimitivegroupFieldBuilder().addBuilder(index,
                        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.getDefaultInstance());
            }

            /**
             * <code>repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;</code>
             */
            public java.util.List<
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.Builder> getPrimitivegroupBuilderList()
            {
                return internalGetPrimitivegroupFieldBuilder().getBuilderList();
            }

            private com.google.protobuf.RepeatedFieldBuilder<
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroupOrBuilder> internalGetPrimitivegroupFieldBuilder()
            {
                if (this.primitivegroupBuilder_ == null)
                {
                    this.primitivegroupBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.Builder,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroupOrBuilder>(
                                    this.primitivegroup_, ((this.bitField0_ & 0x00000002) != 0), getParentForChildren(),
                                    isClean());
                    this.primitivegroup_ = null;
                }
                return this.primitivegroupBuilder_;
            }

            private int granularity_ = 100;

            /**
             * <pre>
             * Granularity, units of nanodegrees, used to store coordinates in this block.
             * </pre>
             *
             * <code>optional int32 granularity = 17 [default = 100];</code>
             * @return Whether the granularity field is set.
             */
            @java.lang.Override
            public boolean hasGranularity()
            {
                return ((this.bitField0_ & 0x00000004) != 0);
            }

            /**
             * <pre>
             * Granularity, units of nanodegrees, used to store coordinates in this block.
             * </pre>
             *
             * <code>optional int32 granularity = 17 [default = 100];</code>
             * @return The granularity.
             */
            @java.lang.Override
            public int getGranularity()
            {
                return this.granularity_;
            }

            /**
             * <pre>
             * Granularity, units of nanodegrees, used to store coordinates in this block.
             * </pre>
             *
             * <code>optional int32 granularity = 17 [default = 100];</code>
             * @param value The granularity to set.
             * @return This builder for chaining.
             */
            public Builder setGranularity(final int value)
            {

                this.granularity_ = value;
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Granularity, units of nanodegrees, used to store coordinates in this block.
             * </pre>
             *
             * <code>optional int32 granularity = 17 [default = 100];</code>
             * @return This builder for chaining.
             */
            public Builder clearGranularity()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000004);
                this.granularity_ = 100;
                onChanged();
                return this;
            }

            private long latOffset_;

            /**
             * <pre>
             * Offset value between the output coordinates and the granularity grid in units of nanodegrees.
             * </pre>
             *
             * <code>optional int64 lat_offset = 19 [default = 0];</code>
             * @return Whether the latOffset field is set.
             */
            @java.lang.Override
            public boolean hasLatOffset()
            {
                return ((this.bitField0_ & 0x00000008) != 0);
            }

            /**
             * <pre>
             * Offset value between the output coordinates and the granularity grid in units of nanodegrees.
             * </pre>
             *
             * <code>optional int64 lat_offset = 19 [default = 0];</code>
             * @return The latOffset.
             */
            @java.lang.Override
            public long getLatOffset()
            {
                return this.latOffset_;
            }

            /**
             * <pre>
             * Offset value between the output coordinates and the granularity grid in units of nanodegrees.
             * </pre>
             *
             * <code>optional int64 lat_offset = 19 [default = 0];</code>
             * @param value The latOffset to set.
             * @return This builder for chaining.
             */
            public Builder setLatOffset(final long value)
            {

                this.latOffset_ = value;
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Offset value between the output coordinates and the granularity grid in units of nanodegrees.
             * </pre>
             *
             * <code>optional int64 lat_offset = 19 [default = 0];</code>
             * @return This builder for chaining.
             */
            public Builder clearLatOffset()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000008);
                this.latOffset_ = 0L;
                onChanged();
                return this;
            }

            private long lonOffset_;

            /**
             * <code>optional int64 lon_offset = 20 [default = 0];</code>
             * @return Whether the lonOffset field is set.
             */
            @java.lang.Override
            public boolean hasLonOffset()
            {
                return ((this.bitField0_ & 0x00000010) != 0);
            }

            /**
             * <code>optional int64 lon_offset = 20 [default = 0];</code>
             * @return The lonOffset.
             */
            @java.lang.Override
            public long getLonOffset()
            {
                return this.lonOffset_;
            }

            /**
             * <code>optional int64 lon_offset = 20 [default = 0];</code>
             * @param value The lonOffset to set.
             * @return This builder for chaining.
             */
            public Builder setLonOffset(final long value)
            {

                this.lonOffset_ = value;
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <code>optional int64 lon_offset = 20 [default = 0];</code>
             * @return This builder for chaining.
             */
            public Builder clearLonOffset()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000010);
                this.lonOffset_ = 0L;
                onChanged();
                return this;
            }

            private int dateGranularity_ = 1000;

            /**
             * <pre>
             * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
             * </pre>
             *
             * <code>optional int32 date_granularity = 18 [default = 1000];</code>
             * @return Whether the dateGranularity field is set.
             */
            @java.lang.Override
            public boolean hasDateGranularity()
            {
                return ((this.bitField0_ & 0x00000020) != 0);
            }

            /**
             * <pre>
             * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
             * </pre>
             *
             * <code>optional int32 date_granularity = 18 [default = 1000];</code>
             * @return The dateGranularity.
             */
            @java.lang.Override
            public int getDateGranularity()
            {
                return this.dateGranularity_;
            }

            /**
             * <pre>
             * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
             * </pre>
             *
             * <code>optional int32 date_granularity = 18 [default = 1000];</code>
             * @param value The dateGranularity to set.
             * @return This builder for chaining.
             */
            public Builder setDateGranularity(final int value)
            {

                this.dateGranularity_ = value;
                this.bitField0_ |= 0x00000020;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Granularity of dates, normally represented in units of milliseconds since the 1970 epoch.
             * </pre>
             *
             * <code>optional int32 date_granularity = 18 [default = 1000];</code>
             * @return This builder for chaining.
             */
            public Builder clearDateGranularity()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000020);
                this.dateGranularity_ = 1000;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:OSMPBF.PrimitiveBlock)
        }

        // @@protoc_insertion_point(class_scope:OSMPBF.PrimitiveBlock)
        private static final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock DEFAULT_INSTANCE;
        static
        {
            DEFAULT_INSTANCE = new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock();
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock getDefaultInstance()
        {
            return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<PrimitiveBlock> PARSER =
                new com.google.protobuf.AbstractParser<PrimitiveBlock>()
                {
                    @java.lang.Override
                    public PrimitiveBlock parsePartialFrom(final com.google.protobuf.CodedInputStream input,
                            final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException
                    {
                        Builder builder = newBuilder();
                        try
                        {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (com.google.protobuf.InvalidProtocolBufferException e)
                        {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (com.google.protobuf.UninitializedMessageException e)
                        {
                            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (java.io.IOException e)
                        {
                            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                                    .setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };

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

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

        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveBlock getDefaultInstanceForType()
        {
            return DEFAULT_INSTANCE;
        }

    }

    public interface PrimitiveGroupOrBuilder extends
            // @@protoc_insertion_point(interface_extends:OSMPBF.PrimitiveGroup)
            com.google.protobuf.MessageOrBuilder
    {

        /**
         * <code>repeated .OSMPBF.Node nodes = 1;</code>
         */
        java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node> getNodesList();

        /**
         * <code>repeated .OSMPBF.Node nodes = 1;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node getNodes(int index);

        /**
         * <code>repeated .OSMPBF.Node nodes = 1;</code>
         */
        int getNodesCount();

        /**
         * <code>repeated .OSMPBF.Node nodes = 1;</code>
         */
        java.util.List<? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.NodeOrBuilder> getNodesOrBuilderList();

        /**
         * <code>repeated .OSMPBF.Node nodes = 1;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.NodeOrBuilder getNodesOrBuilder(int index);

        /**
         * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
         * @return Whether the dense field is set.
         */
        boolean hasDense();

        /**
         * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
         * @return The dense.
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes getDense();

        /**
         * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodesOrBuilder getDenseOrBuilder();

        /**
         * <code>repeated .OSMPBF.Way ways = 3;</code>
         */
        java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way> getWaysList();

        /**
         * <code>repeated .OSMPBF.Way ways = 3;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way getWays(int index);

        /**
         * <code>repeated .OSMPBF.Way ways = 3;</code>
         */
        int getWaysCount();

        /**
         * <code>repeated .OSMPBF.Way ways = 3;</code>
         */
        java.util.List<? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.WayOrBuilder> getWaysOrBuilderList();

        /**
         * <code>repeated .OSMPBF.Way ways = 3;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.WayOrBuilder getWaysOrBuilder(int index);

        /**
         * <code>repeated .OSMPBF.Relation relations = 4;</code>
         */
        java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation> getRelationsList();

        /**
         * <code>repeated .OSMPBF.Relation relations = 4;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation getRelations(int index);

        /**
         * <code>repeated .OSMPBF.Relation relations = 4;</code>
         */
        int getRelationsCount();

        /**
         * <code>repeated .OSMPBF.Relation relations = 4;</code>
         */
        java.util.List<
                ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.RelationOrBuilder> getRelationsOrBuilderList();

        /**
         * <code>repeated .OSMPBF.Relation relations = 4;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.RelationOrBuilder getRelationsOrBuilder(int index);

        /**
         * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
         */
        java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet> getChangesetsList();

        /**
         * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet getChangesets(int index);

        /**
         * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
         */
        int getChangesetsCount();

        /**
         * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
         */
        java.util.List<
                ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSetOrBuilder> getChangesetsOrBuilderList();

        /**
         * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSetOrBuilder getChangesetsOrBuilder(int index);
    }

    /**
     * <pre>
     * Group of OSMPrimitives. All primitives in a group must be the same type.
     * </pre>
     *
     * Protobuf type {@code OSMPBF.PrimitiveGroup}
     */
    public static final class PrimitiveGroup extends com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:OSMPBF.PrimitiveGroup)
            PrimitiveGroupOrBuilder
    {
        private static final long serialVersionUID = 0L;
        static
        {
            com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                    com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 31, /* patch= */ 1,
                    /* suffix= */ "", PrimitiveGroup.class.getName());
        }

        // Use PrimitiveGroup.newBuilder() to construct.
        private PrimitiveGroup(final com.google.protobuf.GeneratedMessage.Builder<?> builder)
        {
            super(builder);
        }

        private PrimitiveGroup()
        {
            this.nodes_ = java.util.Collections.emptyList();
            this.ways_ = java.util.Collections.emptyList();
            this.relations_ = java.util.Collections.emptyList();
            this.changesets_ = java.util.Collections.emptyList();
        }

        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_PrimitiveGroup_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_PrimitiveGroup_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.class,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.Builder.class);
        }

        private int bitField0_;

        public static final int NODES_FIELD_NUMBER = 1;

        @SuppressWarnings("serial")
        private java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node> nodes_;

        /**
         * <code>repeated .OSMPBF.Node nodes = 1;</code>
         */
        @java.lang.Override
        public java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node> getNodesList()
        {
            return this.nodes_;
        }

        /**
         * <code>repeated .OSMPBF.Node nodes = 1;</code>
         */
        @java.lang.Override
        public java.util.List<
                ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.NodeOrBuilder> getNodesOrBuilderList()
        {
            return this.nodes_;
        }

        /**
         * <code>repeated .OSMPBF.Node nodes = 1;</code>
         */
        @java.lang.Override
        public int getNodesCount()
        {
            return this.nodes_.size();
        }

        /**
         * <code>repeated .OSMPBF.Node nodes = 1;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node getNodes(final int index)
        {
            return this.nodes_.get(index);
        }

        /**
         * <code>repeated .OSMPBF.Node nodes = 1;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.NodeOrBuilder getNodesOrBuilder(final int index)
        {
            return this.nodes_.get(index);
        }

        public static final int DENSE_FIELD_NUMBER = 2;

        private nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes dense_;

        /**
         * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
         * @return Whether the dense field is set.
         */
        @java.lang.Override
        public boolean hasDense()
        {
            return ((this.bitField0_ & 0x00000001) != 0);
        }

        /**
         * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
         * @return The dense.
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes getDense()
        {
            return this.dense_ == null ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.getDefaultInstance()
                    : this.dense_;
        }

        /**
         * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodesOrBuilder getDenseOrBuilder()
        {
            return this.dense_ == null ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.getDefaultInstance()
                    : this.dense_;
        }

        public static final int WAYS_FIELD_NUMBER = 3;

        @SuppressWarnings("serial")
        private java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way> ways_;

        /**
         * <code>repeated .OSMPBF.Way ways = 3;</code>
         */
        @java.lang.Override
        public java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way> getWaysList()
        {
            return this.ways_;
        }

        /**
         * <code>repeated .OSMPBF.Way ways = 3;</code>
         */
        @java.lang.Override
        public java.util.List<
                ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.WayOrBuilder> getWaysOrBuilderList()
        {
            return this.ways_;
        }

        /**
         * <code>repeated .OSMPBF.Way ways = 3;</code>
         */
        @java.lang.Override
        public int getWaysCount()
        {
            return this.ways_.size();
        }

        /**
         * <code>repeated .OSMPBF.Way ways = 3;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way getWays(final int index)
        {
            return this.ways_.get(index);
        }

        /**
         * <code>repeated .OSMPBF.Way ways = 3;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.WayOrBuilder getWaysOrBuilder(final int index)
        {
            return this.ways_.get(index);
        }

        public static final int RELATIONS_FIELD_NUMBER = 4;

        @SuppressWarnings("serial")
        private java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation> relations_;

        /**
         * <code>repeated .OSMPBF.Relation relations = 4;</code>
         */
        @java.lang.Override
        public java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation> getRelationsList()
        {
            return this.relations_;
        }

        /**
         * <code>repeated .OSMPBF.Relation relations = 4;</code>
         */
        @java.lang.Override
        public java.util.List<
                ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.RelationOrBuilder> getRelationsOrBuilderList()
        {
            return this.relations_;
        }

        /**
         * <code>repeated .OSMPBF.Relation relations = 4;</code>
         */
        @java.lang.Override
        public int getRelationsCount()
        {
            return this.relations_.size();
        }

        /**
         * <code>repeated .OSMPBF.Relation relations = 4;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation getRelations(final int index)
        {
            return this.relations_.get(index);
        }

        /**
         * <code>repeated .OSMPBF.Relation relations = 4;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.RelationOrBuilder getRelationsOrBuilder(final int index)
        {
            return this.relations_.get(index);
        }

        public static final int CHANGESETS_FIELD_NUMBER = 5;

        @SuppressWarnings("serial")
        private java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet> changesets_;

        /**
         * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
         */
        @java.lang.Override
        public java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet> getChangesetsList()
        {
            return this.changesets_;
        }

        /**
         * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
         */
        @java.lang.Override
        public java.util.List<
                ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSetOrBuilder> getChangesetsOrBuilderList()
        {
            return this.changesets_;
        }

        /**
         * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
         */
        @java.lang.Override
        public int getChangesetsCount()
        {
            return this.changesets_.size();
        }

        /**
         * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet getChangesets(final int index)
        {
            return this.changesets_.get(index);
        }

        /**
         * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSetOrBuilder getChangesetsOrBuilder(
                final int index)
        {
            return this.changesets_.get(index);
        }

        private byte memoizedIsInitialized = -1;

        @java.lang.Override
        public final boolean isInitialized()
        {
            byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1)
                return true;
            if (isInitialized == 0)
                return false;

            for (int i = 0; i < getNodesCount(); i++)
            {
                if (!getNodes(i).isInitialized())
                {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            for (int i = 0; i < getWaysCount(); i++)
            {
                if (!getWays(i).isInitialized())
                {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            for (int i = 0; i < getRelationsCount(); i++)
            {
                if (!getRelations(i).isInitialized())
                {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            for (int i = 0; i < getChangesetsCount(); i++)
            {
                if (!getChangesets(i).isInitialized())
                {
                    this.memoizedIsInitialized = 0;
                    return false;
                }
            }
            this.memoizedIsInitialized = 1;
            return true;
        }

        @java.lang.Override
        public void writeTo(final com.google.protobuf.CodedOutputStream output) throws java.io.IOException
        {
            for (int i = 0; i < this.nodes_.size(); i++)
            {
                output.writeMessage(1, this.nodes_.get(i));
            }
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                output.writeMessage(2, getDense());
            }
            for (int i = 0; i < this.ways_.size(); i++)
            {
                output.writeMessage(3, this.ways_.get(i));
            }
            for (int i = 0; i < this.relations_.size(); i++)
            {
                output.writeMessage(4, this.relations_.get(i));
            }
            for (int i = 0; i < this.changesets_.size(); i++)
            {
                output.writeMessage(5, this.changesets_.get(i));
            }
            getUnknownFields().writeTo(output);
        }

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

            size = 0;
            for (int i = 0; i < this.nodes_.size(); i++)
            {
                size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, this.nodes_.get(i));
            }
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getDense());
            }
            for (int i = 0; i < this.ways_.size(); i++)
            {
                size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, this.ways_.get(i));
            }
            for (int i = 0; i < this.relations_.size(); i++)
            {
                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, this.relations_.get(i));
            }
            for (int i = 0; i < this.changesets_.size(); i++)
            {
                size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, this.changesets_.get(i));
            }
            size += getUnknownFields().getSerializedSize();
            this.memoizedSize = size;
            return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj)
        {
            if (obj == this)
            {
                return true;
            }
            if (!(obj instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup))
            {
                return super.equals(obj);
            }
            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup other =
                    (nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup) obj;

            if (!getNodesList().equals(other.getNodesList()))
                return false;
            if (hasDense() != other.hasDense())
                return false;
            if (hasDense())
            {
                if (!getDense().equals(other.getDense()))
                    return false;
            }
            if (!getWaysList().equals(other.getWaysList()))
                return false;
            if (!getRelationsList().equals(other.getRelationsList()))
                return false;
            if (!getChangesetsList().equals(other.getChangesetsList()))
                return false;
            if (!getUnknownFields().equals(other.getUnknownFields()))
                return false;
            return true;
        }

        @java.lang.Override
        public int hashCode()
        {
            if (this.memoizedHashCode != 0)
            {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = (19 * hash) + getDescriptor().hashCode();
            if (getNodesCount() > 0)
            {
                hash = (37 * hash) + NODES_FIELD_NUMBER;
                hash = (53 * hash) + getNodesList().hashCode();
            }
            if (hasDense())
            {
                hash = (37 * hash) + DENSE_FIELD_NUMBER;
                hash = (53 * hash) + getDense().hashCode();
            }
            if (getWaysCount() > 0)
            {
                hash = (37 * hash) + WAYS_FIELD_NUMBER;
                hash = (53 * hash) + getWaysList().hashCode();
            }
            if (getRelationsCount() > 0)
            {
                hash = (37 * hash) + RELATIONS_FIELD_NUMBER;
                hash = (53 * hash) + getRelationsList().hashCode();
            }
            if (getChangesetsCount() > 0)
            {
                hash = (37 * hash) + CHANGESETS_FIELD_NUMBER;
                hash = (53 * hash) + getChangesetsList().hashCode();
            }
            hash = (29 * hash) + getUnknownFields().hashCode();
            this.memoizedHashCode = hash;
            return hash;
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup parseFrom(
                final java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup parseFrom(
                final java.nio.ByteBuffer data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup parseFrom(
                final com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup parseFrom(
                final com.google.protobuf.ByteString data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup parseFrom(final byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup parseFrom(final byte[] data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup parseFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup parseFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup parseDelimitedFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup parseDelimitedFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup parseFrom(
                final com.google.protobuf.CodedInputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup parseFrom(
                final com.google.protobuf.CodedInputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        @java.lang.Override
        public Builder newBuilderForType()
        {
            return newBuilder();
        }

        public static Builder newBuilder()
        {
            return DEFAULT_INSTANCE.toBuilder();
        }

        public static Builder newBuilder(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup prototype)
        {
            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }

        @java.lang.Override
        public Builder toBuilder()
        {
            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
        }

        @java.lang.Override
        protected Builder newBuilderForType(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
        {
            Builder builder = new Builder(parent);
            return builder;
        }

        /**
         * <pre>
         * Group of OSMPrimitives. All primitives in a group must be the same type.
         * </pre>
         *
         * Protobuf type {@code OSMPBF.PrimitiveGroup}
         */
        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:OSMPBF.PrimitiveGroup)
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroupOrBuilder
        {
            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_PrimitiveGroup_descriptor;
            }

            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_PrimitiveGroup_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.class,
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.Builder.class);
            }

            // Construct using nl.tudelft.simulation.dsol.animation.gis.osm.pbf.Osmformat.PrimitiveGroup.newBuilder()
            private Builder()
            {
                maybeForceBuilderInitialization();
            }

            private Builder(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
            {
                super(parent);
                maybeForceBuilderInitialization();
            }

            private void maybeForceBuilderInitialization()
            {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders)
                {
                    internalGetNodesFieldBuilder();
                    internalGetDenseFieldBuilder();
                    internalGetWaysFieldBuilder();
                    internalGetRelationsFieldBuilder();
                    internalGetChangesetsFieldBuilder();
                }
            }

            @java.lang.Override
            public Builder clear()
            {
                super.clear();
                this.bitField0_ = 0;
                if (this.nodesBuilder_ == null)
                {
                    this.nodes_ = java.util.Collections.emptyList();
                }
                else
                {
                    this.nodes_ = null;
                    this.nodesBuilder_.clear();
                }
                this.bitField0_ = (this.bitField0_ & ~0x00000001);
                this.dense_ = null;
                if (this.denseBuilder_ != null)
                {
                    this.denseBuilder_.dispose();
                    this.denseBuilder_ = null;
                }
                if (this.waysBuilder_ == null)
                {
                    this.ways_ = java.util.Collections.emptyList();
                }
                else
                {
                    this.ways_ = null;
                    this.waysBuilder_.clear();
                }
                this.bitField0_ = (this.bitField0_ & ~0x00000004);
                if (this.relationsBuilder_ == null)
                {
                    this.relations_ = java.util.Collections.emptyList();
                }
                else
                {
                    this.relations_ = null;
                    this.relationsBuilder_.clear();
                }
                this.bitField0_ = (this.bitField0_ & ~0x00000008);
                if (this.changesetsBuilder_ == null)
                {
                    this.changesets_ = java.util.Collections.emptyList();
                }
                else
                {
                    this.changesets_ = null;
                    this.changesetsBuilder_.clear();
                }
                this.bitField0_ = (this.bitField0_ & ~0x00000010);
                return this;
            }

            @java.lang.Override
            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_PrimitiveGroup_descriptor;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup getDefaultInstanceForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.getDefaultInstance();
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup build()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup result = buildPartial();
                if (!result.isInitialized())
                {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup buildPartial()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup result =
                        new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup(this);
                buildPartialRepeatedFields(result);
                if (this.bitField0_ != 0)
                {
                    buildPartial0(result);
                }
                onBuilt();
                return result;
            }

            private void buildPartialRepeatedFields(
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup result)
            {
                if (this.nodesBuilder_ == null)
                {
                    if (((this.bitField0_ & 0x00000001) != 0))
                    {
                        this.nodes_ = java.util.Collections.unmodifiableList(this.nodes_);
                        this.bitField0_ = (this.bitField0_ & ~0x00000001);
                    }
                    result.nodes_ = this.nodes_;
                }
                else
                {
                    result.nodes_ = this.nodesBuilder_.build();
                }
                if (this.waysBuilder_ == null)
                {
                    if (((this.bitField0_ & 0x00000004) != 0))
                    {
                        this.ways_ = java.util.Collections.unmodifiableList(this.ways_);
                        this.bitField0_ = (this.bitField0_ & ~0x00000004);
                    }
                    result.ways_ = this.ways_;
                }
                else
                {
                    result.ways_ = this.waysBuilder_.build();
                }
                if (this.relationsBuilder_ == null)
                {
                    if (((this.bitField0_ & 0x00000008) != 0))
                    {
                        this.relations_ = java.util.Collections.unmodifiableList(this.relations_);
                        this.bitField0_ = (this.bitField0_ & ~0x00000008);
                    }
                    result.relations_ = this.relations_;
                }
                else
                {
                    result.relations_ = this.relationsBuilder_.build();
                }
                if (this.changesetsBuilder_ == null)
                {
                    if (((this.bitField0_ & 0x00000010) != 0))
                    {
                        this.changesets_ = java.util.Collections.unmodifiableList(this.changesets_);
                        this.bitField0_ = (this.bitField0_ & ~0x00000010);
                    }
                    result.changesets_ = this.changesets_;
                }
                else
                {
                    result.changesets_ = this.changesetsBuilder_.build();
                }
            }

            private void buildPartial0(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup result)
            {
                int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000002) != 0))
                {
                    result.dense_ = this.denseBuilder_ == null ? this.dense_ : this.denseBuilder_.build();
                    to_bitField0_ |= 0x00000001;
                }
                result.bitField0_ |= to_bitField0_;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.Message other)
            {
                if (other instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup)
                {
                    return mergeFrom((nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup) other);
                }
                else
                {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup other)
            {
                if (other == nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup.getDefaultInstance())
                    return this;
                if (this.nodesBuilder_ == null)
                {
                    if (!other.nodes_.isEmpty())
                    {
                        if (this.nodes_.isEmpty())
                        {
                            this.nodes_ = other.nodes_;
                            this.bitField0_ = (this.bitField0_ & ~0x00000001);
                        }
                        else
                        {
                            ensureNodesIsMutable();
                            this.nodes_.addAll(other.nodes_);
                        }
                        onChanged();
                    }
                }
                else
                {
                    if (!other.nodes_.isEmpty())
                    {
                        if (this.nodesBuilder_.isEmpty())
                        {
                            this.nodesBuilder_.dispose();
                            this.nodesBuilder_ = null;
                            this.nodes_ = other.nodes_;
                            this.bitField0_ = (this.bitField0_ & ~0x00000001);
                            this.nodesBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
                                    ? internalGetNodesFieldBuilder() : null;
                        }
                        else
                        {
                            this.nodesBuilder_.addAllMessages(other.nodes_);
                        }
                    }
                }
                if (other.hasDense())
                {
                    mergeDense(other.getDense());
                }
                if (this.waysBuilder_ == null)
                {
                    if (!other.ways_.isEmpty())
                    {
                        if (this.ways_.isEmpty())
                        {
                            this.ways_ = other.ways_;
                            this.bitField0_ = (this.bitField0_ & ~0x00000004);
                        }
                        else
                        {
                            ensureWaysIsMutable();
                            this.ways_.addAll(other.ways_);
                        }
                        onChanged();
                    }
                }
                else
                {
                    if (!other.ways_.isEmpty())
                    {
                        if (this.waysBuilder_.isEmpty())
                        {
                            this.waysBuilder_.dispose();
                            this.waysBuilder_ = null;
                            this.ways_ = other.ways_;
                            this.bitField0_ = (this.bitField0_ & ~0x00000004);
                            this.waysBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
                                    ? internalGetWaysFieldBuilder() : null;
                        }
                        else
                        {
                            this.waysBuilder_.addAllMessages(other.ways_);
                        }
                    }
                }
                if (this.relationsBuilder_ == null)
                {
                    if (!other.relations_.isEmpty())
                    {
                        if (this.relations_.isEmpty())
                        {
                            this.relations_ = other.relations_;
                            this.bitField0_ = (this.bitField0_ & ~0x00000008);
                        }
                        else
                        {
                            ensureRelationsIsMutable();
                            this.relations_.addAll(other.relations_);
                        }
                        onChanged();
                    }
                }
                else
                {
                    if (!other.relations_.isEmpty())
                    {
                        if (this.relationsBuilder_.isEmpty())
                        {
                            this.relationsBuilder_.dispose();
                            this.relationsBuilder_ = null;
                            this.relations_ = other.relations_;
                            this.bitField0_ = (this.bitField0_ & ~0x00000008);
                            this.relationsBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
                                    ? internalGetRelationsFieldBuilder() : null;
                        }
                        else
                        {
                            this.relationsBuilder_.addAllMessages(other.relations_);
                        }
                    }
                }
                if (this.changesetsBuilder_ == null)
                {
                    if (!other.changesets_.isEmpty())
                    {
                        if (this.changesets_.isEmpty())
                        {
                            this.changesets_ = other.changesets_;
                            this.bitField0_ = (this.bitField0_ & ~0x00000010);
                        }
                        else
                        {
                            ensureChangesetsIsMutable();
                            this.changesets_.addAll(other.changesets_);
                        }
                        onChanged();
                    }
                }
                else
                {
                    if (!other.changesets_.isEmpty())
                    {
                        if (this.changesetsBuilder_.isEmpty())
                        {
                            this.changesetsBuilder_.dispose();
                            this.changesetsBuilder_ = null;
                            this.changesets_ = other.changesets_;
                            this.bitField0_ = (this.bitField0_ & ~0x00000010);
                            this.changesetsBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders
                                    ? internalGetChangesetsFieldBuilder() : null;
                        }
                        else
                        {
                            this.changesetsBuilder_.addAllMessages(other.changesets_);
                        }
                    }
                }
                this.mergeUnknownFields(other.getUnknownFields());
                onChanged();
                return this;
            }

            @java.lang.Override
            public final boolean isInitialized()
            {
                for (int i = 0; i < getNodesCount(); i++)
                {
                    if (!getNodes(i).isInitialized())
                    {
                        return false;
                    }
                }
                for (int i = 0; i < getWaysCount(); i++)
                {
                    if (!getWays(i).isInitialized())
                    {
                        return false;
                    }
                }
                for (int i = 0; i < getRelationsCount(); i++)
                {
                    if (!getRelations(i).isInitialized())
                    {
                        return false;
                    }
                }
                for (int i = 0; i < getChangesetsCount(); i++)
                {
                    if (!getChangesets(i).isInitialized())
                    {
                        return false;
                    }
                }
                return true;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
            {
                if (extensionRegistry == null)
                {
                    throw new java.lang.NullPointerException();
                }
                try
                {
                    boolean done = false;
                    while (!done)
                    {
                        int tag = input.readTag();
                        switch (tag)
                        {
                            case 0:
                                done = true;
                                break;
                            case 10:
                            {
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node m =
                                        input.readMessage(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.parser(),
                                                extensionRegistry);
                                if (this.nodesBuilder_ == null)
                                {
                                    ensureNodesIsMutable();
                                    this.nodes_.add(m);
                                }
                                else
                                {
                                    this.nodesBuilder_.addMessage(m);
                                }
                                break;
                            } // case 10
                            case 18:
                            {
                                input.readMessage(internalGetDenseFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x00000002;
                                break;
                            } // case 18
                            case 26:
                            {
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way m =
                                        input.readMessage(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.parser(),
                                                extensionRegistry);
                                if (this.waysBuilder_ == null)
                                {
                                    ensureWaysIsMutable();
                                    this.ways_.add(m);
                                }
                                else
                                {
                                    this.waysBuilder_.addMessage(m);
                                }
                                break;
                            } // case 26
                            case 34:
                            {
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation m = input.readMessage(
                                        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.parser(),
                                        extensionRegistry);
                                if (this.relationsBuilder_ == null)
                                {
                                    ensureRelationsIsMutable();
                                    this.relations_.add(m);
                                }
                                else
                                {
                                    this.relationsBuilder_.addMessage(m);
                                }
                                break;
                            } // case 34
                            case 42:
                            {
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet m = input.readMessage(
                                        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.parser(),
                                        extensionRegistry);
                                if (this.changesetsBuilder_ == null)
                                {
                                    ensureChangesetsIsMutable();
                                    this.changesets_.add(m);
                                }
                                else
                                {
                                    this.changesetsBuilder_.addMessage(m);
                                }
                                break;
                            } // case 42
                            default:
                            {
                                if (!super.parseUnknownField(input, extensionRegistry, tag))
                                {
                                    done = true; // was an endgroup tag
                                }
                                break;
                            } // default:
                        } // switch (tag)
                    } // while (!done)
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.unwrapIOException();
                }
                finally
                {
                    onChanged();
                } // finally
                return this;
            }

            private int bitField0_;

            private java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node> nodes_ =
                    java.util.Collections.emptyList();

            private void ensureNodesIsMutable()
            {
                if (!((this.bitField0_ & 0x00000001) != 0))
                {
                    this.nodes_ =
                            new java.util.ArrayList<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node>(this.nodes_);
                    this.bitField0_ |= 0x00000001;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.NodeOrBuilder> nodesBuilder_;

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            @Override
            public java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node> getNodesList()
            {
                if (this.nodesBuilder_ == null)
                {
                    return java.util.Collections.unmodifiableList(this.nodes_);
                }
                else
                {
                    return this.nodesBuilder_.getMessageList();
                }
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            @Override
            public int getNodesCount()
            {
                if (this.nodesBuilder_ == null)
                {
                    return this.nodes_.size();
                }
                else
                {
                    return this.nodesBuilder_.getCount();
                }
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node getNodes(final int index)
            {
                if (this.nodesBuilder_ == null)
                {
                    return this.nodes_.get(index);
                }
                else
                {
                    return this.nodesBuilder_.getMessage(index);
                }
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            public Builder setNodes(final int index, final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node value)
            {
                if (this.nodesBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensureNodesIsMutable();
                    this.nodes_.set(index, value);
                    onChanged();
                }
                else
                {
                    this.nodesBuilder_.setMessage(index, value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            public Builder setNodes(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.Builder builderForValue)
            {
                if (this.nodesBuilder_ == null)
                {
                    ensureNodesIsMutable();
                    this.nodes_.set(index, builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.nodesBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            public Builder addNodes(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node value)
            {
                if (this.nodesBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensureNodesIsMutable();
                    this.nodes_.add(value);
                    onChanged();
                }
                else
                {
                    this.nodesBuilder_.addMessage(value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            public Builder addNodes(final int index, final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node value)
            {
                if (this.nodesBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensureNodesIsMutable();
                    this.nodes_.add(index, value);
                    onChanged();
                }
                else
                {
                    this.nodesBuilder_.addMessage(index, value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            public Builder addNodes(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.Builder builderForValue)
            {
                if (this.nodesBuilder_ == null)
                {
                    ensureNodesIsMutable();
                    this.nodes_.add(builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.nodesBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            public Builder addNodes(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.Builder builderForValue)
            {
                if (this.nodesBuilder_ == null)
                {
                    ensureNodesIsMutable();
                    this.nodes_.add(index, builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.nodesBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            public Builder addAllNodes(
                    final java.lang.Iterable<? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node> values)
            {
                if (this.nodesBuilder_ == null)
                {
                    ensureNodesIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.nodes_);
                    onChanged();
                }
                else
                {
                    this.nodesBuilder_.addAllMessages(values);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            public Builder clearNodes()
            {
                if (this.nodesBuilder_ == null)
                {
                    this.nodes_ = java.util.Collections.emptyList();
                    this.bitField0_ = (this.bitField0_ & ~0x00000001);
                    onChanged();
                }
                else
                {
                    this.nodesBuilder_.clear();
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            public Builder removeNodes(final int index)
            {
                if (this.nodesBuilder_ == null)
                {
                    ensureNodesIsMutable();
                    this.nodes_.remove(index);
                    onChanged();
                }
                else
                {
                    this.nodesBuilder_.remove(index);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.Builder getNodesBuilder(final int index)
            {
                return internalGetNodesFieldBuilder().getBuilder(index);
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.NodeOrBuilder getNodesOrBuilder(final int index)
            {
                if (this.nodesBuilder_ == null)
                {
                    return this.nodes_.get(index);
                }
                else
                {
                    return this.nodesBuilder_.getMessageOrBuilder(index);
                }
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            @Override
            public java.util.List<
                    ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.NodeOrBuilder> getNodesOrBuilderList()
            {
                if (this.nodesBuilder_ != null)
                {
                    return this.nodesBuilder_.getMessageOrBuilderList();
                }
                else
                {
                    return java.util.Collections.unmodifiableList(this.nodes_);
                }
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.Builder addNodesBuilder()
            {
                return internalGetNodesFieldBuilder()
                        .addBuilder(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.getDefaultInstance());
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.Builder addNodesBuilder(final int index)
            {
                return internalGetNodesFieldBuilder().addBuilder(index,
                        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.getDefaultInstance());
            }

            /**
             * <code>repeated .OSMPBF.Node nodes = 1;</code>
             */
            public java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.Builder> getNodesBuilderList()
            {
                return internalGetNodesFieldBuilder().getBuilderList();
            }

            private com.google.protobuf.RepeatedFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.NodeOrBuilder> internalGetNodesFieldBuilder()
            {
                if (this.nodesBuilder_ == null)
                {
                    this.nodesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.Builder,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.NodeOrBuilder>(this.nodes_,
                                    ((this.bitField0_ & 0x00000001) != 0), getParentForChildren(), isClean());
                    this.nodes_ = null;
                }
                return this.nodesBuilder_;
            }

            private nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes dense_;

            private com.google.protobuf.SingleFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodesOrBuilder> denseBuilder_;

            /**
             * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
             * @return Whether the dense field is set.
             */
            @Override
            public boolean hasDense()
            {
                return ((this.bitField0_ & 0x00000002) != 0);
            }

            /**
             * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
             * @return The dense.
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes getDense()
            {
                if (this.denseBuilder_ == null)
                {
                    return this.dense_ == null
                            ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.getDefaultInstance()
                            : this.dense_;
                }
                else
                {
                    return this.denseBuilder_.getMessage();
                }
            }

            /**
             * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
             */
            public Builder setDense(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes value)
            {
                if (this.denseBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    this.dense_ = value;
                }
                else
                {
                    this.denseBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
             */
            public Builder setDense(
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.Builder builderForValue)
            {
                if (this.denseBuilder_ == null)
                {
                    this.dense_ = builderForValue.build();
                }
                else
                {
                    this.denseBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
             */
            public Builder mergeDense(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes value)
            {
                if (this.denseBuilder_ == null)
                {
                    if (((this.bitField0_ & 0x00000002) != 0) && this.dense_ != null
                            && this.dense_ != nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes
                                    .getDefaultInstance())
                    {
                        getDenseBuilder().mergeFrom(value);
                    }
                    else
                    {
                        this.dense_ = value;
                    }
                }
                else
                {
                    this.denseBuilder_.mergeFrom(value);
                }
                if (this.dense_ != null)
                {
                    this.bitField0_ |= 0x00000002;
                    onChanged();
                }
                return this;
            }

            /**
             * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
             */
            public Builder clearDense()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000002);
                this.dense_ = null;
                if (this.denseBuilder_ != null)
                {
                    this.denseBuilder_.dispose();
                    this.denseBuilder_ = null;
                }
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.Builder getDenseBuilder()
            {
                this.bitField0_ |= 0x00000002;
                onChanged();
                return internalGetDenseFieldBuilder().getBuilder();
            }

            /**
             * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodesOrBuilder getDenseOrBuilder()
            {
                if (this.denseBuilder_ != null)
                {
                    return this.denseBuilder_.getMessageOrBuilder();
                }
                else
                {
                    return this.dense_ == null
                            ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.getDefaultInstance()
                            : this.dense_;
                }
            }

            /**
             * <code>optional .OSMPBF.DenseNodes dense = 2;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodesOrBuilder> internalGetDenseFieldBuilder()
            {
                if (this.denseBuilder_ == null)
                {
                    this.denseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.Builder,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodesOrBuilder>(getDense(),
                                    getParentForChildren(), isClean());
                    this.dense_ = null;
                }
                return this.denseBuilder_;
            }

            private java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way> ways_ =
                    java.util.Collections.emptyList();

            private void ensureWaysIsMutable()
            {
                if (!((this.bitField0_ & 0x00000004) != 0))
                {
                    this.ways_ =
                            new java.util.ArrayList<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way>(this.ways_);
                    this.bitField0_ |= 0x00000004;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.WayOrBuilder> waysBuilder_;

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            @Override
            public java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way> getWaysList()
            {
                if (this.waysBuilder_ == null)
                {
                    return java.util.Collections.unmodifiableList(this.ways_);
                }
                else
                {
                    return this.waysBuilder_.getMessageList();
                }
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            @Override
            public int getWaysCount()
            {
                if (this.waysBuilder_ == null)
                {
                    return this.ways_.size();
                }
                else
                {
                    return this.waysBuilder_.getCount();
                }
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way getWays(final int index)
            {
                if (this.waysBuilder_ == null)
                {
                    return this.ways_.get(index);
                }
                else
                {
                    return this.waysBuilder_.getMessage(index);
                }
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            public Builder setWays(final int index, final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way value)
            {
                if (this.waysBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensureWaysIsMutable();
                    this.ways_.set(index, value);
                    onChanged();
                }
                else
                {
                    this.waysBuilder_.setMessage(index, value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            public Builder setWays(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.Builder builderForValue)
            {
                if (this.waysBuilder_ == null)
                {
                    ensureWaysIsMutable();
                    this.ways_.set(index, builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.waysBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            public Builder addWays(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way value)
            {
                if (this.waysBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensureWaysIsMutable();
                    this.ways_.add(value);
                    onChanged();
                }
                else
                {
                    this.waysBuilder_.addMessage(value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            public Builder addWays(final int index, final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way value)
            {
                if (this.waysBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensureWaysIsMutable();
                    this.ways_.add(index, value);
                    onChanged();
                }
                else
                {
                    this.waysBuilder_.addMessage(index, value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            public Builder addWays(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.Builder builderForValue)
            {
                if (this.waysBuilder_ == null)
                {
                    ensureWaysIsMutable();
                    this.ways_.add(builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.waysBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            public Builder addWays(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.Builder builderForValue)
            {
                if (this.waysBuilder_ == null)
                {
                    ensureWaysIsMutable();
                    this.ways_.add(index, builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.waysBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            public Builder addAllWays(
                    final java.lang.Iterable<? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way> values)
            {
                if (this.waysBuilder_ == null)
                {
                    ensureWaysIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.ways_);
                    onChanged();
                }
                else
                {
                    this.waysBuilder_.addAllMessages(values);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            public Builder clearWays()
            {
                if (this.waysBuilder_ == null)
                {
                    this.ways_ = java.util.Collections.emptyList();
                    this.bitField0_ = (this.bitField0_ & ~0x00000004);
                    onChanged();
                }
                else
                {
                    this.waysBuilder_.clear();
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            public Builder removeWays(final int index)
            {
                if (this.waysBuilder_ == null)
                {
                    ensureWaysIsMutable();
                    this.ways_.remove(index);
                    onChanged();
                }
                else
                {
                    this.waysBuilder_.remove(index);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.Builder getWaysBuilder(final int index)
            {
                return internalGetWaysFieldBuilder().getBuilder(index);
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.WayOrBuilder getWaysOrBuilder(final int index)
            {
                if (this.waysBuilder_ == null)
                {
                    return this.ways_.get(index);
                }
                else
                {
                    return this.waysBuilder_.getMessageOrBuilder(index);
                }
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            @Override
            public java.util.List<
                    ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.WayOrBuilder> getWaysOrBuilderList()
            {
                if (this.waysBuilder_ != null)
                {
                    return this.waysBuilder_.getMessageOrBuilderList();
                }
                else
                {
                    return java.util.Collections.unmodifiableList(this.ways_);
                }
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.Builder addWaysBuilder()
            {
                return internalGetWaysFieldBuilder()
                        .addBuilder(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.getDefaultInstance());
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.Builder addWaysBuilder(final int index)
            {
                return internalGetWaysFieldBuilder().addBuilder(index,
                        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.getDefaultInstance());
            }

            /**
             * <code>repeated .OSMPBF.Way ways = 3;</code>
             */
            public java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.Builder> getWaysBuilderList()
            {
                return internalGetWaysFieldBuilder().getBuilderList();
            }

            private com.google.protobuf.RepeatedFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.WayOrBuilder> internalGetWaysFieldBuilder()
            {
                if (this.waysBuilder_ == null)
                {
                    this.waysBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.Builder,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.WayOrBuilder>(this.ways_,
                                    ((this.bitField0_ & 0x00000004) != 0), getParentForChildren(), isClean());
                    this.ways_ = null;
                }
                return this.waysBuilder_;
            }

            private java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation> relations_ =
                    java.util.Collections.emptyList();

            private void ensureRelationsIsMutable()
            {
                if (!((this.bitField0_ & 0x00000008) != 0))
                {
                    this.relations_ = new java.util.ArrayList<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation>(
                            this.relations_);
                    this.bitField0_ |= 0x00000008;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.RelationOrBuilder> relationsBuilder_;

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            @Override
            public java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation> getRelationsList()
            {
                if (this.relationsBuilder_ == null)
                {
                    return java.util.Collections.unmodifiableList(this.relations_);
                }
                else
                {
                    return this.relationsBuilder_.getMessageList();
                }
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            @Override
            public int getRelationsCount()
            {
                if (this.relationsBuilder_ == null)
                {
                    return this.relations_.size();
                }
                else
                {
                    return this.relationsBuilder_.getCount();
                }
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation getRelations(final int index)
            {
                if (this.relationsBuilder_ == null)
                {
                    return this.relations_.get(index);
                }
                else
                {
                    return this.relationsBuilder_.getMessage(index);
                }
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            public Builder setRelations(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation value)
            {
                if (this.relationsBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensureRelationsIsMutable();
                    this.relations_.set(index, value);
                    onChanged();
                }
                else
                {
                    this.relationsBuilder_.setMessage(index, value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            public Builder setRelations(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.Builder builderForValue)
            {
                if (this.relationsBuilder_ == null)
                {
                    ensureRelationsIsMutable();
                    this.relations_.set(index, builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.relationsBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            public Builder addRelations(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation value)
            {
                if (this.relationsBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensureRelationsIsMutable();
                    this.relations_.add(value);
                    onChanged();
                }
                else
                {
                    this.relationsBuilder_.addMessage(value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            public Builder addRelations(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation value)
            {
                if (this.relationsBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensureRelationsIsMutable();
                    this.relations_.add(index, value);
                    onChanged();
                }
                else
                {
                    this.relationsBuilder_.addMessage(index, value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            public Builder addRelations(
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.Builder builderForValue)
            {
                if (this.relationsBuilder_ == null)
                {
                    ensureRelationsIsMutable();
                    this.relations_.add(builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.relationsBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            public Builder addRelations(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.Builder builderForValue)
            {
                if (this.relationsBuilder_ == null)
                {
                    ensureRelationsIsMutable();
                    this.relations_.add(index, builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.relationsBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            public Builder addAllRelations(
                    final java.lang.Iterable<? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation> values)
            {
                if (this.relationsBuilder_ == null)
                {
                    ensureRelationsIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.relations_);
                    onChanged();
                }
                else
                {
                    this.relationsBuilder_.addAllMessages(values);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            public Builder clearRelations()
            {
                if (this.relationsBuilder_ == null)
                {
                    this.relations_ = java.util.Collections.emptyList();
                    this.bitField0_ = (this.bitField0_ & ~0x00000008);
                    onChanged();
                }
                else
                {
                    this.relationsBuilder_.clear();
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            public Builder removeRelations(final int index)
            {
                if (this.relationsBuilder_ == null)
                {
                    ensureRelationsIsMutable();
                    this.relations_.remove(index);
                    onChanged();
                }
                else
                {
                    this.relationsBuilder_.remove(index);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.Builder getRelationsBuilder(final int index)
            {
                return internalGetRelationsFieldBuilder().getBuilder(index);
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.RelationOrBuilder getRelationsOrBuilder(
                    final int index)
            {
                if (this.relationsBuilder_ == null)
                {
                    return this.relations_.get(index);
                }
                else
                {
                    return this.relationsBuilder_.getMessageOrBuilder(index);
                }
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            @Override
            public java.util.List<
                    ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.RelationOrBuilder> getRelationsOrBuilderList()
            {
                if (this.relationsBuilder_ != null)
                {
                    return this.relationsBuilder_.getMessageOrBuilderList();
                }
                else
                {
                    return java.util.Collections.unmodifiableList(this.relations_);
                }
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.Builder addRelationsBuilder()
            {
                return internalGetRelationsFieldBuilder()
                        .addBuilder(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.getDefaultInstance());
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.Builder addRelationsBuilder(final int index)
            {
                return internalGetRelationsFieldBuilder().addBuilder(index,
                        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.getDefaultInstance());
            }

            /**
             * <code>repeated .OSMPBF.Relation relations = 4;</code>
             */
            public java.util.List<
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.Builder> getRelationsBuilderList()
            {
                return internalGetRelationsFieldBuilder().getBuilderList();
            }

            private com.google.protobuf.RepeatedFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.RelationOrBuilder> internalGetRelationsFieldBuilder()
            {
                if (this.relationsBuilder_ == null)
                {
                    this.relationsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.Builder,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.RelationOrBuilder>(this.relations_,
                                    ((this.bitField0_ & 0x00000008) != 0), getParentForChildren(), isClean());
                    this.relations_ = null;
                }
                return this.relationsBuilder_;
            }

            private java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet> changesets_ =
                    java.util.Collections.emptyList();

            private void ensureChangesetsIsMutable()
            {
                if (!((this.bitField0_ & 0x00000010) != 0))
                {
                    this.changesets_ =
                            new java.util.ArrayList<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet>(
                                    this.changesets_);
                    this.bitField0_ |= 0x00000010;
                }
            }

            private com.google.protobuf.RepeatedFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSetOrBuilder> changesetsBuilder_;

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            @Override
            public java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet> getChangesetsList()
            {
                if (this.changesetsBuilder_ == null)
                {
                    return java.util.Collections.unmodifiableList(this.changesets_);
                }
                else
                {
                    return this.changesetsBuilder_.getMessageList();
                }
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            @Override
            public int getChangesetsCount()
            {
                if (this.changesetsBuilder_ == null)
                {
                    return this.changesets_.size();
                }
                else
                {
                    return this.changesetsBuilder_.getCount();
                }
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet getChangesets(final int index)
            {
                if (this.changesetsBuilder_ == null)
                {
                    return this.changesets_.get(index);
                }
                else
                {
                    return this.changesetsBuilder_.getMessage(index);
                }
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            public Builder setChangesets(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet value)
            {
                if (this.changesetsBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensureChangesetsIsMutable();
                    this.changesets_.set(index, value);
                    onChanged();
                }
                else
                {
                    this.changesetsBuilder_.setMessage(index, value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            public Builder setChangesets(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.Builder builderForValue)
            {
                if (this.changesetsBuilder_ == null)
                {
                    ensureChangesetsIsMutable();
                    this.changesets_.set(index, builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.changesetsBuilder_.setMessage(index, builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            public Builder addChangesets(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet value)
            {
                if (this.changesetsBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensureChangesetsIsMutable();
                    this.changesets_.add(value);
                    onChanged();
                }
                else
                {
                    this.changesetsBuilder_.addMessage(value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            public Builder addChangesets(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet value)
            {
                if (this.changesetsBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    ensureChangesetsIsMutable();
                    this.changesets_.add(index, value);
                    onChanged();
                }
                else
                {
                    this.changesetsBuilder_.addMessage(index, value);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            public Builder addChangesets(
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.Builder builderForValue)
            {
                if (this.changesetsBuilder_ == null)
                {
                    ensureChangesetsIsMutable();
                    this.changesets_.add(builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.changesetsBuilder_.addMessage(builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            public Builder addChangesets(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.Builder builderForValue)
            {
                if (this.changesetsBuilder_ == null)
                {
                    ensureChangesetsIsMutable();
                    this.changesets_.add(index, builderForValue.build());
                    onChanged();
                }
                else
                {
                    this.changesetsBuilder_.addMessage(index, builderForValue.build());
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            public Builder addAllChangesets(final java.lang.Iterable<
                    ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet> values)
            {
                if (this.changesetsBuilder_ == null)
                {
                    ensureChangesetsIsMutable();
                    com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.changesets_);
                    onChanged();
                }
                else
                {
                    this.changesetsBuilder_.addAllMessages(values);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            public Builder clearChangesets()
            {
                if (this.changesetsBuilder_ == null)
                {
                    this.changesets_ = java.util.Collections.emptyList();
                    this.bitField0_ = (this.bitField0_ & ~0x00000010);
                    onChanged();
                }
                else
                {
                    this.changesetsBuilder_.clear();
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            public Builder removeChangesets(final int index)
            {
                if (this.changesetsBuilder_ == null)
                {
                    ensureChangesetsIsMutable();
                    this.changesets_.remove(index);
                    onChanged();
                }
                else
                {
                    this.changesetsBuilder_.remove(index);
                }
                return this;
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.Builder getChangesetsBuilder(
                    final int index)
            {
                return internalGetChangesetsFieldBuilder().getBuilder(index);
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSetOrBuilder getChangesetsOrBuilder(
                    final int index)
            {
                if (this.changesetsBuilder_ == null)
                {
                    return this.changesets_.get(index);
                }
                else
                {
                    return this.changesetsBuilder_.getMessageOrBuilder(index);
                }
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            @Override
            public java.util.List<
                    ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSetOrBuilder> getChangesetsOrBuilderList()
            {
                if (this.changesetsBuilder_ != null)
                {
                    return this.changesetsBuilder_.getMessageOrBuilderList();
                }
                else
                {
                    return java.util.Collections.unmodifiableList(this.changesets_);
                }
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.Builder addChangesetsBuilder()
            {
                return internalGetChangesetsFieldBuilder()
                        .addBuilder(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.getDefaultInstance());
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.Builder addChangesetsBuilder(
                    final int index)
            {
                return internalGetChangesetsFieldBuilder().addBuilder(index,
                        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.getDefaultInstance());
            }

            /**
             * <code>repeated .OSMPBF.ChangeSet changesets = 5;</code>
             */
            public java.util.List<
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.Builder> getChangesetsBuilderList()
            {
                return internalGetChangesetsFieldBuilder().getBuilderList();
            }

            private com.google.protobuf.RepeatedFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSetOrBuilder> internalGetChangesetsFieldBuilder()
            {
                if (this.changesetsBuilder_ == null)
                {
                    this.changesetsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.Builder,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSetOrBuilder>(this.changesets_,
                                    ((this.bitField0_ & 0x00000010) != 0), getParentForChildren(), isClean());
                    this.changesets_ = null;
                }
                return this.changesetsBuilder_;
            }

            // @@protoc_insertion_point(builder_scope:OSMPBF.PrimitiveGroup)
        }

        // @@protoc_insertion_point(class_scope:OSMPBF.PrimitiveGroup)
        private static final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup DEFAULT_INSTANCE;
        static
        {
            DEFAULT_INSTANCE = new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup();
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup getDefaultInstance()
        {
            return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<PrimitiveGroup> PARSER =
                new com.google.protobuf.AbstractParser<PrimitiveGroup>()
                {
                    @java.lang.Override
                    public PrimitiveGroup parsePartialFrom(final com.google.protobuf.CodedInputStream input,
                            final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException
                    {
                        Builder builder = newBuilder();
                        try
                        {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (com.google.protobuf.InvalidProtocolBufferException e)
                        {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (com.google.protobuf.UninitializedMessageException e)
                        {
                            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (java.io.IOException e)
                        {
                            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                                    .setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };

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

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

        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.PrimitiveGroup getDefaultInstanceForType()
        {
            return DEFAULT_INSTANCE;
        }

    }

    public interface StringTableOrBuilder extends
            // @@protoc_insertion_point(interface_extends:OSMPBF.StringTable)
            com.google.protobuf.MessageOrBuilder
    {

        /**
         * <code>repeated bytes s = 1;</code>
         * @return A list containing the s.
         */
        java.util.List<com.google.protobuf.ByteString> getSList();

        /**
         * <code>repeated bytes s = 1;</code>
         * @return The count of s.
         */
        int getSCount();

        /**
         * <code>repeated bytes s = 1;</code>
         * @param index The index of the element to return.
         * @return The s at the given index.
         */
        com.google.protobuf.ByteString getS(int index);
    }

    /**
     * <pre>
     * * String table, contains the common strings in each block.
     *
     * Note that we reserve index '0' as a delimiter, so the entry at that
     * index in the table is ALWAYS blank and unused.
     * </pre>
     *
     * Protobuf type {@code OSMPBF.StringTable}
     */
    public static final class StringTable extends com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:OSMPBF.StringTable)
            StringTableOrBuilder
    {
        private static final long serialVersionUID = 0L;
        static
        {
            com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                    com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 31, /* patch= */ 1,
                    /* suffix= */ "", StringTable.class.getName());
        }

        // Use StringTable.newBuilder() to construct.
        private StringTable(final com.google.protobuf.GeneratedMessage.Builder<?> builder)
        {
            super(builder);
        }

        private StringTable()
        {
            this.s_ = emptyList(com.google.protobuf.ByteString.class);
        }

        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_StringTable_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_StringTable_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.class,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.Builder.class);
        }

        public static final int S_FIELD_NUMBER = 1;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.ProtobufList<com.google.protobuf.ByteString> s_ =
                emptyList(com.google.protobuf.ByteString.class);

        /**
         * <code>repeated bytes s = 1;</code>
         * @return A list containing the s.
         */
        @java.lang.Override
        public java.util.List<com.google.protobuf.ByteString> getSList()
        {
            return this.s_;
        }

        /**
         * <code>repeated bytes s = 1;</code>
         * @return The count of s.
         */
        @Override
        public int getSCount()
        {
            return this.s_.size();
        }

        /**
         * <code>repeated bytes s = 1;</code>
         * @param index The index of the element to return.
         * @return The s at the given index.
         */
        @Override
        public com.google.protobuf.ByteString getS(final int index)
        {
            return this.s_.get(index);
        }

        private byte memoizedIsInitialized = -1;

        @java.lang.Override
        public final boolean isInitialized()
        {
            byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1)
                return true;
            if (isInitialized == 0)
                return false;

            this.memoizedIsInitialized = 1;
            return true;
        }

        @java.lang.Override
        public void writeTo(final com.google.protobuf.CodedOutputStream output) throws java.io.IOException
        {
            for (int i = 0; i < this.s_.size(); i++)
            {
                output.writeBytes(1, this.s_.get(i));
            }
            getUnknownFields().writeTo(output);
        }

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

            size = 0;
            {
                int dataSize = 0;
                for (int i = 0; i < this.s_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeBytesSizeNoTag(this.s_.get(i));
                }
                size += dataSize;
                size += 1 * getSList().size();
            }
            size += getUnknownFields().getSerializedSize();
            this.memoizedSize = size;
            return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj)
        {
            if (obj == this)
            {
                return true;
            }
            if (!(obj instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable))
            {
                return super.equals(obj);
            }
            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable other =
                    (nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable) obj;

            if (!getSList().equals(other.getSList()))
                return false;
            if (!getUnknownFields().equals(other.getUnknownFields()))
                return false;
            return true;
        }

        @java.lang.Override
        public int hashCode()
        {
            if (this.memoizedHashCode != 0)
            {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = (19 * hash) + getDescriptor().hashCode();
            if (getSCount() > 0)
            {
                hash = (37 * hash) + S_FIELD_NUMBER;
                hash = (53 * hash) + getSList().hashCode();
            }
            hash = (29 * hash) + getUnknownFields().hashCode();
            this.memoizedHashCode = hash;
            return hash;
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable parseFrom(
                final java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable parseFrom(
                final java.nio.ByteBuffer data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable parseFrom(
                final com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable parseFrom(
                final com.google.protobuf.ByteString data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable parseFrom(final byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable parseFrom(final byte[] data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable parseFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable parseFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable parseDelimitedFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable parseDelimitedFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable parseFrom(
                final com.google.protobuf.CodedInputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable parseFrom(
                final com.google.protobuf.CodedInputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        @java.lang.Override
        public Builder newBuilderForType()
        {
            return newBuilder();
        }

        public static Builder newBuilder()
        {
            return DEFAULT_INSTANCE.toBuilder();
        }

        public static Builder newBuilder(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable prototype)
        {
            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }

        @java.lang.Override
        public Builder toBuilder()
        {
            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
        }

        @java.lang.Override
        protected Builder newBuilderForType(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
        {
            Builder builder = new Builder(parent);
            return builder;
        }

        /**
         * <pre>
         * * String table, contains the common strings in each block.
         *
         * Note that we reserve index '0' as a delimiter, so the entry at that
         * index in the table is ALWAYS blank and unused.
         * </pre>
         *
         * Protobuf type {@code OSMPBF.StringTable}
         */
        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:OSMPBF.StringTable)
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTableOrBuilder
        {
            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_StringTable_descriptor;
            }

            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_StringTable_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.class,
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.Builder.class);
            }

            // Construct using nl.tudelft.simulation.dsol.animation.gis.osm.pbf.Osmformat.StringTable.newBuilder()
            private Builder()
            {

            }

            private Builder(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
            {
                super(parent);

            }

            @java.lang.Override
            public Builder clear()
            {
                super.clear();
                this.bitField0_ = 0;
                this.s_ = emptyList(com.google.protobuf.ByteString.class);
                return this;
            }

            @java.lang.Override
            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_StringTable_descriptor;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable getDefaultInstanceForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.getDefaultInstance();
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable build()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable result = buildPartial();
                if (!result.isInitialized())
                {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable buildPartial()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable result =
                        new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable(this);
                if (this.bitField0_ != 0)
                {
                    buildPartial0(result);
                }
                onBuilt();
                return result;
            }

            private void buildPartial0(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable result)
            {
                int from_bitField0_ = this.bitField0_;
                if (((from_bitField0_ & 0x00000001) != 0))
                {
                    this.s_.makeImmutable();
                    result.s_ = this.s_;
                }
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.Message other)
            {
                if (other instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable)
                {
                    return mergeFrom((nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable) other);
                }
                else
                {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable other)
            {
                if (other == nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable.getDefaultInstance())
                    return this;
                if (!other.s_.isEmpty())
                {
                    if (this.s_.isEmpty())
                    {
                        this.s_ = other.s_;
                        this.s_.makeImmutable();
                        this.bitField0_ |= 0x00000001;
                    }
                    else
                    {
                        ensureSIsMutable();
                        this.s_.addAll(other.s_);
                    }
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                onChanged();
                return this;
            }

            @java.lang.Override
            public final boolean isInitialized()
            {
                return true;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
            {
                if (extensionRegistry == null)
                {
                    throw new java.lang.NullPointerException();
                }
                try
                {
                    boolean done = false;
                    while (!done)
                    {
                        int tag = input.readTag();
                        switch (tag)
                        {
                            case 0:
                                done = true;
                                break;
                            case 10:
                            {
                                com.google.protobuf.ByteString v = input.readBytes();
                                ensureSIsMutable();
                                this.s_.add(v);
                                break;
                            } // case 10
                            default:
                            {
                                if (!super.parseUnknownField(input, extensionRegistry, tag))
                                {
                                    done = true; // was an endgroup tag
                                }
                                break;
                            } // default:
                        } // switch (tag)
                    } // while (!done)
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.unwrapIOException();
                }
                finally
                {
                    onChanged();
                } // finally
                return this;
            }

            private int bitField0_;

            private com.google.protobuf.Internal.ProtobufList<com.google.protobuf.ByteString> s_ =
                    emptyList(com.google.protobuf.ByteString.class);

            private void ensureSIsMutable()
            {
                if (!this.s_.isModifiable())
                {
                    this.s_ = makeMutableCopy(this.s_);
                }
                this.bitField0_ |= 0x00000001;
            }

            /**
             * <code>repeated bytes s = 1;</code>
             * @return A list containing the s.
             */
            @Override
            public java.util.List<com.google.protobuf.ByteString> getSList()
            {
                this.s_.makeImmutable();
                return this.s_;
            }

            /**
             * <code>repeated bytes s = 1;</code>
             * @return The count of s.
             */
            @Override
            public int getSCount()
            {
                return this.s_.size();
            }

            /**
             * <code>repeated bytes s = 1;</code>
             * @param index The index of the element to return.
             * @return The s at the given index.
             */
            @Override
            public com.google.protobuf.ByteString getS(final int index)
            {
                return this.s_.get(index);
            }

            /**
             * <code>repeated bytes s = 1;</code>
             * @param index The index to set the value at.
             * @param value The s to set.
             * @return This builder for chaining.
             */
            public Builder setS(final int index, final com.google.protobuf.ByteString value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                ensureSIsMutable();
                this.s_.set(index, value);
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>repeated bytes s = 1;</code>
             * @param value The s to add.
             * @return This builder for chaining.
             */
            public Builder addS(final com.google.protobuf.ByteString value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                ensureSIsMutable();
                this.s_.add(value);
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>repeated bytes s = 1;</code>
             * @param values The s to add.
             * @return This builder for chaining.
             */
            public Builder addAllS(final java.lang.Iterable<? extends com.google.protobuf.ByteString> values)
            {
                ensureSIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.s_);
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>repeated bytes s = 1;</code>
             * @return This builder for chaining.
             */
            public Builder clearS()
            {
                this.s_ = emptyList(com.google.protobuf.ByteString.class);
                this.bitField0_ = (this.bitField0_ & ~0x00000001);
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:OSMPBF.StringTable)
        }

        // @@protoc_insertion_point(class_scope:OSMPBF.StringTable)
        private static final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable DEFAULT_INSTANCE;
        static
        {
            DEFAULT_INSTANCE = new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable();
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable getDefaultInstance()
        {
            return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<StringTable> PARSER =
                new com.google.protobuf.AbstractParser<StringTable>()
                {
                    @java.lang.Override
                    public StringTable parsePartialFrom(final com.google.protobuf.CodedInputStream input,
                            final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException
                    {
                        Builder builder = newBuilder();
                        try
                        {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (com.google.protobuf.InvalidProtocolBufferException e)
                        {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (com.google.protobuf.UninitializedMessageException e)
                        {
                            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (java.io.IOException e)
                        {
                            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                                    .setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };

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

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

        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.StringTable getDefaultInstanceForType()
        {
            return DEFAULT_INSTANCE;
        }

    }

    public interface InfoOrBuilder extends
            // @@protoc_insertion_point(interface_extends:OSMPBF.Info)
            com.google.protobuf.MessageOrBuilder
    {

        /**
         * <code>optional int32 version = 1 [default = -1];</code>
         * @return Whether the version field is set.
         */
        boolean hasVersion();

        /**
         * <code>optional int32 version = 1 [default = -1];</code>
         * @return The version.
         */
        int getVersion();

        /**
         * <code>optional int64 timestamp = 2;</code>
         * @return Whether the timestamp field is set.
         */
        boolean hasTimestamp();

        /**
         * <code>optional int64 timestamp = 2;</code>
         * @return The timestamp.
         */
        long getTimestamp();

        /**
         * <code>optional int64 changeset = 3;</code>
         * @return Whether the changeset field is set.
         */
        boolean hasChangeset();

        /**
         * <code>optional int64 changeset = 3;</code>
         * @return The changeset.
         */
        long getChangeset();

        /**
         * <code>optional int32 uid = 4;</code>
         * @return Whether the uid field is set.
         */
        boolean hasUid();

        /**
         * <code>optional int32 uid = 4;</code>
         * @return The uid.
         */
        int getUid();

        /**
         * <pre>
         * String IDs
         * </pre>
         *
         * <code>optional uint32 user_sid = 5;</code>
         * @return Whether the userSid field is set.
         */
        boolean hasUserSid();

        /**
         * <pre>
         * String IDs
         * </pre>
         *
         * <code>optional uint32 user_sid = 5;</code>
         * @return The userSid.
         */
        int getUserSid();

        /**
         * <pre>
         * The visible flag is used to store history information. It indicates that
         * the current object version has been created by a delete operation on the
         * OSM API.
         * When a writer sets this flag, it MUST add a required_features tag with
         * value "HistoricalInformation" to the HeaderBlock.
         * If this flag is not available for some object it MUST be assumed to be
         * true if the file has the required_features tag "HistoricalInformation"
         * set.
         * </pre>
         *
         * <code>optional bool visible = 6;</code>
         * @return Whether the visible field is set.
         */
        boolean hasVisible();

        /**
         * <pre>
         * The visible flag is used to store history information. It indicates that
         * the current object version has been created by a delete operation on the
         * OSM API.
         * When a writer sets this flag, it MUST add a required_features tag with
         * value "HistoricalInformation" to the HeaderBlock.
         * If this flag is not available for some object it MUST be assumed to be
         * true if the file has the required_features tag "HistoricalInformation"
         * set.
         * </pre>
         *
         * <code>optional bool visible = 6;</code>
         * @return The visible.
         */
        boolean getVisible();
    }

    /**
     * <pre>
     * Optional metadata that may be included into each primitive.
     * </pre>
     *
     * Protobuf type {@code OSMPBF.Info}
     */
    public static final class Info extends com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:OSMPBF.Info)
            InfoOrBuilder
    {
        private static final long serialVersionUID = 0L;
        static
        {
            com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                    com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 31, /* patch= */ 1,
                    /* suffix= */ "", Info.class.getName());
        }

        // Use Info.newBuilder() to construct.
        private Info(final com.google.protobuf.GeneratedMessage.Builder<?> builder)
        {
            super(builder);
        }

        private Info()
        {
            this.version_ = -1;
        }

        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Info_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Info_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.class,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder.class);
        }

        private int bitField0_;

        public static final int VERSION_FIELD_NUMBER = 1;

        private int version_ = -1;

        /**
         * <code>optional int32 version = 1 [default = -1];</code>
         * @return Whether the version field is set.
         */
        @java.lang.Override
        public boolean hasVersion()
        {
            return ((this.bitField0_ & 0x00000001) != 0);
        }

        /**
         * <code>optional int32 version = 1 [default = -1];</code>
         * @return The version.
         */
        @java.lang.Override
        public int getVersion()
        {
            return this.version_;
        }

        public static final int TIMESTAMP_FIELD_NUMBER = 2;

        private long timestamp_ = 0L;

        /**
         * <code>optional int64 timestamp = 2;</code>
         * @return Whether the timestamp field is set.
         */
        @java.lang.Override
        public boolean hasTimestamp()
        {
            return ((this.bitField0_ & 0x00000002) != 0);
        }

        /**
         * <code>optional int64 timestamp = 2;</code>
         * @return The timestamp.
         */
        @java.lang.Override
        public long getTimestamp()
        {
            return this.timestamp_;
        }

        public static final int CHANGESET_FIELD_NUMBER = 3;

        private long changeset_ = 0L;

        /**
         * <code>optional int64 changeset = 3;</code>
         * @return Whether the changeset field is set.
         */
        @java.lang.Override
        public boolean hasChangeset()
        {
            return ((this.bitField0_ & 0x00000004) != 0);
        }

        /**
         * <code>optional int64 changeset = 3;</code>
         * @return The changeset.
         */
        @java.lang.Override
        public long getChangeset()
        {
            return this.changeset_;
        }

        public static final int UID_FIELD_NUMBER = 4;

        private int uid_ = 0;

        /**
         * <code>optional int32 uid = 4;</code>
         * @return Whether the uid field is set.
         */
        @java.lang.Override
        public boolean hasUid()
        {
            return ((this.bitField0_ & 0x00000008) != 0);
        }

        /**
         * <code>optional int32 uid = 4;</code>
         * @return The uid.
         */
        @java.lang.Override
        public int getUid()
        {
            return this.uid_;
        }

        public static final int USER_SID_FIELD_NUMBER = 5;

        private int userSid_ = 0;

        /**
         * <pre>
         * String IDs
         * </pre>
         *
         * <code>optional uint32 user_sid = 5;</code>
         * @return Whether the userSid field is set.
         */
        @java.lang.Override
        public boolean hasUserSid()
        {
            return ((this.bitField0_ & 0x00000010) != 0);
        }

        /**
         * <pre>
         * String IDs
         * </pre>
         *
         * <code>optional uint32 user_sid = 5;</code>
         * @return The userSid.
         */
        @java.lang.Override
        public int getUserSid()
        {
            return this.userSid_;
        }

        public static final int VISIBLE_FIELD_NUMBER = 6;

        private boolean visible_ = false;

        /**
         * <pre>
         * The visible flag is used to store history information. It indicates that
         * the current object version has been created by a delete operation on the
         * OSM API.
         * When a writer sets this flag, it MUST add a required_features tag with
         * value "HistoricalInformation" to the HeaderBlock.
         * If this flag is not available for some object it MUST be assumed to be
         * true if the file has the required_features tag "HistoricalInformation"
         * set.
         * </pre>
         *
         * <code>optional bool visible = 6;</code>
         * @return Whether the visible field is set.
         */
        @java.lang.Override
        public boolean hasVisible()
        {
            return ((this.bitField0_ & 0x00000020) != 0);
        }

        /**
         * <pre>
         * The visible flag is used to store history information. It indicates that
         * the current object version has been created by a delete operation on the
         * OSM API.
         * When a writer sets this flag, it MUST add a required_features tag with
         * value "HistoricalInformation" to the HeaderBlock.
         * If this flag is not available for some object it MUST be assumed to be
         * true if the file has the required_features tag "HistoricalInformation"
         * set.
         * </pre>
         *
         * <code>optional bool visible = 6;</code>
         * @return The visible.
         */
        @java.lang.Override
        public boolean getVisible()
        {
            return this.visible_;
        }

        private byte memoizedIsInitialized = -1;

        @java.lang.Override
        public final boolean isInitialized()
        {
            byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1)
                return true;
            if (isInitialized == 0)
                return false;

            this.memoizedIsInitialized = 1;
            return true;
        }

        @java.lang.Override
        public void writeTo(final com.google.protobuf.CodedOutputStream output) throws java.io.IOException
        {
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                output.writeInt32(1, this.version_);
            }
            if (((this.bitField0_ & 0x00000002) != 0))
            {
                output.writeInt64(2, this.timestamp_);
            }
            if (((this.bitField0_ & 0x00000004) != 0))
            {
                output.writeInt64(3, this.changeset_);
            }
            if (((this.bitField0_ & 0x00000008) != 0))
            {
                output.writeInt32(4, this.uid_);
            }
            if (((this.bitField0_ & 0x00000010) != 0))
            {
                output.writeUInt32(5, this.userSid_);
            }
            if (((this.bitField0_ & 0x00000020) != 0))
            {
                output.writeBool(6, this.visible_);
            }
            getUnknownFields().writeTo(output);
        }

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

            size = 0;
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeInt32Size(1, this.version_);
            }
            if (((this.bitField0_ & 0x00000002) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeInt64Size(2, this.timestamp_);
            }
            if (((this.bitField0_ & 0x00000004) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeInt64Size(3, this.changeset_);
            }
            if (((this.bitField0_ & 0x00000008) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeInt32Size(4, this.uid_);
            }
            if (((this.bitField0_ & 0x00000010) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeUInt32Size(5, this.userSid_);
            }
            if (((this.bitField0_ & 0x00000020) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeBoolSize(6, this.visible_);
            }
            size += getUnknownFields().getSerializedSize();
            this.memoizedSize = size;
            return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj)
        {
            if (obj == this)
            {
                return true;
            }
            if (!(obj instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info))
            {
                return super.equals(obj);
            }
            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info other =
                    (nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info) obj;

            if (hasVersion() != other.hasVersion())
                return false;
            if (hasVersion())
            {
                if (getVersion() != other.getVersion())
                    return false;
            }
            if (hasTimestamp() != other.hasTimestamp())
                return false;
            if (hasTimestamp())
            {
                if (getTimestamp() != other.getTimestamp())
                    return false;
            }
            if (hasChangeset() != other.hasChangeset())
                return false;
            if (hasChangeset())
            {
                if (getChangeset() != other.getChangeset())
                    return false;
            }
            if (hasUid() != other.hasUid())
                return false;
            if (hasUid())
            {
                if (getUid() != other.getUid())
                    return false;
            }
            if (hasUserSid() != other.hasUserSid())
                return false;
            if (hasUserSid())
            {
                if (getUserSid() != other.getUserSid())
                    return false;
            }
            if (hasVisible() != other.hasVisible())
                return false;
            if (hasVisible())
            {
                if (getVisible() != other.getVisible())
                    return false;
            }
            if (!getUnknownFields().equals(other.getUnknownFields()))
                return false;
            return true;
        }

        @java.lang.Override
        public int hashCode()
        {
            if (this.memoizedHashCode != 0)
            {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = (19 * hash) + getDescriptor().hashCode();
            if (hasVersion())
            {
                hash = (37 * hash) + VERSION_FIELD_NUMBER;
                hash = (53 * hash) + getVersion();
            }
            if (hasTimestamp())
            {
                hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getTimestamp());
            }
            if (hasChangeset())
            {
                hash = (37 * hash) + CHANGESET_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getChangeset());
            }
            if (hasUid())
            {
                hash = (37 * hash) + UID_FIELD_NUMBER;
                hash = (53 * hash) + getUid();
            }
            if (hasUserSid())
            {
                hash = (37 * hash) + USER_SID_FIELD_NUMBER;
                hash = (53 * hash) + getUserSid();
            }
            if (hasVisible())
            {
                hash = (37 * hash) + VISIBLE_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getVisible());
            }
            hash = (29 * hash) + getUnknownFields().hashCode();
            this.memoizedHashCode = hash;
            return hash;
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info parseFrom(final java.nio.ByteBuffer data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info parseFrom(final java.nio.ByteBuffer data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info parseFrom(
                final com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info parseFrom(
                final com.google.protobuf.ByteString data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info parseFrom(final byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info parseFrom(final byte[] data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info parseFrom(final java.io.InputStream input)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info parseFrom(final java.io.InputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info parseDelimitedFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info parseDelimitedFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info parseFrom(
                final com.google.protobuf.CodedInputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info parseFrom(
                final com.google.protobuf.CodedInputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        @java.lang.Override
        public Builder newBuilderForType()
        {
            return newBuilder();
        }

        public static Builder newBuilder()
        {
            return DEFAULT_INSTANCE.toBuilder();
        }

        public static Builder newBuilder(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info prototype)
        {
            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }

        @java.lang.Override
        public Builder toBuilder()
        {
            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
        }

        @java.lang.Override
        protected Builder newBuilderForType(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
        {
            Builder builder = new Builder(parent);
            return builder;
        }

        /**
         * <pre>
         * Optional metadata that may be included into each primitive.
         * </pre>
         *
         * Protobuf type {@code OSMPBF.Info}
         */
        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:OSMPBF.Info)
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder
        {
            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Info_descriptor;
            }

            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Info_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.class,
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder.class);
            }

            // Construct using nl.tudelft.simulation.dsol.animation.gis.osm.pbf.Osmformat.Info.newBuilder()
            private Builder()
            {

            }

            private Builder(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
            {
                super(parent);

            }

            @java.lang.Override
            public Builder clear()
            {
                super.clear();
                this.bitField0_ = 0;
                this.version_ = -1;
                this.timestamp_ = 0L;
                this.changeset_ = 0L;
                this.uid_ = 0;
                this.userSid_ = 0;
                this.visible_ = false;
                return this;
            }

            @java.lang.Override
            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Info_descriptor;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info getDefaultInstanceForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance();
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info build()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info result = buildPartial();
                if (!result.isInitialized())
                {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info buildPartial()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info result =
                        new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info(this);
                if (this.bitField0_ != 0)
                {
                    buildPartial0(result);
                }
                onBuilt();
                return result;
            }

            private void buildPartial0(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info result)
            {
                int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) != 0))
                {
                    result.version_ = this.version_;
                    to_bitField0_ |= 0x00000001;
                }
                if (((from_bitField0_ & 0x00000002) != 0))
                {
                    result.timestamp_ = this.timestamp_;
                    to_bitField0_ |= 0x00000002;
                }
                if (((from_bitField0_ & 0x00000004) != 0))
                {
                    result.changeset_ = this.changeset_;
                    to_bitField0_ |= 0x00000004;
                }
                if (((from_bitField0_ & 0x00000008) != 0))
                {
                    result.uid_ = this.uid_;
                    to_bitField0_ |= 0x00000008;
                }
                if (((from_bitField0_ & 0x00000010) != 0))
                {
                    result.userSid_ = this.userSid_;
                    to_bitField0_ |= 0x00000010;
                }
                if (((from_bitField0_ & 0x00000020) != 0))
                {
                    result.visible_ = this.visible_;
                    to_bitField0_ |= 0x00000020;
                }
                result.bitField0_ |= to_bitField0_;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.Message other)
            {
                if (other instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info)
                {
                    return mergeFrom((nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info) other);
                }
                else
                {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info other)
            {
                if (other == nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance())
                    return this;
                if (other.hasVersion())
                {
                    setVersion(other.getVersion());
                }
                if (other.hasTimestamp())
                {
                    setTimestamp(other.getTimestamp());
                }
                if (other.hasChangeset())
                {
                    setChangeset(other.getChangeset());
                }
                if (other.hasUid())
                {
                    setUid(other.getUid());
                }
                if (other.hasUserSid())
                {
                    setUserSid(other.getUserSid());
                }
                if (other.hasVisible())
                {
                    setVisible(other.getVisible());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                onChanged();
                return this;
            }

            @java.lang.Override
            public final boolean isInitialized()
            {
                return true;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
            {
                if (extensionRegistry == null)
                {
                    throw new java.lang.NullPointerException();
                }
                try
                {
                    boolean done = false;
                    while (!done)
                    {
                        int tag = input.readTag();
                        switch (tag)
                        {
                            case 0:
                                done = true;
                                break;
                            case 8:
                            {
                                this.version_ = input.readInt32();
                                this.bitField0_ |= 0x00000001;
                                break;
                            } // case 8
                            case 16:
                            {
                                this.timestamp_ = input.readInt64();
                                this.bitField0_ |= 0x00000002;
                                break;
                            } // case 16
                            case 24:
                            {
                                this.changeset_ = input.readInt64();
                                this.bitField0_ |= 0x00000004;
                                break;
                            } // case 24
                            case 32:
                            {
                                this.uid_ = input.readInt32();
                                this.bitField0_ |= 0x00000008;
                                break;
                            } // case 32
                            case 40:
                            {
                                this.userSid_ = input.readUInt32();
                                this.bitField0_ |= 0x00000010;
                                break;
                            } // case 40
                            case 48:
                            {
                                this.visible_ = input.readBool();
                                this.bitField0_ |= 0x00000020;
                                break;
                            } // case 48
                            default:
                            {
                                if (!super.parseUnknownField(input, extensionRegistry, tag))
                                {
                                    done = true; // was an endgroup tag
                                }
                                break;
                            } // default:
                        } // switch (tag)
                    } // while (!done)
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.unwrapIOException();
                }
                finally
                {
                    onChanged();
                } // finally
                return this;
            }

            private int bitField0_;

            private int version_ = -1;

            /**
             * <code>optional int32 version = 1 [default = -1];</code>
             * @return Whether the version field is set.
             */
            @java.lang.Override
            public boolean hasVersion()
            {
                return ((this.bitField0_ & 0x00000001) != 0);
            }

            /**
             * <code>optional int32 version = 1 [default = -1];</code>
             * @return The version.
             */
            @java.lang.Override
            public int getVersion()
            {
                return this.version_;
            }

            /**
             * <code>optional int32 version = 1 [default = -1];</code>
             * @param value The version to set.
             * @return This builder for chaining.
             */
            public Builder setVersion(final int value)
            {

                this.version_ = value;
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>optional int32 version = 1 [default = -1];</code>
             * @return This builder for chaining.
             */
            public Builder clearVersion()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000001);
                this.version_ = -1;
                onChanged();
                return this;
            }

            private long timestamp_;

            /**
             * <code>optional int64 timestamp = 2;</code>
             * @return Whether the timestamp field is set.
             */
            @java.lang.Override
            public boolean hasTimestamp()
            {
                return ((this.bitField0_ & 0x00000002) != 0);
            }

            /**
             * <code>optional int64 timestamp = 2;</code>
             * @return The timestamp.
             */
            @java.lang.Override
            public long getTimestamp()
            {
                return this.timestamp_;
            }

            /**
             * <code>optional int64 timestamp = 2;</code>
             * @param value The timestamp to set.
             * @return This builder for chaining.
             */
            public Builder setTimestamp(final long value)
            {

                this.timestamp_ = value;
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <code>optional int64 timestamp = 2;</code>
             * @return This builder for chaining.
             */
            public Builder clearTimestamp()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000002);
                this.timestamp_ = 0L;
                onChanged();
                return this;
            }

            private long changeset_;

            /**
             * <code>optional int64 changeset = 3;</code>
             * @return Whether the changeset field is set.
             */
            @java.lang.Override
            public boolean hasChangeset()
            {
                return ((this.bitField0_ & 0x00000004) != 0);
            }

            /**
             * <code>optional int64 changeset = 3;</code>
             * @return The changeset.
             */
            @java.lang.Override
            public long getChangeset()
            {
                return this.changeset_;
            }

            /**
             * <code>optional int64 changeset = 3;</code>
             * @param value The changeset to set.
             * @return This builder for chaining.
             */
            public Builder setChangeset(final long value)
            {

                this.changeset_ = value;
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <code>optional int64 changeset = 3;</code>
             * @return This builder for chaining.
             */
            public Builder clearChangeset()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000004);
                this.changeset_ = 0L;
                onChanged();
                return this;
            }

            private int uid_;

            /**
             * <code>optional int32 uid = 4;</code>
             * @return Whether the uid field is set.
             */
            @java.lang.Override
            public boolean hasUid()
            {
                return ((this.bitField0_ & 0x00000008) != 0);
            }

            /**
             * <code>optional int32 uid = 4;</code>
             * @return The uid.
             */
            @java.lang.Override
            public int getUid()
            {
                return this.uid_;
            }

            /**
             * <code>optional int32 uid = 4;</code>
             * @param value The uid to set.
             * @return This builder for chaining.
             */
            public Builder setUid(final int value)
            {

                this.uid_ = value;
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <code>optional int32 uid = 4;</code>
             * @return This builder for chaining.
             */
            public Builder clearUid()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000008);
                this.uid_ = 0;
                onChanged();
                return this;
            }

            private int userSid_;

            /**
             * <pre>
             * String IDs
             * </pre>
             *
             * <code>optional uint32 user_sid = 5;</code>
             * @return Whether the userSid field is set.
             */
            @java.lang.Override
            public boolean hasUserSid()
            {
                return ((this.bitField0_ & 0x00000010) != 0);
            }

            /**
             * <pre>
             * String IDs
             * </pre>
             *
             * <code>optional uint32 user_sid = 5;</code>
             * @return The userSid.
             */
            @java.lang.Override
            public int getUserSid()
            {
                return this.userSid_;
            }

            /**
             * <pre>
             * String IDs
             * </pre>
             *
             * <code>optional uint32 user_sid = 5;</code>
             * @param value The userSid to set.
             * @return This builder for chaining.
             */
            public Builder setUserSid(final int value)
            {

                this.userSid_ = value;
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * String IDs
             * </pre>
             *
             * <code>optional uint32 user_sid = 5;</code>
             * @return This builder for chaining.
             */
            public Builder clearUserSid()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000010);
                this.userSid_ = 0;
                onChanged();
                return this;
            }

            private boolean visible_;

            /**
             * <pre>
             * The visible flag is used to store history information. It indicates that
             * the current object version has been created by a delete operation on the
             * OSM API.
             * When a writer sets this flag, it MUST add a required_features tag with
             * value "HistoricalInformation" to the HeaderBlock.
             * If this flag is not available for some object it MUST be assumed to be
             * true if the file has the required_features tag "HistoricalInformation"
             * set.
             * </pre>
             *
             * <code>optional bool visible = 6;</code>
             * @return Whether the visible field is set.
             */
            @java.lang.Override
            public boolean hasVisible()
            {
                return ((this.bitField0_ & 0x00000020) != 0);
            }

            /**
             * <pre>
             * The visible flag is used to store history information. It indicates that
             * the current object version has been created by a delete operation on the
             * OSM API.
             * When a writer sets this flag, it MUST add a required_features tag with
             * value "HistoricalInformation" to the HeaderBlock.
             * If this flag is not available for some object it MUST be assumed to be
             * true if the file has the required_features tag "HistoricalInformation"
             * set.
             * </pre>
             *
             * <code>optional bool visible = 6;</code>
             * @return The visible.
             */
            @java.lang.Override
            public boolean getVisible()
            {
                return this.visible_;
            }

            /**
             * <pre>
             * The visible flag is used to store history information. It indicates that
             * the current object version has been created by a delete operation on the
             * OSM API.
             * When a writer sets this flag, it MUST add a required_features tag with
             * value "HistoricalInformation" to the HeaderBlock.
             * If this flag is not available for some object it MUST be assumed to be
             * true if the file has the required_features tag "HistoricalInformation"
             * set.
             * </pre>
             *
             * <code>optional bool visible = 6;</code>
             * @param value The visible to set.
             * @return This builder for chaining.
             */
            public Builder setVisible(final boolean value)
            {

                this.visible_ = value;
                this.bitField0_ |= 0x00000020;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * The visible flag is used to store history information. It indicates that
             * the current object version has been created by a delete operation on the
             * OSM API.
             * When a writer sets this flag, it MUST add a required_features tag with
             * value "HistoricalInformation" to the HeaderBlock.
             * If this flag is not available for some object it MUST be assumed to be
             * true if the file has the required_features tag "HistoricalInformation"
             * set.
             * </pre>
             *
             * <code>optional bool visible = 6;</code>
             * @return This builder for chaining.
             */
            public Builder clearVisible()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000020);
                this.visible_ = false;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:OSMPBF.Info)
        }

        // @@protoc_insertion_point(class_scope:OSMPBF.Info)
        private static final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info DEFAULT_INSTANCE;
        static
        {
            DEFAULT_INSTANCE = new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info();
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info getDefaultInstance()
        {
            return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<Info> PARSER = new com.google.protobuf.AbstractParser<Info>()
        {
            @java.lang.Override
            public Info parsePartialFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws com.google.protobuf.InvalidProtocolBufferException
            {
                Builder builder = newBuilder();
                try
                {
                    builder.mergeFrom(input, extensionRegistry);
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.setUnfinishedMessage(builder.buildPartial());
                }
                catch (com.google.protobuf.UninitializedMessageException e)
                {
                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                }
                catch (java.io.IOException e)
                {
                    throw new com.google.protobuf.InvalidProtocolBufferException(e)
                            .setUnfinishedMessage(builder.buildPartial());
                }
                return builder.buildPartial();
            }
        };

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

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

        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info getDefaultInstanceForType()
        {
            return DEFAULT_INSTANCE;
        }

    }

    public interface DenseInfoOrBuilder extends
            // @@protoc_insertion_point(interface_extends:OSMPBF.DenseInfo)
            com.google.protobuf.MessageOrBuilder
    {

        /**
         * <code>repeated int32 version = 1 [packed = true];</code>
         * @return A list containing the version.
         */
        java.util.List<java.lang.Integer> getVersionList();

        /**
         * <code>repeated int32 version = 1 [packed = true];</code>
         * @return The count of version.
         */
        int getVersionCount();

        /**
         * <code>repeated int32 version = 1 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The version at the given index.
         */
        int getVersion(int index);

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 timestamp = 2 [packed = true];</code>
         * @return A list containing the timestamp.
         */
        java.util.List<java.lang.Long> getTimestampList();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 timestamp = 2 [packed = true];</code>
         * @return The count of timestamp.
         */
        int getTimestampCount();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 timestamp = 2 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The timestamp at the given index.
         */
        long getTimestamp(int index);

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 changeset = 3 [packed = true];</code>
         * @return A list containing the changeset.
         */
        java.util.List<java.lang.Long> getChangesetList();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 changeset = 3 [packed = true];</code>
         * @return The count of changeset.
         */
        int getChangesetCount();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 changeset = 3 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The changeset at the given index.
         */
        long getChangeset(int index);

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint32 uid = 4 [packed = true];</code>
         * @return A list containing the uid.
         */
        java.util.List<java.lang.Integer> getUidList();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint32 uid = 4 [packed = true];</code>
         * @return The count of uid.
         */
        int getUidCount();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint32 uid = 4 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The uid at the given index.
         */
        int getUid(int index);

        /**
         * <pre>
         * String IDs for usernames. DELTA coded
         * </pre>
         *
         * <code>repeated sint32 user_sid = 5 [packed = true];</code>
         * @return A list containing the userSid.
         */
        java.util.List<java.lang.Integer> getUserSidList();

        /**
         * <pre>
         * String IDs for usernames. DELTA coded
         * </pre>
         *
         * <code>repeated sint32 user_sid = 5 [packed = true];</code>
         * @return The count of userSid.
         */
        int getUserSidCount();

        /**
         * <pre>
         * String IDs for usernames. DELTA coded
         * </pre>
         *
         * <code>repeated sint32 user_sid = 5 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The userSid at the given index.
         */
        int getUserSid(int index);

        /**
         * <pre>
         * The visible flag is used to store history information. It indicates that
         * the current object version has been created by a delete operation on the
         * OSM API.
         * When a writer sets this flag, it MUST add a required_features tag with
         * value "HistoricalInformation" to the HeaderBlock.
         * If this flag is not available for some object it MUST be assumed to be
         * true if the file has the required_features tag "HistoricalInformation"
         * set.
         * </pre>
         *
         * <code>repeated bool visible = 6 [packed = true];</code>
         * @return A list containing the visible.
         */
        java.util.List<java.lang.Boolean> getVisibleList();

        /**
         * <pre>
         * The visible flag is used to store history information. It indicates that
         * the current object version has been created by a delete operation on the
         * OSM API.
         * When a writer sets this flag, it MUST add a required_features tag with
         * value "HistoricalInformation" to the HeaderBlock.
         * If this flag is not available for some object it MUST be assumed to be
         * true if the file has the required_features tag "HistoricalInformation"
         * set.
         * </pre>
         *
         * <code>repeated bool visible = 6 [packed = true];</code>
         * @return The count of visible.
         */
        int getVisibleCount();

        /**
         * <pre>
         * The visible flag is used to store history information. It indicates that
         * the current object version has been created by a delete operation on the
         * OSM API.
         * When a writer sets this flag, it MUST add a required_features tag with
         * value "HistoricalInformation" to the HeaderBlock.
         * If this flag is not available for some object it MUST be assumed to be
         * true if the file has the required_features tag "HistoricalInformation"
         * set.
         * </pre>
         *
         * <code>repeated bool visible = 6 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The visible at the given index.
         */
        boolean getVisible(int index);
    }

    /**
     * <pre>
     * * Optional metadata that may be included into each primitive. Special dense format used in DenseNodes.
     * </pre>
     *
     * Protobuf type {@code OSMPBF.DenseInfo}
     */
    public static final class DenseInfo extends com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:OSMPBF.DenseInfo)
            DenseInfoOrBuilder
    {
        private static final long serialVersionUID = 0L;
        static
        {
            com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                    com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 31, /* patch= */ 1,
                    /* suffix= */ "", DenseInfo.class.getName());
        }

        // Use DenseInfo.newBuilder() to construct.
        private DenseInfo(final com.google.protobuf.GeneratedMessage.Builder<?> builder)
        {
            super(builder);
        }

        private DenseInfo()
        {
            this.version_ = emptyIntList();
            this.timestamp_ = emptyLongList();
            this.changeset_ = emptyLongList();
            this.uid_ = emptyIntList();
            this.userSid_ = emptyIntList();
            this.visible_ = emptyBooleanList();
        }

        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_DenseInfo_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_DenseInfo_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.class,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.Builder.class);
        }

        public static final int VERSION_FIELD_NUMBER = 1;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.IntList version_ = emptyIntList();

        /**
         * <code>repeated int32 version = 1 [packed = true];</code>
         * @return A list containing the version.
         */
        @java.lang.Override
        public java.util.List<java.lang.Integer> getVersionList()
        {
            return this.version_;
        }

        /**
         * <code>repeated int32 version = 1 [packed = true];</code>
         * @return The count of version.
         */
        @Override
        public int getVersionCount()
        {
            return this.version_.size();
        }

        /**
         * <code>repeated int32 version = 1 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The version at the given index.
         */
        @Override
        public int getVersion(final int index)
        {
            return this.version_.getInt(index);
        }

        private int versionMemoizedSerializedSize = -1;

        public static final int TIMESTAMP_FIELD_NUMBER = 2;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.LongList timestamp_ = emptyLongList();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 timestamp = 2 [packed = true];</code>
         * @return A list containing the timestamp.
         */
        @java.lang.Override
        public java.util.List<java.lang.Long> getTimestampList()
        {
            return this.timestamp_;
        }

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 timestamp = 2 [packed = true];</code>
         * @return The count of timestamp.
         */
        @Override
        public int getTimestampCount()
        {
            return this.timestamp_.size();
        }

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 timestamp = 2 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The timestamp at the given index.
         */
        @Override
        public long getTimestamp(final int index)
        {
            return this.timestamp_.getLong(index);
        }

        private int timestampMemoizedSerializedSize = -1;

        public static final int CHANGESET_FIELD_NUMBER = 3;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.LongList changeset_ = emptyLongList();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 changeset = 3 [packed = true];</code>
         * @return A list containing the changeset.
         */
        @java.lang.Override
        public java.util.List<java.lang.Long> getChangesetList()
        {
            return this.changeset_;
        }

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 changeset = 3 [packed = true];</code>
         * @return The count of changeset.
         */
        @Override
        public int getChangesetCount()
        {
            return this.changeset_.size();
        }

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 changeset = 3 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The changeset at the given index.
         */
        @Override
        public long getChangeset(final int index)
        {
            return this.changeset_.getLong(index);
        }

        private int changesetMemoizedSerializedSize = -1;

        public static final int UID_FIELD_NUMBER = 4;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.IntList uid_ = emptyIntList();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint32 uid = 4 [packed = true];</code>
         * @return A list containing the uid.
         */
        @java.lang.Override
        public java.util.List<java.lang.Integer> getUidList()
        {
            return this.uid_;
        }

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint32 uid = 4 [packed = true];</code>
         * @return The count of uid.
         */
        @Override
        public int getUidCount()
        {
            return this.uid_.size();
        }

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint32 uid = 4 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The uid at the given index.
         */
        @Override
        public int getUid(final int index)
        {
            return this.uid_.getInt(index);
        }

        private int uidMemoizedSerializedSize = -1;

        public static final int USER_SID_FIELD_NUMBER = 5;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.IntList userSid_ = emptyIntList();

        /**
         * <pre>
         * String IDs for usernames. DELTA coded
         * </pre>
         *
         * <code>repeated sint32 user_sid = 5 [packed = true];</code>
         * @return A list containing the userSid.
         */
        @java.lang.Override
        public java.util.List<java.lang.Integer> getUserSidList()
        {
            return this.userSid_;
        }

        /**
         * <pre>
         * String IDs for usernames. DELTA coded
         * </pre>
         *
         * <code>repeated sint32 user_sid = 5 [packed = true];</code>
         * @return The count of userSid.
         */
        @Override
        public int getUserSidCount()
        {
            return this.userSid_.size();
        }

        /**
         * <pre>
         * String IDs for usernames. DELTA coded
         * </pre>
         *
         * <code>repeated sint32 user_sid = 5 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The userSid at the given index.
         */
        @Override
        public int getUserSid(final int index)
        {
            return this.userSid_.getInt(index);
        }

        private int userSidMemoizedSerializedSize = -1;

        public static final int VISIBLE_FIELD_NUMBER = 6;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.BooleanList visible_ = emptyBooleanList();

        /**
         * <pre>
         * The visible flag is used to store history information. It indicates that
         * the current object version has been created by a delete operation on the
         * OSM API.
         * When a writer sets this flag, it MUST add a required_features tag with
         * value "HistoricalInformation" to the HeaderBlock.
         * If this flag is not available for some object it MUST be assumed to be
         * true if the file has the required_features tag "HistoricalInformation"
         * set.
         * </pre>
         *
         * <code>repeated bool visible = 6 [packed = true];</code>
         * @return A list containing the visible.
         */
        @java.lang.Override
        public java.util.List<java.lang.Boolean> getVisibleList()
        {
            return this.visible_;
        }

        /**
         * <pre>
         * The visible flag is used to store history information. It indicates that
         * the current object version has been created by a delete operation on the
         * OSM API.
         * When a writer sets this flag, it MUST add a required_features tag with
         * value "HistoricalInformation" to the HeaderBlock.
         * If this flag is not available for some object it MUST be assumed to be
         * true if the file has the required_features tag "HistoricalInformation"
         * set.
         * </pre>
         *
         * <code>repeated bool visible = 6 [packed = true];</code>
         * @return The count of visible.
         */
        @Override
        public int getVisibleCount()
        {
            return this.visible_.size();
        }

        /**
         * <pre>
         * The visible flag is used to store history information. It indicates that
         * the current object version has been created by a delete operation on the
         * OSM API.
         * When a writer sets this flag, it MUST add a required_features tag with
         * value "HistoricalInformation" to the HeaderBlock.
         * If this flag is not available for some object it MUST be assumed to be
         * true if the file has the required_features tag "HistoricalInformation"
         * set.
         * </pre>
         *
         * <code>repeated bool visible = 6 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The visible at the given index.
         */
        @Override
        public boolean getVisible(final int index)
        {
            return this.visible_.getBoolean(index);
        }

        private int visibleMemoizedSerializedSize = -1;

        private byte memoizedIsInitialized = -1;

        @java.lang.Override
        public final boolean isInitialized()
        {
            byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1)
                return true;
            if (isInitialized == 0)
                return false;

            this.memoizedIsInitialized = 1;
            return true;
        }

        @java.lang.Override
        public void writeTo(final com.google.protobuf.CodedOutputStream output) throws java.io.IOException
        {
            getSerializedSize();
            if (getVersionList().size() > 0)
            {
                output.writeUInt32NoTag(10);
                output.writeUInt32NoTag(this.versionMemoizedSerializedSize);
            }
            for (int i = 0; i < this.version_.size(); i++)
            {
                output.writeInt32NoTag(this.version_.getInt(i));
            }
            if (getTimestampList().size() > 0)
            {
                output.writeUInt32NoTag(18);
                output.writeUInt32NoTag(this.timestampMemoizedSerializedSize);
            }
            for (int i = 0; i < this.timestamp_.size(); i++)
            {
                output.writeSInt64NoTag(this.timestamp_.getLong(i));
            }
            if (getChangesetList().size() > 0)
            {
                output.writeUInt32NoTag(26);
                output.writeUInt32NoTag(this.changesetMemoizedSerializedSize);
            }
            for (int i = 0; i < this.changeset_.size(); i++)
            {
                output.writeSInt64NoTag(this.changeset_.getLong(i));
            }
            if (getUidList().size() > 0)
            {
                output.writeUInt32NoTag(34);
                output.writeUInt32NoTag(this.uidMemoizedSerializedSize);
            }
            for (int i = 0; i < this.uid_.size(); i++)
            {
                output.writeSInt32NoTag(this.uid_.getInt(i));
            }
            if (getUserSidList().size() > 0)
            {
                output.writeUInt32NoTag(42);
                output.writeUInt32NoTag(this.userSidMemoizedSerializedSize);
            }
            for (int i = 0; i < this.userSid_.size(); i++)
            {
                output.writeSInt32NoTag(this.userSid_.getInt(i));
            }
            if (getVisibleList().size() > 0)
            {
                output.writeUInt32NoTag(50);
                output.writeUInt32NoTag(this.visibleMemoizedSerializedSize);
            }
            for (int i = 0; i < this.visible_.size(); i++)
            {
                output.writeBoolNoTag(this.visible_.getBoolean(i));
            }
            getUnknownFields().writeTo(output);
        }

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

            size = 0;
            {
                int dataSize = 0;
                for (int i = 0; i < this.version_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(this.version_.getInt(i));
                }
                size += dataSize;
                if (!getVersionList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.versionMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.timestamp_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeSInt64SizeNoTag(this.timestamp_.getLong(i));
                }
                size += dataSize;
                if (!getTimestampList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.timestampMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.changeset_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeSInt64SizeNoTag(this.changeset_.getLong(i));
                }
                size += dataSize;
                if (!getChangesetList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.changesetMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.uid_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeSInt32SizeNoTag(this.uid_.getInt(i));
                }
                size += dataSize;
                if (!getUidList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.uidMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.userSid_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeSInt32SizeNoTag(this.userSid_.getInt(i));
                }
                size += dataSize;
                if (!getUserSidList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.userSidMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                dataSize = 1 * getVisibleList().size();
                size += dataSize;
                if (!getVisibleList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.visibleMemoizedSerializedSize = dataSize;
            }
            size += getUnknownFields().getSerializedSize();
            this.memoizedSize = size;
            return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj)
        {
            if (obj == this)
            {
                return true;
            }
            if (!(obj instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo))
            {
                return super.equals(obj);
            }
            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo other =
                    (nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo) obj;

            if (!getVersionList().equals(other.getVersionList()))
                return false;
            if (!getTimestampList().equals(other.getTimestampList()))
                return false;
            if (!getChangesetList().equals(other.getChangesetList()))
                return false;
            if (!getUidList().equals(other.getUidList()))
                return false;
            if (!getUserSidList().equals(other.getUserSidList()))
                return false;
            if (!getVisibleList().equals(other.getVisibleList()))
                return false;
            if (!getUnknownFields().equals(other.getUnknownFields()))
                return false;
            return true;
        }

        @java.lang.Override
        public int hashCode()
        {
            if (this.memoizedHashCode != 0)
            {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = (19 * hash) + getDescriptor().hashCode();
            if (getVersionCount() > 0)
            {
                hash = (37 * hash) + VERSION_FIELD_NUMBER;
                hash = (53 * hash) + getVersionList().hashCode();
            }
            if (getTimestampCount() > 0)
            {
                hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
                hash = (53 * hash) + getTimestampList().hashCode();
            }
            if (getChangesetCount() > 0)
            {
                hash = (37 * hash) + CHANGESET_FIELD_NUMBER;
                hash = (53 * hash) + getChangesetList().hashCode();
            }
            if (getUidCount() > 0)
            {
                hash = (37 * hash) + UID_FIELD_NUMBER;
                hash = (53 * hash) + getUidList().hashCode();
            }
            if (getUserSidCount() > 0)
            {
                hash = (37 * hash) + USER_SID_FIELD_NUMBER;
                hash = (53 * hash) + getUserSidList().hashCode();
            }
            if (getVisibleCount() > 0)
            {
                hash = (37 * hash) + VISIBLE_FIELD_NUMBER;
                hash = (53 * hash) + getVisibleList().hashCode();
            }
            hash = (29 * hash) + getUnknownFields().hashCode();
            this.memoizedHashCode = hash;
            return hash;
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo parseFrom(
                final java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo parseFrom(
                final java.nio.ByteBuffer data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo parseFrom(
                final com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo parseFrom(
                final com.google.protobuf.ByteString data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo parseFrom(final byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo parseFrom(final byte[] data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo parseFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo parseFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo parseDelimitedFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo parseDelimitedFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo parseFrom(
                final com.google.protobuf.CodedInputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo parseFrom(
                final com.google.protobuf.CodedInputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        @java.lang.Override
        public Builder newBuilderForType()
        {
            return newBuilder();
        }

        public static Builder newBuilder()
        {
            return DEFAULT_INSTANCE.toBuilder();
        }

        public static Builder newBuilder(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo prototype)
        {
            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }

        @java.lang.Override
        public Builder toBuilder()
        {
            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
        }

        @java.lang.Override
        protected Builder newBuilderForType(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
        {
            Builder builder = new Builder(parent);
            return builder;
        }

        /**
         * <pre>
         * * Optional metadata that may be included into each primitive. Special dense format used in DenseNodes.
         * </pre>
         *
         * Protobuf type {@code OSMPBF.DenseInfo}
         */
        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:OSMPBF.DenseInfo)
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfoOrBuilder
        {
            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_DenseInfo_descriptor;
            }

            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_DenseInfo_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.class,
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.Builder.class);
            }

            // Construct using nl.tudelft.simulation.dsol.animation.gis.osm.pbf.Osmformat.DenseInfo.newBuilder()
            private Builder()
            {

            }

            private Builder(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
            {
                super(parent);

            }

            @java.lang.Override
            public Builder clear()
            {
                super.clear();
                this.bitField0_ = 0;
                this.version_ = emptyIntList();
                this.timestamp_ = emptyLongList();
                this.changeset_ = emptyLongList();
                this.uid_ = emptyIntList();
                this.userSid_ = emptyIntList();
                this.visible_ = emptyBooleanList();
                return this;
            }

            @java.lang.Override
            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_DenseInfo_descriptor;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo getDefaultInstanceForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.getDefaultInstance();
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo build()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo result = buildPartial();
                if (!result.isInitialized())
                {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo buildPartial()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo result =
                        new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo(this);
                if (this.bitField0_ != 0)
                {
                    buildPartial0(result);
                }
                onBuilt();
                return result;
            }

            private void buildPartial0(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo result)
            {
                int from_bitField0_ = this.bitField0_;
                if (((from_bitField0_ & 0x00000001) != 0))
                {
                    this.version_.makeImmutable();
                    result.version_ = this.version_;
                }
                if (((from_bitField0_ & 0x00000002) != 0))
                {
                    this.timestamp_.makeImmutable();
                    result.timestamp_ = this.timestamp_;
                }
                if (((from_bitField0_ & 0x00000004) != 0))
                {
                    this.changeset_.makeImmutable();
                    result.changeset_ = this.changeset_;
                }
                if (((from_bitField0_ & 0x00000008) != 0))
                {
                    this.uid_.makeImmutable();
                    result.uid_ = this.uid_;
                }
                if (((from_bitField0_ & 0x00000010) != 0))
                {
                    this.userSid_.makeImmutable();
                    result.userSid_ = this.userSid_;
                }
                if (((from_bitField0_ & 0x00000020) != 0))
                {
                    this.visible_.makeImmutable();
                    result.visible_ = this.visible_;
                }
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.Message other)
            {
                if (other instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo)
                {
                    return mergeFrom((nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo) other);
                }
                else
                {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo other)
            {
                if (other == nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.getDefaultInstance())
                    return this;
                if (!other.version_.isEmpty())
                {
                    if (this.version_.isEmpty())
                    {
                        this.version_ = other.version_;
                        this.version_.makeImmutable();
                        this.bitField0_ |= 0x00000001;
                    }
                    else
                    {
                        ensureVersionIsMutable();
                        this.version_.addAll(other.version_);
                    }
                    onChanged();
                }
                if (!other.timestamp_.isEmpty())
                {
                    if (this.timestamp_.isEmpty())
                    {
                        this.timestamp_ = other.timestamp_;
                        this.timestamp_.makeImmutable();
                        this.bitField0_ |= 0x00000002;
                    }
                    else
                    {
                        ensureTimestampIsMutable();
                        this.timestamp_.addAll(other.timestamp_);
                    }
                    onChanged();
                }
                if (!other.changeset_.isEmpty())
                {
                    if (this.changeset_.isEmpty())
                    {
                        this.changeset_ = other.changeset_;
                        this.changeset_.makeImmutable();
                        this.bitField0_ |= 0x00000004;
                    }
                    else
                    {
                        ensureChangesetIsMutable();
                        this.changeset_.addAll(other.changeset_);
                    }
                    onChanged();
                }
                if (!other.uid_.isEmpty())
                {
                    if (this.uid_.isEmpty())
                    {
                        this.uid_ = other.uid_;
                        this.uid_.makeImmutable();
                        this.bitField0_ |= 0x00000008;
                    }
                    else
                    {
                        ensureUidIsMutable();
                        this.uid_.addAll(other.uid_);
                    }
                    onChanged();
                }
                if (!other.userSid_.isEmpty())
                {
                    if (this.userSid_.isEmpty())
                    {
                        this.userSid_ = other.userSid_;
                        this.userSid_.makeImmutable();
                        this.bitField0_ |= 0x00000010;
                    }
                    else
                    {
                        ensureUserSidIsMutable();
                        this.userSid_.addAll(other.userSid_);
                    }
                    onChanged();
                }
                if (!other.visible_.isEmpty())
                {
                    if (this.visible_.isEmpty())
                    {
                        this.visible_ = other.visible_;
                        this.visible_.makeImmutable();
                        this.bitField0_ |= 0x00000020;
                    }
                    else
                    {
                        ensureVisibleIsMutable();
                        this.visible_.addAll(other.visible_);
                    }
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                onChanged();
                return this;
            }

            @java.lang.Override
            public final boolean isInitialized()
            {
                return true;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
            {
                if (extensionRegistry == null)
                {
                    throw new java.lang.NullPointerException();
                }
                try
                {
                    boolean done = false;
                    while (!done)
                    {
                        int tag = input.readTag();
                        switch (tag)
                        {
                            case 0:
                                done = true;
                                break;
                            case 8:
                            {
                                int v = input.readInt32();
                                ensureVersionIsMutable();
                                this.version_.addInt(v);
                                break;
                            } // case 8
                            case 10:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureVersionIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.version_.addInt(input.readInt32());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 10
                            case 16:
                            {
                                long v = input.readSInt64();
                                ensureTimestampIsMutable();
                                this.timestamp_.addLong(v);
                                break;
                            } // case 16
                            case 18:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureTimestampIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.timestamp_.addLong(input.readSInt64());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 18
                            case 24:
                            {
                                long v = input.readSInt64();
                                ensureChangesetIsMutable();
                                this.changeset_.addLong(v);
                                break;
                            } // case 24
                            case 26:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureChangesetIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.changeset_.addLong(input.readSInt64());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 26
                            case 32:
                            {
                                int v = input.readSInt32();
                                ensureUidIsMutable();
                                this.uid_.addInt(v);
                                break;
                            } // case 32
                            case 34:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureUidIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.uid_.addInt(input.readSInt32());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 34
                            case 40:
                            {
                                int v = input.readSInt32();
                                ensureUserSidIsMutable();
                                this.userSid_.addInt(v);
                                break;
                            } // case 40
                            case 42:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureUserSidIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.userSid_.addInt(input.readSInt32());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 42
                            case 48:
                            {
                                boolean v = input.readBool();
                                ensureVisibleIsMutable();
                                this.visible_.addBoolean(v);
                                break;
                            } // case 48
                            case 50:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                int alloc = length > 4096 ? 4096 : length;
                                ensureVisibleIsMutable(alloc / 1);
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.visible_.addBoolean(input.readBool());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 50
                            default:
                            {
                                if (!super.parseUnknownField(input, extensionRegistry, tag))
                                {
                                    done = true; // was an endgroup tag
                                }
                                break;
                            } // default:
                        } // switch (tag)
                    } // while (!done)
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.unwrapIOException();
                }
                finally
                {
                    onChanged();
                } // finally
                return this;
            }

            private int bitField0_;

            private com.google.protobuf.Internal.IntList version_ = emptyIntList();

            private void ensureVersionIsMutable()
            {
                if (!this.version_.isModifiable())
                {
                    this.version_ = makeMutableCopy(this.version_);
                }
                this.bitField0_ |= 0x00000001;
            }

            /**
             * <code>repeated int32 version = 1 [packed = true];</code>
             * @return A list containing the version.
             */
            @Override
            public java.util.List<java.lang.Integer> getVersionList()
            {
                this.version_.makeImmutable();
                return this.version_;
            }

            /**
             * <code>repeated int32 version = 1 [packed = true];</code>
             * @return The count of version.
             */
            @Override
            public int getVersionCount()
            {
                return this.version_.size();
            }

            /**
             * <code>repeated int32 version = 1 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The version at the given index.
             */
            @Override
            public int getVersion(final int index)
            {
                return this.version_.getInt(index);
            }

            /**
             * <code>repeated int32 version = 1 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The version to set.
             * @return This builder for chaining.
             */
            public Builder setVersion(final int index, final int value)
            {

                ensureVersionIsMutable();
                this.version_.setInt(index, value);
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>repeated int32 version = 1 [packed = true];</code>
             * @param value The version to add.
             * @return This builder for chaining.
             */
            public Builder addVersion(final int value)
            {

                ensureVersionIsMutable();
                this.version_.addInt(value);
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>repeated int32 version = 1 [packed = true];</code>
             * @param values The version to add.
             * @return This builder for chaining.
             */
            public Builder addAllVersion(final java.lang.Iterable<? extends java.lang.Integer> values)
            {
                ensureVersionIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.version_);
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>repeated int32 version = 1 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearVersion()
            {
                this.version_ = emptyIntList();
                this.bitField0_ = (this.bitField0_ & ~0x00000001);
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.LongList timestamp_ = emptyLongList();

            private void ensureTimestampIsMutable()
            {
                if (!this.timestamp_.isModifiable())
                {
                    this.timestamp_ = makeMutableCopy(this.timestamp_);
                }
                this.bitField0_ |= 0x00000002;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 timestamp = 2 [packed = true];</code>
             * @return A list containing the timestamp.
             */
            @Override
            public java.util.List<java.lang.Long> getTimestampList()
            {
                this.timestamp_.makeImmutable();
                return this.timestamp_;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 timestamp = 2 [packed = true];</code>
             * @return The count of timestamp.
             */
            @Override
            public int getTimestampCount()
            {
                return this.timestamp_.size();
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 timestamp = 2 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The timestamp at the given index.
             */
            @Override
            public long getTimestamp(final int index)
            {
                return this.timestamp_.getLong(index);
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 timestamp = 2 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The timestamp to set.
             * @return This builder for chaining.
             */
            public Builder setTimestamp(final int index, final long value)
            {

                ensureTimestampIsMutable();
                this.timestamp_.setLong(index, value);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 timestamp = 2 [packed = true];</code>
             * @param value The timestamp to add.
             * @return This builder for chaining.
             */
            public Builder addTimestamp(final long value)
            {

                ensureTimestampIsMutable();
                this.timestamp_.addLong(value);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 timestamp = 2 [packed = true];</code>
             * @param values The timestamp to add.
             * @return This builder for chaining.
             */
            public Builder addAllTimestamp(final java.lang.Iterable<? extends java.lang.Long> values)
            {
                ensureTimestampIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.timestamp_);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 timestamp = 2 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearTimestamp()
            {
                this.timestamp_ = emptyLongList();
                this.bitField0_ = (this.bitField0_ & ~0x00000002);
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.LongList changeset_ = emptyLongList();

            private void ensureChangesetIsMutable()
            {
                if (!this.changeset_.isModifiable())
                {
                    this.changeset_ = makeMutableCopy(this.changeset_);
                }
                this.bitField0_ |= 0x00000004;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 changeset = 3 [packed = true];</code>
             * @return A list containing the changeset.
             */
            @Override
            public java.util.List<java.lang.Long> getChangesetList()
            {
                this.changeset_.makeImmutable();
                return this.changeset_;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 changeset = 3 [packed = true];</code>
             * @return The count of changeset.
             */
            @Override
            public int getChangesetCount()
            {
                return this.changeset_.size();
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 changeset = 3 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The changeset at the given index.
             */
            @Override
            public long getChangeset(final int index)
            {
                return this.changeset_.getLong(index);
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 changeset = 3 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The changeset to set.
             * @return This builder for chaining.
             */
            public Builder setChangeset(final int index, final long value)
            {

                ensureChangesetIsMutable();
                this.changeset_.setLong(index, value);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 changeset = 3 [packed = true];</code>
             * @param value The changeset to add.
             * @return This builder for chaining.
             */
            public Builder addChangeset(final long value)
            {

                ensureChangesetIsMutable();
                this.changeset_.addLong(value);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 changeset = 3 [packed = true];</code>
             * @param values The changeset to add.
             * @return This builder for chaining.
             */
            public Builder addAllChangeset(final java.lang.Iterable<? extends java.lang.Long> values)
            {
                ensureChangesetIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.changeset_);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 changeset = 3 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearChangeset()
            {
                this.changeset_ = emptyLongList();
                this.bitField0_ = (this.bitField0_ & ~0x00000004);
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.IntList uid_ = emptyIntList();

            private void ensureUidIsMutable()
            {
                if (!this.uid_.isModifiable())
                {
                    this.uid_ = makeMutableCopy(this.uid_);
                }
                this.bitField0_ |= 0x00000008;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint32 uid = 4 [packed = true];</code>
             * @return A list containing the uid.
             */
            @Override
            public java.util.List<java.lang.Integer> getUidList()
            {
                this.uid_.makeImmutable();
                return this.uid_;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint32 uid = 4 [packed = true];</code>
             * @return The count of uid.
             */
            @Override
            public int getUidCount()
            {
                return this.uid_.size();
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint32 uid = 4 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The uid at the given index.
             */
            @Override
            public int getUid(final int index)
            {
                return this.uid_.getInt(index);
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint32 uid = 4 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The uid to set.
             * @return This builder for chaining.
             */
            public Builder setUid(final int index, final int value)
            {

                ensureUidIsMutable();
                this.uid_.setInt(index, value);
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint32 uid = 4 [packed = true];</code>
             * @param value The uid to add.
             * @return This builder for chaining.
             */
            public Builder addUid(final int value)
            {

                ensureUidIsMutable();
                this.uid_.addInt(value);
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint32 uid = 4 [packed = true];</code>
             * @param values The uid to add.
             * @return This builder for chaining.
             */
            public Builder addAllUid(final java.lang.Iterable<? extends java.lang.Integer> values)
            {
                ensureUidIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.uid_);
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint32 uid = 4 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearUid()
            {
                this.uid_ = emptyIntList();
                this.bitField0_ = (this.bitField0_ & ~0x00000008);
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.IntList userSid_ = emptyIntList();

            private void ensureUserSidIsMutable()
            {
                if (!this.userSid_.isModifiable())
                {
                    this.userSid_ = makeMutableCopy(this.userSid_);
                }
                this.bitField0_ |= 0x00000010;
            }

            /**
             * <pre>
             * String IDs for usernames. DELTA coded
             * </pre>
             *
             * <code>repeated sint32 user_sid = 5 [packed = true];</code>
             * @return A list containing the userSid.
             */
            @Override
            public java.util.List<java.lang.Integer> getUserSidList()
            {
                this.userSid_.makeImmutable();
                return this.userSid_;
            }

            /**
             * <pre>
             * String IDs for usernames. DELTA coded
             * </pre>
             *
             * <code>repeated sint32 user_sid = 5 [packed = true];</code>
             * @return The count of userSid.
             */
            @Override
            public int getUserSidCount()
            {
                return this.userSid_.size();
            }

            /**
             * <pre>
             * String IDs for usernames. DELTA coded
             * </pre>
             *
             * <code>repeated sint32 user_sid = 5 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The userSid at the given index.
             */
            @Override
            public int getUserSid(final int index)
            {
                return this.userSid_.getInt(index);
            }

            /**
             * <pre>
             * String IDs for usernames. DELTA coded
             * </pre>
             *
             * <code>repeated sint32 user_sid = 5 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The userSid to set.
             * @return This builder for chaining.
             */
            public Builder setUserSid(final int index, final int value)
            {

                ensureUserSidIsMutable();
                this.userSid_.setInt(index, value);
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * String IDs for usernames. DELTA coded
             * </pre>
             *
             * <code>repeated sint32 user_sid = 5 [packed = true];</code>
             * @param value The userSid to add.
             * @return This builder for chaining.
             */
            public Builder addUserSid(final int value)
            {

                ensureUserSidIsMutable();
                this.userSid_.addInt(value);
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * String IDs for usernames. DELTA coded
             * </pre>
             *
             * <code>repeated sint32 user_sid = 5 [packed = true];</code>
             * @param values The userSid to add.
             * @return This builder for chaining.
             */
            public Builder addAllUserSid(final java.lang.Iterable<? extends java.lang.Integer> values)
            {
                ensureUserSidIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.userSid_);
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * String IDs for usernames. DELTA coded
             * </pre>
             *
             * <code>repeated sint32 user_sid = 5 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearUserSid()
            {
                this.userSid_ = emptyIntList();
                this.bitField0_ = (this.bitField0_ & ~0x00000010);
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.BooleanList visible_ = emptyBooleanList();

            private void ensureVisibleIsMutable()
            {
                if (!this.visible_.isModifiable())
                {
                    this.visible_ = makeMutableCopy(this.visible_);
                }
                this.bitField0_ |= 0x00000020;
            }

            private void ensureVisibleIsMutable(final int capacity)
            {
                if (!this.visible_.isModifiable())
                {
                    this.visible_ = makeMutableCopy(this.visible_, capacity);
                }
                this.bitField0_ |= 0x00000020;
            }

            /**
             * <pre>
             * The visible flag is used to store history information. It indicates that
             * the current object version has been created by a delete operation on the
             * OSM API.
             * When a writer sets this flag, it MUST add a required_features tag with
             * value "HistoricalInformation" to the HeaderBlock.
             * If this flag is not available for some object it MUST be assumed to be
             * true if the file has the required_features tag "HistoricalInformation"
             * set.
             * </pre>
             *
             * <code>repeated bool visible = 6 [packed = true];</code>
             * @return A list containing the visible.
             */
            @Override
            public java.util.List<java.lang.Boolean> getVisibleList()
            {
                this.visible_.makeImmutable();
                return this.visible_;
            }

            /**
             * <pre>
             * The visible flag is used to store history information. It indicates that
             * the current object version has been created by a delete operation on the
             * OSM API.
             * When a writer sets this flag, it MUST add a required_features tag with
             * value "HistoricalInformation" to the HeaderBlock.
             * If this flag is not available for some object it MUST be assumed to be
             * true if the file has the required_features tag "HistoricalInformation"
             * set.
             * </pre>
             *
             * <code>repeated bool visible = 6 [packed = true];</code>
             * @return The count of visible.
             */
            @Override
            public int getVisibleCount()
            {
                return this.visible_.size();
            }

            /**
             * <pre>
             * The visible flag is used to store history information. It indicates that
             * the current object version has been created by a delete operation on the
             * OSM API.
             * When a writer sets this flag, it MUST add a required_features tag with
             * value "HistoricalInformation" to the HeaderBlock.
             * If this flag is not available for some object it MUST be assumed to be
             * true if the file has the required_features tag "HistoricalInformation"
             * set.
             * </pre>
             *
             * <code>repeated bool visible = 6 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The visible at the given index.
             */
            @Override
            public boolean getVisible(final int index)
            {
                return this.visible_.getBoolean(index);
            }

            /**
             * <pre>
             * The visible flag is used to store history information. It indicates that
             * the current object version has been created by a delete operation on the
             * OSM API.
             * When a writer sets this flag, it MUST add a required_features tag with
             * value "HistoricalInformation" to the HeaderBlock.
             * If this flag is not available for some object it MUST be assumed to be
             * true if the file has the required_features tag "HistoricalInformation"
             * set.
             * </pre>
             *
             * <code>repeated bool visible = 6 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The visible to set.
             * @return This builder for chaining.
             */
            public Builder setVisible(final int index, final boolean value)
            {

                ensureVisibleIsMutable();
                this.visible_.setBoolean(index, value);
                this.bitField0_ |= 0x00000020;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * The visible flag is used to store history information. It indicates that
             * the current object version has been created by a delete operation on the
             * OSM API.
             * When a writer sets this flag, it MUST add a required_features tag with
             * value "HistoricalInformation" to the HeaderBlock.
             * If this flag is not available for some object it MUST be assumed to be
             * true if the file has the required_features tag "HistoricalInformation"
             * set.
             * </pre>
             *
             * <code>repeated bool visible = 6 [packed = true];</code>
             * @param value The visible to add.
             * @return This builder for chaining.
             */
            public Builder addVisible(final boolean value)
            {

                ensureVisibleIsMutable();
                this.visible_.addBoolean(value);
                this.bitField0_ |= 0x00000020;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * The visible flag is used to store history information. It indicates that
             * the current object version has been created by a delete operation on the
             * OSM API.
             * When a writer sets this flag, it MUST add a required_features tag with
             * value "HistoricalInformation" to the HeaderBlock.
             * If this flag is not available for some object it MUST be assumed to be
             * true if the file has the required_features tag "HistoricalInformation"
             * set.
             * </pre>
             *
             * <code>repeated bool visible = 6 [packed = true];</code>
             * @param values The visible to add.
             * @return This builder for chaining.
             */
            public Builder addAllVisible(final java.lang.Iterable<? extends java.lang.Boolean> values)
            {
                ensureVisibleIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.visible_);
                this.bitField0_ |= 0x00000020;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * The visible flag is used to store history information. It indicates that
             * the current object version has been created by a delete operation on the
             * OSM API.
             * When a writer sets this flag, it MUST add a required_features tag with
             * value "HistoricalInformation" to the HeaderBlock.
             * If this flag is not available for some object it MUST be assumed to be
             * true if the file has the required_features tag "HistoricalInformation"
             * set.
             * </pre>
             *
             * <code>repeated bool visible = 6 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearVisible()
            {
                this.visible_ = emptyBooleanList();
                this.bitField0_ = (this.bitField0_ & ~0x00000020);
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:OSMPBF.DenseInfo)
        }

        // @@protoc_insertion_point(class_scope:OSMPBF.DenseInfo)
        private static final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo DEFAULT_INSTANCE;
        static
        {
            DEFAULT_INSTANCE = new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo();
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo getDefaultInstance()
        {
            return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<DenseInfo> PARSER = new com.google.protobuf.AbstractParser<DenseInfo>()
        {
            @java.lang.Override
            public DenseInfo parsePartialFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws com.google.protobuf.InvalidProtocolBufferException
            {
                Builder builder = newBuilder();
                try
                {
                    builder.mergeFrom(input, extensionRegistry);
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.setUnfinishedMessage(builder.buildPartial());
                }
                catch (com.google.protobuf.UninitializedMessageException e)
                {
                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                }
                catch (java.io.IOException e)
                {
                    throw new com.google.protobuf.InvalidProtocolBufferException(e)
                            .setUnfinishedMessage(builder.buildPartial());
                }
                return builder.buildPartial();
            }
        };

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

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

        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo getDefaultInstanceForType()
        {
            return DEFAULT_INSTANCE;
        }

    }

    public interface ChangeSetOrBuilder extends
            // @@protoc_insertion_point(interface_extends:OSMPBF.ChangeSet)
            com.google.protobuf.MessageOrBuilder
    {

        /**
         * <code>required int64 id = 1;</code>
         * @return Whether the id field is set.
         */
        boolean hasId();

        /**
         * <code>required int64 id = 1;</code>
         * @return The id.
         */
        long getId();
    }

    /**
     * <pre>
     * This is kept for backwards compatibility but not used anywhere.
     * </pre>
     *
     * Protobuf type {@code OSMPBF.ChangeSet}
     */
    public static final class ChangeSet extends com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:OSMPBF.ChangeSet)
            ChangeSetOrBuilder
    {
        private static final long serialVersionUID = 0L;
        static
        {
            com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                    com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 31, /* patch= */ 1,
                    /* suffix= */ "", ChangeSet.class.getName());
        }

        // Use ChangeSet.newBuilder() to construct.
        private ChangeSet(final com.google.protobuf.GeneratedMessage.Builder<?> builder)
        {
            super(builder);
        }

        private ChangeSet()
        {
        }

        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_ChangeSet_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_ChangeSet_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.class,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.Builder.class);
        }

        private int bitField0_;

        public static final int ID_FIELD_NUMBER = 1;

        private long id_ = 0L;

        /**
         * <code>required int64 id = 1;</code>
         * @return Whether the id field is set.
         */
        @java.lang.Override
        public boolean hasId()
        {
            return ((this.bitField0_ & 0x00000001) != 0);
        }

        /**
         * <code>required int64 id = 1;</code>
         * @return The id.
         */
        @java.lang.Override
        public long getId()
        {
            return this.id_;
        }

        private byte memoizedIsInitialized = -1;

        @java.lang.Override
        public final boolean isInitialized()
        {
            byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1)
                return true;
            if (isInitialized == 0)
                return false;

            if (!hasId())
            {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }

        @java.lang.Override
        public void writeTo(final com.google.protobuf.CodedOutputStream output) throws java.io.IOException
        {
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                output.writeInt64(1, this.id_);
            }
            getUnknownFields().writeTo(output);
        }

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

            size = 0;
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeInt64Size(1, this.id_);
            }
            size += getUnknownFields().getSerializedSize();
            this.memoizedSize = size;
            return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj)
        {
            if (obj == this)
            {
                return true;
            }
            if (!(obj instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet))
            {
                return super.equals(obj);
            }
            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet other =
                    (nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet) obj;

            if (hasId() != other.hasId())
                return false;
            if (hasId())
            {
                if (getId() != other.getId())
                    return false;
            }
            if (!getUnknownFields().equals(other.getUnknownFields()))
                return false;
            return true;
        }

        @java.lang.Override
        public int hashCode()
        {
            if (this.memoizedHashCode != 0)
            {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = (19 * hash) + getDescriptor().hashCode();
            if (hasId())
            {
                hash = (37 * hash) + ID_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getId());
            }
            hash = (29 * hash) + getUnknownFields().hashCode();
            this.memoizedHashCode = hash;
            return hash;
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet parseFrom(
                final java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet parseFrom(
                final java.nio.ByteBuffer data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet parseFrom(
                final com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet parseFrom(
                final com.google.protobuf.ByteString data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet parseFrom(final byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet parseFrom(final byte[] data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet parseFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet parseFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet parseDelimitedFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet parseDelimitedFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet parseFrom(
                final com.google.protobuf.CodedInputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet parseFrom(
                final com.google.protobuf.CodedInputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        @java.lang.Override
        public Builder newBuilderForType()
        {
            return newBuilder();
        }

        public static Builder newBuilder()
        {
            return DEFAULT_INSTANCE.toBuilder();
        }

        public static Builder newBuilder(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet prototype)
        {
            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }

        @java.lang.Override
        public Builder toBuilder()
        {
            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
        }

        @java.lang.Override
        protected Builder newBuilderForType(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
        {
            Builder builder = new Builder(parent);
            return builder;
        }

        /**
         * <pre>
         * This is kept for backwards compatibility but not used anywhere.
         * </pre>
         *
         * Protobuf type {@code OSMPBF.ChangeSet}
         */
        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:OSMPBF.ChangeSet)
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSetOrBuilder
        {
            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_ChangeSet_descriptor;
            }

            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_ChangeSet_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.class,
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.Builder.class);
            }

            // Construct using nl.tudelft.simulation.dsol.animation.gis.osm.pbf.Osmformat.ChangeSet.newBuilder()
            private Builder()
            {

            }

            private Builder(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
            {
                super(parent);

            }

            @java.lang.Override
            public Builder clear()
            {
                super.clear();
                this.bitField0_ = 0;
                this.id_ = 0L;
                return this;
            }

            @java.lang.Override
            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_ChangeSet_descriptor;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet getDefaultInstanceForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.getDefaultInstance();
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet build()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet result = buildPartial();
                if (!result.isInitialized())
                {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet buildPartial()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet result =
                        new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet(this);
                if (this.bitField0_ != 0)
                {
                    buildPartial0(result);
                }
                onBuilt();
                return result;
            }

            private void buildPartial0(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet result)
            {
                int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) != 0))
                {
                    result.id_ = this.id_;
                    to_bitField0_ |= 0x00000001;
                }
                result.bitField0_ |= to_bitField0_;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.Message other)
            {
                if (other instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet)
                {
                    return mergeFrom((nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet) other);
                }
                else
                {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet other)
            {
                if (other == nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet.getDefaultInstance())
                    return this;
                if (other.hasId())
                {
                    setId(other.getId());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                onChanged();
                return this;
            }

            @java.lang.Override
            public final boolean isInitialized()
            {
                if (!hasId())
                {
                    return false;
                }
                return true;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
            {
                if (extensionRegistry == null)
                {
                    throw new java.lang.NullPointerException();
                }
                try
                {
                    boolean done = false;
                    while (!done)
                    {
                        int tag = input.readTag();
                        switch (tag)
                        {
                            case 0:
                                done = true;
                                break;
                            case 8:
                            {
                                this.id_ = input.readInt64();
                                this.bitField0_ |= 0x00000001;
                                break;
                            } // case 8
                            default:
                            {
                                if (!super.parseUnknownField(input, extensionRegistry, tag))
                                {
                                    done = true; // was an endgroup tag
                                }
                                break;
                            } // default:
                        } // switch (tag)
                    } // while (!done)
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.unwrapIOException();
                }
                finally
                {
                    onChanged();
                } // finally
                return this;
            }

            private int bitField0_;

            private long id_;

            /**
             * <code>required int64 id = 1;</code>
             * @return Whether the id field is set.
             */
            @java.lang.Override
            public boolean hasId()
            {
                return ((this.bitField0_ & 0x00000001) != 0);
            }

            /**
             * <code>required int64 id = 1;</code>
             * @return The id.
             */
            @java.lang.Override
            public long getId()
            {
                return this.id_;
            }

            /**
             * <code>required int64 id = 1;</code>
             * @param value The id to set.
             * @return This builder for chaining.
             */
            public Builder setId(final long value)
            {

                this.id_ = value;
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>required int64 id = 1;</code>
             * @return This builder for chaining.
             */
            public Builder clearId()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000001);
                this.id_ = 0L;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:OSMPBF.ChangeSet)
        }

        // @@protoc_insertion_point(class_scope:OSMPBF.ChangeSet)
        private static final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet DEFAULT_INSTANCE;
        static
        {
            DEFAULT_INSTANCE = new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet();
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet getDefaultInstance()
        {
            return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<ChangeSet> PARSER = new com.google.protobuf.AbstractParser<ChangeSet>()
        {
            @java.lang.Override
            public ChangeSet parsePartialFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws com.google.protobuf.InvalidProtocolBufferException
            {
                Builder builder = newBuilder();
                try
                {
                    builder.mergeFrom(input, extensionRegistry);
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.setUnfinishedMessage(builder.buildPartial());
                }
                catch (com.google.protobuf.UninitializedMessageException e)
                {
                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                }
                catch (java.io.IOException e)
                {
                    throw new com.google.protobuf.InvalidProtocolBufferException(e)
                            .setUnfinishedMessage(builder.buildPartial());
                }
                return builder.buildPartial();
            }
        };

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

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

        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.ChangeSet getDefaultInstanceForType()
        {
            return DEFAULT_INSTANCE;
        }

    }

    public interface NodeOrBuilder extends
            // @@protoc_insertion_point(interface_extends:OSMPBF.Node)
            com.google.protobuf.MessageOrBuilder
    {

        /**
         * <code>required sint64 id = 1;</code>
         * @return Whether the id field is set.
         */
        boolean hasId();

        /**
         * <code>required sint64 id = 1;</code>
         * @return The id.
         */
        long getId();

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @return A list containing the keys.
         */
        java.util.List<java.lang.Integer> getKeysList();

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @return The count of keys.
         */
        int getKeysCount();

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The keys at the given index.
         */
        int getKeys(int index);

        /**
         * <pre>
         * String IDs.
         * </pre>
         *
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @return A list containing the vals.
         */
        java.util.List<java.lang.Integer> getValsList();

        /**
         * <pre>
         * String IDs.
         * </pre>
         *
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @return The count of vals.
         */
        int getValsCount();

        /**
         * <pre>
         * String IDs.
         * </pre>
         *
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The vals at the given index.
         */
        int getVals(int index);

        /**
         * <pre>
         * May be omitted in omitmeta
         * </pre>
         *
         * <code>optional .OSMPBF.Info info = 4;</code>
         * @return Whether the info field is set.
         */
        boolean hasInfo();

        /**
         * <pre>
         * May be omitted in omitmeta
         * </pre>
         *
         * <code>optional .OSMPBF.Info info = 4;</code>
         * @return The info.
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info getInfo();

        /**
         * <pre>
         * May be omitted in omitmeta
         * </pre>
         *
         * <code>optional .OSMPBF.Info info = 4;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder getInfoOrBuilder();

        /**
         * <code>required sint64 lat = 8;</code>
         * @return Whether the lat field is set.
         */
        boolean hasLat();

        /**
         * <code>required sint64 lat = 8;</code>
         * @return The lat.
         */
        long getLat();

        /**
         * <code>required sint64 lon = 9;</code>
         * @return Whether the lon field is set.
         */
        boolean hasLon();

        /**
         * <code>required sint64 lon = 9;</code>
         * @return The lon.
         */
        long getLon();
    }

    /**
     * Protobuf type {@code OSMPBF.Node}
     */
    public static final class Node extends com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:OSMPBF.Node)
            NodeOrBuilder
    {
        private static final long serialVersionUID = 0L;
        static
        {
            com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                    com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 31, /* patch= */ 1,
                    /* suffix= */ "", Node.class.getName());
        }

        // Use Node.newBuilder() to construct.
        private Node(final com.google.protobuf.GeneratedMessage.Builder<?> builder)
        {
            super(builder);
        }

        private Node()
        {
            this.keys_ = emptyIntList();
            this.vals_ = emptyIntList();
        }

        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Node_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Node_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.class,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.Builder.class);
        }

        private int bitField0_;

        public static final int ID_FIELD_NUMBER = 1;

        private long id_ = 0L;

        /**
         * <code>required sint64 id = 1;</code>
         * @return Whether the id field is set.
         */
        @java.lang.Override
        public boolean hasId()
        {
            return ((this.bitField0_ & 0x00000001) != 0);
        }

        /**
         * <code>required sint64 id = 1;</code>
         * @return The id.
         */
        @java.lang.Override
        public long getId()
        {
            return this.id_;
        }

        public static final int KEYS_FIELD_NUMBER = 2;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.IntList keys_ = emptyIntList();

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @return A list containing the keys.
         */
        @java.lang.Override
        public java.util.List<java.lang.Integer> getKeysList()
        {
            return this.keys_;
        }

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @return The count of keys.
         */
        @Override
        public int getKeysCount()
        {
            return this.keys_.size();
        }

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The keys at the given index.
         */
        @Override
        public int getKeys(final int index)
        {
            return this.keys_.getInt(index);
        }

        private int keysMemoizedSerializedSize = -1;

        public static final int VALS_FIELD_NUMBER = 3;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.IntList vals_ = emptyIntList();

        /**
         * <pre>
         * String IDs.
         * </pre>
         *
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @return A list containing the vals.
         */
        @java.lang.Override
        public java.util.List<java.lang.Integer> getValsList()
        {
            return this.vals_;
        }

        /**
         * <pre>
         * String IDs.
         * </pre>
         *
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @return The count of vals.
         */
        @Override
        public int getValsCount()
        {
            return this.vals_.size();
        }

        /**
         * <pre>
         * String IDs.
         * </pre>
         *
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The vals at the given index.
         */
        @Override
        public int getVals(final int index)
        {
            return this.vals_.getInt(index);
        }

        private int valsMemoizedSerializedSize = -1;

        public static final int INFO_FIELD_NUMBER = 4;

        private nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info info_;

        /**
         * <pre>
         * May be omitted in omitmeta
         * </pre>
         *
         * <code>optional .OSMPBF.Info info = 4;</code>
         * @return Whether the info field is set.
         */
        @java.lang.Override
        public boolean hasInfo()
        {
            return ((this.bitField0_ & 0x00000002) != 0);
        }

        /**
         * <pre>
         * May be omitted in omitmeta
         * </pre>
         *
         * <code>optional .OSMPBF.Info info = 4;</code>
         * @return The info.
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info getInfo()
        {
            return this.info_ == null ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance()
                    : this.info_;
        }

        /**
         * <pre>
         * May be omitted in omitmeta
         * </pre>
         *
         * <code>optional .OSMPBF.Info info = 4;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder getInfoOrBuilder()
        {
            return this.info_ == null ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance()
                    : this.info_;
        }

        public static final int LAT_FIELD_NUMBER = 8;

        private long lat_ = 0L;

        /**
         * <code>required sint64 lat = 8;</code>
         * @return Whether the lat field is set.
         */
        @java.lang.Override
        public boolean hasLat()
        {
            return ((this.bitField0_ & 0x00000004) != 0);
        }

        /**
         * <code>required sint64 lat = 8;</code>
         * @return The lat.
         */
        @java.lang.Override
        public long getLat()
        {
            return this.lat_;
        }

        public static final int LON_FIELD_NUMBER = 9;

        private long lon_ = 0L;

        /**
         * <code>required sint64 lon = 9;</code>
         * @return Whether the lon field is set.
         */
        @java.lang.Override
        public boolean hasLon()
        {
            return ((this.bitField0_ & 0x00000008) != 0);
        }

        /**
         * <code>required sint64 lon = 9;</code>
         * @return The lon.
         */
        @java.lang.Override
        public long getLon()
        {
            return this.lon_;
        }

        private byte memoizedIsInitialized = -1;

        @java.lang.Override
        public final boolean isInitialized()
        {
            byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1)
                return true;
            if (isInitialized == 0)
                return false;

            if (!hasId())
            {
                this.memoizedIsInitialized = 0;
                return false;
            }
            if (!hasLat())
            {
                this.memoizedIsInitialized = 0;
                return false;
            }
            if (!hasLon())
            {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }

        @java.lang.Override
        public void writeTo(final com.google.protobuf.CodedOutputStream output) throws java.io.IOException
        {
            getSerializedSize();
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                output.writeSInt64(1, this.id_);
            }
            if (getKeysList().size() > 0)
            {
                output.writeUInt32NoTag(18);
                output.writeUInt32NoTag(this.keysMemoizedSerializedSize);
            }
            for (int i = 0; i < this.keys_.size(); i++)
            {
                output.writeUInt32NoTag(this.keys_.getInt(i));
            }
            if (getValsList().size() > 0)
            {
                output.writeUInt32NoTag(26);
                output.writeUInt32NoTag(this.valsMemoizedSerializedSize);
            }
            for (int i = 0; i < this.vals_.size(); i++)
            {
                output.writeUInt32NoTag(this.vals_.getInt(i));
            }
            if (((this.bitField0_ & 0x00000002) != 0))
            {
                output.writeMessage(4, getInfo());
            }
            if (((this.bitField0_ & 0x00000004) != 0))
            {
                output.writeSInt64(8, this.lat_);
            }
            if (((this.bitField0_ & 0x00000008) != 0))
            {
                output.writeSInt64(9, this.lon_);
            }
            getUnknownFields().writeTo(output);
        }

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

            size = 0;
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeSInt64Size(1, this.id_);
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.keys_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(this.keys_.getInt(i));
                }
                size += dataSize;
                if (!getKeysList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.keysMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.vals_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(this.vals_.getInt(i));
                }
                size += dataSize;
                if (!getValsList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.valsMemoizedSerializedSize = dataSize;
            }
            if (((this.bitField0_ & 0x00000002) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getInfo());
            }
            if (((this.bitField0_ & 0x00000004) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeSInt64Size(8, this.lat_);
            }
            if (((this.bitField0_ & 0x00000008) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeSInt64Size(9, this.lon_);
            }
            size += getUnknownFields().getSerializedSize();
            this.memoizedSize = size;
            return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj)
        {
            if (obj == this)
            {
                return true;
            }
            if (!(obj instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node))
            {
                return super.equals(obj);
            }
            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node other =
                    (nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node) obj;

            if (hasId() != other.hasId())
                return false;
            if (hasId())
            {
                if (getId() != other.getId())
                    return false;
            }
            if (!getKeysList().equals(other.getKeysList()))
                return false;
            if (!getValsList().equals(other.getValsList()))
                return false;
            if (hasInfo() != other.hasInfo())
                return false;
            if (hasInfo())
            {
                if (!getInfo().equals(other.getInfo()))
                    return false;
            }
            if (hasLat() != other.hasLat())
                return false;
            if (hasLat())
            {
                if (getLat() != other.getLat())
                    return false;
            }
            if (hasLon() != other.hasLon())
                return false;
            if (hasLon())
            {
                if (getLon() != other.getLon())
                    return false;
            }
            if (!getUnknownFields().equals(other.getUnknownFields()))
                return false;
            return true;
        }

        @java.lang.Override
        public int hashCode()
        {
            if (this.memoizedHashCode != 0)
            {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = (19 * hash) + getDescriptor().hashCode();
            if (hasId())
            {
                hash = (37 * hash) + ID_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getId());
            }
            if (getKeysCount() > 0)
            {
                hash = (37 * hash) + KEYS_FIELD_NUMBER;
                hash = (53 * hash) + getKeysList().hashCode();
            }
            if (getValsCount() > 0)
            {
                hash = (37 * hash) + VALS_FIELD_NUMBER;
                hash = (53 * hash) + getValsList().hashCode();
            }
            if (hasInfo())
            {
                hash = (37 * hash) + INFO_FIELD_NUMBER;
                hash = (53 * hash) + getInfo().hashCode();
            }
            if (hasLat())
            {
                hash = (37 * hash) + LAT_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getLat());
            }
            if (hasLon())
            {
                hash = (37 * hash) + LON_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getLon());
            }
            hash = (29 * hash) + getUnknownFields().hashCode();
            this.memoizedHashCode = hash;
            return hash;
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node parseFrom(final java.nio.ByteBuffer data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node parseFrom(final java.nio.ByteBuffer data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node parseFrom(
                final com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node parseFrom(
                final com.google.protobuf.ByteString data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node parseFrom(final byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node parseFrom(final byte[] data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node parseFrom(final java.io.InputStream input)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node parseFrom(final java.io.InputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node parseDelimitedFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node parseDelimitedFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node parseFrom(
                final com.google.protobuf.CodedInputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node parseFrom(
                final com.google.protobuf.CodedInputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        @java.lang.Override
        public Builder newBuilderForType()
        {
            return newBuilder();
        }

        public static Builder newBuilder()
        {
            return DEFAULT_INSTANCE.toBuilder();
        }

        public static Builder newBuilder(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node prototype)
        {
            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }

        @java.lang.Override
        public Builder toBuilder()
        {
            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
        }

        @java.lang.Override
        protected Builder newBuilderForType(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
        {
            Builder builder = new Builder(parent);
            return builder;
        }

        /**
         * Protobuf type {@code OSMPBF.Node}
         */
        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:OSMPBF.Node)
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.NodeOrBuilder
        {
            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Node_descriptor;
            }

            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Node_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.class,
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.Builder.class);
            }

            // Construct using nl.tudelft.simulation.dsol.animation.gis.osm.pbf.Osmformat.Node.newBuilder()
            private Builder()
            {
                maybeForceBuilderInitialization();
            }

            private Builder(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
            {
                super(parent);
                maybeForceBuilderInitialization();
            }

            private void maybeForceBuilderInitialization()
            {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders)
                {
                    internalGetInfoFieldBuilder();
                }
            }

            @java.lang.Override
            public Builder clear()
            {
                super.clear();
                this.bitField0_ = 0;
                this.id_ = 0L;
                this.keys_ = emptyIntList();
                this.vals_ = emptyIntList();
                this.info_ = null;
                if (this.infoBuilder_ != null)
                {
                    this.infoBuilder_.dispose();
                    this.infoBuilder_ = null;
                }
                this.lat_ = 0L;
                this.lon_ = 0L;
                return this;
            }

            @java.lang.Override
            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Node_descriptor;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node getDefaultInstanceForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.getDefaultInstance();
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node build()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node result = buildPartial();
                if (!result.isInitialized())
                {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node buildPartial()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node result =
                        new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node(this);
                if (this.bitField0_ != 0)
                {
                    buildPartial0(result);
                }
                onBuilt();
                return result;
            }

            private void buildPartial0(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node result)
            {
                int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) != 0))
                {
                    result.id_ = this.id_;
                    to_bitField0_ |= 0x00000001;
                }
                if (((from_bitField0_ & 0x00000002) != 0))
                {
                    this.keys_.makeImmutable();
                    result.keys_ = this.keys_;
                }
                if (((from_bitField0_ & 0x00000004) != 0))
                {
                    this.vals_.makeImmutable();
                    result.vals_ = this.vals_;
                }
                if (((from_bitField0_ & 0x00000008) != 0))
                {
                    result.info_ = this.infoBuilder_ == null ? this.info_ : this.infoBuilder_.build();
                    to_bitField0_ |= 0x00000002;
                }
                if (((from_bitField0_ & 0x00000010) != 0))
                {
                    result.lat_ = this.lat_;
                    to_bitField0_ |= 0x00000004;
                }
                if (((from_bitField0_ & 0x00000020) != 0))
                {
                    result.lon_ = this.lon_;
                    to_bitField0_ |= 0x00000008;
                }
                result.bitField0_ |= to_bitField0_;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.Message other)
            {
                if (other instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node)
                {
                    return mergeFrom((nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node) other);
                }
                else
                {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node other)
            {
                if (other == nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node.getDefaultInstance())
                    return this;
                if (other.hasId())
                {
                    setId(other.getId());
                }
                if (!other.keys_.isEmpty())
                {
                    if (this.keys_.isEmpty())
                    {
                        this.keys_ = other.keys_;
                        this.keys_.makeImmutable();
                        this.bitField0_ |= 0x00000002;
                    }
                    else
                    {
                        ensureKeysIsMutable();
                        this.keys_.addAll(other.keys_);
                    }
                    onChanged();
                }
                if (!other.vals_.isEmpty())
                {
                    if (this.vals_.isEmpty())
                    {
                        this.vals_ = other.vals_;
                        this.vals_.makeImmutable();
                        this.bitField0_ |= 0x00000004;
                    }
                    else
                    {
                        ensureValsIsMutable();
                        this.vals_.addAll(other.vals_);
                    }
                    onChanged();
                }
                if (other.hasInfo())
                {
                    mergeInfo(other.getInfo());
                }
                if (other.hasLat())
                {
                    setLat(other.getLat());
                }
                if (other.hasLon())
                {
                    setLon(other.getLon());
                }
                this.mergeUnknownFields(other.getUnknownFields());
                onChanged();
                return this;
            }

            @java.lang.Override
            public final boolean isInitialized()
            {
                if (!hasId())
                {
                    return false;
                }
                if (!hasLat())
                {
                    return false;
                }
                if (!hasLon())
                {
                    return false;
                }
                return true;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
            {
                if (extensionRegistry == null)
                {
                    throw new java.lang.NullPointerException();
                }
                try
                {
                    boolean done = false;
                    while (!done)
                    {
                        int tag = input.readTag();
                        switch (tag)
                        {
                            case 0:
                                done = true;
                                break;
                            case 8:
                            {
                                this.id_ = input.readSInt64();
                                this.bitField0_ |= 0x00000001;
                                break;
                            } // case 8
                            case 16:
                            {
                                int v = input.readUInt32();
                                ensureKeysIsMutable();
                                this.keys_.addInt(v);
                                break;
                            } // case 16
                            case 18:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureKeysIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.keys_.addInt(input.readUInt32());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 18
                            case 24:
                            {
                                int v = input.readUInt32();
                                ensureValsIsMutable();
                                this.vals_.addInt(v);
                                break;
                            } // case 24
                            case 26:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureValsIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.vals_.addInt(input.readUInt32());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 26
                            case 34:
                            {
                                input.readMessage(internalGetInfoFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x00000008;
                                break;
                            } // case 34
                            case 64:
                            {
                                this.lat_ = input.readSInt64();
                                this.bitField0_ |= 0x00000010;
                                break;
                            } // case 64
                            case 72:
                            {
                                this.lon_ = input.readSInt64();
                                this.bitField0_ |= 0x00000020;
                                break;
                            } // case 72
                            default:
                            {
                                if (!super.parseUnknownField(input, extensionRegistry, tag))
                                {
                                    done = true; // was an endgroup tag
                                }
                                break;
                            } // default:
                        } // switch (tag)
                    } // while (!done)
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.unwrapIOException();
                }
                finally
                {
                    onChanged();
                } // finally
                return this;
            }

            private int bitField0_;

            private long id_;

            /**
             * <code>required sint64 id = 1;</code>
             * @return Whether the id field is set.
             */
            @java.lang.Override
            public boolean hasId()
            {
                return ((this.bitField0_ & 0x00000001) != 0);
            }

            /**
             * <code>required sint64 id = 1;</code>
             * @return The id.
             */
            @java.lang.Override
            public long getId()
            {
                return this.id_;
            }

            /**
             * <code>required sint64 id = 1;</code>
             * @param value The id to set.
             * @return This builder for chaining.
             */
            public Builder setId(final long value)
            {

                this.id_ = value;
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>required sint64 id = 1;</code>
             * @return This builder for chaining.
             */
            public Builder clearId()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000001);
                this.id_ = 0L;
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.IntList keys_ = emptyIntList();

            private void ensureKeysIsMutable()
            {
                if (!this.keys_.isModifiable())
                {
                    this.keys_ = makeMutableCopy(this.keys_);
                }
                this.bitField0_ |= 0x00000002;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @return A list containing the keys.
             */
            @Override
            public java.util.List<java.lang.Integer> getKeysList()
            {
                this.keys_.makeImmutable();
                return this.keys_;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @return The count of keys.
             */
            @Override
            public int getKeysCount()
            {
                return this.keys_.size();
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The keys at the given index.
             */
            @Override
            public int getKeys(final int index)
            {
                return this.keys_.getInt(index);
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The keys to set.
             * @return This builder for chaining.
             */
            public Builder setKeys(final int index, final int value)
            {

                ensureKeysIsMutable();
                this.keys_.setInt(index, value);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @param value The keys to add.
             * @return This builder for chaining.
             */
            public Builder addKeys(final int value)
            {

                ensureKeysIsMutable();
                this.keys_.addInt(value);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @param values The keys to add.
             * @return This builder for chaining.
             */
            public Builder addAllKeys(final java.lang.Iterable<? extends java.lang.Integer> values)
            {
                ensureKeysIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.keys_);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearKeys()
            {
                this.keys_ = emptyIntList();
                this.bitField0_ = (this.bitField0_ & ~0x00000002);
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.IntList vals_ = emptyIntList();

            private void ensureValsIsMutable()
            {
                if (!this.vals_.isModifiable())
                {
                    this.vals_ = makeMutableCopy(this.vals_);
                }
                this.bitField0_ |= 0x00000004;
            }

            /**
             * <pre>
             * String IDs.
             * </pre>
             *
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @return A list containing the vals.
             */
            @Override
            public java.util.List<java.lang.Integer> getValsList()
            {
                this.vals_.makeImmutable();
                return this.vals_;
            }

            /**
             * <pre>
             * String IDs.
             * </pre>
             *
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @return The count of vals.
             */
            @Override
            public int getValsCount()
            {
                return this.vals_.size();
            }

            /**
             * <pre>
             * String IDs.
             * </pre>
             *
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The vals at the given index.
             */
            @Override
            public int getVals(final int index)
            {
                return this.vals_.getInt(index);
            }

            /**
             * <pre>
             * String IDs.
             * </pre>
             *
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The vals to set.
             * @return This builder for chaining.
             */
            public Builder setVals(final int index, final int value)
            {

                ensureValsIsMutable();
                this.vals_.setInt(index, value);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * String IDs.
             * </pre>
             *
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @param value The vals to add.
             * @return This builder for chaining.
             */
            public Builder addVals(final int value)
            {

                ensureValsIsMutable();
                this.vals_.addInt(value);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * String IDs.
             * </pre>
             *
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @param values The vals to add.
             * @return This builder for chaining.
             */
            public Builder addAllVals(final java.lang.Iterable<? extends java.lang.Integer> values)
            {
                ensureValsIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.vals_);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * String IDs.
             * </pre>
             *
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearVals()
            {
                this.vals_ = emptyIntList();
                this.bitField0_ = (this.bitField0_ & ~0x00000004);
                onChanged();
                return this;
            }

            private nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info info_;

            private com.google.protobuf.SingleFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder> infoBuilder_;

            /**
             * <pre>
             * May be omitted in omitmeta
             * </pre>
             *
             * <code>optional .OSMPBF.Info info = 4;</code>
             * @return Whether the info field is set.
             */
            @Override
            public boolean hasInfo()
            {
                return ((this.bitField0_ & 0x00000008) != 0);
            }

            /**
             * <pre>
             * May be omitted in omitmeta
             * </pre>
             *
             * <code>optional .OSMPBF.Info info = 4;</code>
             * @return The info.
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info getInfo()
            {
                if (this.infoBuilder_ == null)
                {
                    return this.info_ == null
                            ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance() : this.info_;
                }
                else
                {
                    return this.infoBuilder_.getMessage();
                }
            }

            /**
             * <pre>
             * May be omitted in omitmeta
             * </pre>
             *
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public Builder setInfo(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info value)
            {
                if (this.infoBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    this.info_ = value;
                }
                else
                {
                    this.infoBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * May be omitted in omitmeta
             * </pre>
             *
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public Builder setInfo(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder builderForValue)
            {
                if (this.infoBuilder_ == null)
                {
                    this.info_ = builderForValue.build();
                }
                else
                {
                    this.infoBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * May be omitted in omitmeta
             * </pre>
             *
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public Builder mergeInfo(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info value)
            {
                if (this.infoBuilder_ == null)
                {
                    if (((this.bitField0_ & 0x00000008) != 0) && this.info_ != null
                            && this.info_ != nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance())
                    {
                        getInfoBuilder().mergeFrom(value);
                    }
                    else
                    {
                        this.info_ = value;
                    }
                }
                else
                {
                    this.infoBuilder_.mergeFrom(value);
                }
                if (this.info_ != null)
                {
                    this.bitField0_ |= 0x00000008;
                    onChanged();
                }
                return this;
            }

            /**
             * <pre>
             * May be omitted in omitmeta
             * </pre>
             *
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public Builder clearInfo()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000008);
                this.info_ = null;
                if (this.infoBuilder_ != null)
                {
                    this.infoBuilder_.dispose();
                    this.infoBuilder_ = null;
                }
                onChanged();
                return this;
            }

            /**
             * <pre>
             * May be omitted in omitmeta
             * </pre>
             *
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder getInfoBuilder()
            {
                this.bitField0_ |= 0x00000008;
                onChanged();
                return internalGetInfoFieldBuilder().getBuilder();
            }

            /**
             * <pre>
             * May be omitted in omitmeta
             * </pre>
             *
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder getInfoOrBuilder()
            {
                if (this.infoBuilder_ != null)
                {
                    return this.infoBuilder_.getMessageOrBuilder();
                }
                else
                {
                    return this.info_ == null
                            ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance() : this.info_;
                }
            }

            /**
             * <pre>
             * May be omitted in omitmeta
             * </pre>
             *
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder> internalGetInfoFieldBuilder()
            {
                if (this.infoBuilder_ == null)
                {
                    this.infoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder>(getInfo(),
                                    getParentForChildren(), isClean());
                    this.info_ = null;
                }
                return this.infoBuilder_;
            }

            private long lat_;

            /**
             * <code>required sint64 lat = 8;</code>
             * @return Whether the lat field is set.
             */
            @java.lang.Override
            public boolean hasLat()
            {
                return ((this.bitField0_ & 0x00000010) != 0);
            }

            /**
             * <code>required sint64 lat = 8;</code>
             * @return The lat.
             */
            @java.lang.Override
            public long getLat()
            {
                return this.lat_;
            }

            /**
             * <code>required sint64 lat = 8;</code>
             * @param value The lat to set.
             * @return This builder for chaining.
             */
            public Builder setLat(final long value)
            {

                this.lat_ = value;
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <code>required sint64 lat = 8;</code>
             * @return This builder for chaining.
             */
            public Builder clearLat()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000010);
                this.lat_ = 0L;
                onChanged();
                return this;
            }

            private long lon_;

            /**
             * <code>required sint64 lon = 9;</code>
             * @return Whether the lon field is set.
             */
            @java.lang.Override
            public boolean hasLon()
            {
                return ((this.bitField0_ & 0x00000020) != 0);
            }

            /**
             * <code>required sint64 lon = 9;</code>
             * @return The lon.
             */
            @java.lang.Override
            public long getLon()
            {
                return this.lon_;
            }

            /**
             * <code>required sint64 lon = 9;</code>
             * @param value The lon to set.
             * @return This builder for chaining.
             */
            public Builder setLon(final long value)
            {

                this.lon_ = value;
                this.bitField0_ |= 0x00000020;
                onChanged();
                return this;
            }

            /**
             * <code>required sint64 lon = 9;</code>
             * @return This builder for chaining.
             */
            public Builder clearLon()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000020);
                this.lon_ = 0L;
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:OSMPBF.Node)
        }

        // @@protoc_insertion_point(class_scope:OSMPBF.Node)
        private static final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node DEFAULT_INSTANCE;
        static
        {
            DEFAULT_INSTANCE = new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node();
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node getDefaultInstance()
        {
            return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<Node> PARSER = new com.google.protobuf.AbstractParser<Node>()
        {
            @java.lang.Override
            public Node parsePartialFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws com.google.protobuf.InvalidProtocolBufferException
            {
                Builder builder = newBuilder();
                try
                {
                    builder.mergeFrom(input, extensionRegistry);
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.setUnfinishedMessage(builder.buildPartial());
                }
                catch (com.google.protobuf.UninitializedMessageException e)
                {
                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                }
                catch (java.io.IOException e)
                {
                    throw new com.google.protobuf.InvalidProtocolBufferException(e)
                            .setUnfinishedMessage(builder.buildPartial());
                }
                return builder.buildPartial();
            }
        };

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

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

        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Node getDefaultInstanceForType()
        {
            return DEFAULT_INSTANCE;
        }

    }

    public interface DenseNodesOrBuilder extends
            // @@protoc_insertion_point(interface_extends:OSMPBF.DenseNodes)
            com.google.protobuf.MessageOrBuilder
    {

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 id = 1 [packed = true];</code>
         * @return A list containing the id.
         */
        java.util.List<java.lang.Long> getIdList();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 id = 1 [packed = true];</code>
         * @return The count of id.
         */
        int getIdCount();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 id = 1 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The id at the given index.
         */
        long getId(int index);

        /**
         * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
         * @return Whether the denseinfo field is set.
         */
        boolean hasDenseinfo();

        /**
         * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
         * @return The denseinfo.
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo getDenseinfo();

        /**
         * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfoOrBuilder getDenseinfoOrBuilder();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 lat = 8 [packed = true];</code>
         * @return A list containing the lat.
         */
        java.util.List<java.lang.Long> getLatList();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 lat = 8 [packed = true];</code>
         * @return The count of lat.
         */
        int getLatCount();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 lat = 8 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The lat at the given index.
         */
        long getLat(int index);

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 lon = 9 [packed = true];</code>
         * @return A list containing the lon.
         */
        java.util.List<java.lang.Long> getLonList();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 lon = 9 [packed = true];</code>
         * @return The count of lon.
         */
        int getLonCount();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 lon = 9 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The lon at the given index.
         */
        long getLon(int index);

        /**
         * <pre>
         * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
         * </pre>
         *
         * <code>repeated int32 keys_vals = 10 [packed = true];</code>
         * @return A list containing the keysVals.
         */
        java.util.List<java.lang.Integer> getKeysValsList();

        /**
         * <pre>
         * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
         * </pre>
         *
         * <code>repeated int32 keys_vals = 10 [packed = true];</code>
         * @return The count of keysVals.
         */
        int getKeysValsCount();

        /**
         * <pre>
         * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
         * </pre>
         *
         * <code>repeated int32 keys_vals = 10 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The keysVals at the given index.
         */
        int getKeysVals(int index);
    }

    /**
     * Protobuf type {@code OSMPBF.DenseNodes}
     */
    public static final class DenseNodes extends com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:OSMPBF.DenseNodes)
            DenseNodesOrBuilder
    {
        private static final long serialVersionUID = 0L;
        static
        {
            com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                    com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 31, /* patch= */ 1,
                    /* suffix= */ "", DenseNodes.class.getName());
        }

        // Use DenseNodes.newBuilder() to construct.
        private DenseNodes(final com.google.protobuf.GeneratedMessage.Builder<?> builder)
        {
            super(builder);
        }

        private DenseNodes()
        {
            this.id_ = emptyLongList();
            this.lat_ = emptyLongList();
            this.lon_ = emptyLongList();
            this.keysVals_ = emptyIntList();
        }

        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_DenseNodes_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_DenseNodes_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.class,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.Builder.class);
        }

        private int bitField0_;

        public static final int ID_FIELD_NUMBER = 1;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.LongList id_ = emptyLongList();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 id = 1 [packed = true];</code>
         * @return A list containing the id.
         */
        @java.lang.Override
        public java.util.List<java.lang.Long> getIdList()
        {
            return this.id_;
        }

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 id = 1 [packed = true];</code>
         * @return The count of id.
         */
        @Override
        public int getIdCount()
        {
            return this.id_.size();
        }

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 id = 1 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The id at the given index.
         */
        @Override
        public long getId(final int index)
        {
            return this.id_.getLong(index);
        }

        private int idMemoizedSerializedSize = -1;

        public static final int DENSEINFO_FIELD_NUMBER = 5;

        private nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo denseinfo_;

        /**
         * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
         * @return Whether the denseinfo field is set.
         */
        @java.lang.Override
        public boolean hasDenseinfo()
        {
            return ((this.bitField0_ & 0x00000001) != 0);
        }

        /**
         * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
         * @return The denseinfo.
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo getDenseinfo()
        {
            return this.denseinfo_ == null
                    ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.getDefaultInstance() : this.denseinfo_;
        }

        /**
         * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfoOrBuilder getDenseinfoOrBuilder()
        {
            return this.denseinfo_ == null
                    ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.getDefaultInstance() : this.denseinfo_;
        }

        public static final int LAT_FIELD_NUMBER = 8;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.LongList lat_ = emptyLongList();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 lat = 8 [packed = true];</code>
         * @return A list containing the lat.
         */
        @java.lang.Override
        public java.util.List<java.lang.Long> getLatList()
        {
            return this.lat_;
        }

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 lat = 8 [packed = true];</code>
         * @return The count of lat.
         */
        @Override
        public int getLatCount()
        {
            return this.lat_.size();
        }

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 lat = 8 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The lat at the given index.
         */
        @Override
        public long getLat(final int index)
        {
            return this.lat_.getLong(index);
        }

        private int latMemoizedSerializedSize = -1;

        public static final int LON_FIELD_NUMBER = 9;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.LongList lon_ = emptyLongList();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 lon = 9 [packed = true];</code>
         * @return A list containing the lon.
         */
        @java.lang.Override
        public java.util.List<java.lang.Long> getLonList()
        {
            return this.lon_;
        }

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 lon = 9 [packed = true];</code>
         * @return The count of lon.
         */
        @Override
        public int getLonCount()
        {
            return this.lon_.size();
        }

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 lon = 9 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The lon at the given index.
         */
        @Override
        public long getLon(final int index)
        {
            return this.lon_.getLong(index);
        }

        private int lonMemoizedSerializedSize = -1;

        public static final int KEYS_VALS_FIELD_NUMBER = 10;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.IntList keysVals_ = emptyIntList();

        /**
         * <pre>
         * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
         * </pre>
         *
         * <code>repeated int32 keys_vals = 10 [packed = true];</code>
         * @return A list containing the keysVals.
         */
        @java.lang.Override
        public java.util.List<java.lang.Integer> getKeysValsList()
        {
            return this.keysVals_;
        }

        /**
         * <pre>
         * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
         * </pre>
         *
         * <code>repeated int32 keys_vals = 10 [packed = true];</code>
         * @return The count of keysVals.
         */
        @Override
        public int getKeysValsCount()
        {
            return this.keysVals_.size();
        }

        /**
         * <pre>
         * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
         * </pre>
         *
         * <code>repeated int32 keys_vals = 10 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The keysVals at the given index.
         */
        @Override
        public int getKeysVals(final int index)
        {
            return this.keysVals_.getInt(index);
        }

        private int keysValsMemoizedSerializedSize = -1;

        private byte memoizedIsInitialized = -1;

        @java.lang.Override
        public final boolean isInitialized()
        {
            byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1)
                return true;
            if (isInitialized == 0)
                return false;

            this.memoizedIsInitialized = 1;
            return true;
        }

        @java.lang.Override
        public void writeTo(final com.google.protobuf.CodedOutputStream output) throws java.io.IOException
        {
            getSerializedSize();
            if (getIdList().size() > 0)
            {
                output.writeUInt32NoTag(10);
                output.writeUInt32NoTag(this.idMemoizedSerializedSize);
            }
            for (int i = 0; i < this.id_.size(); i++)
            {
                output.writeSInt64NoTag(this.id_.getLong(i));
            }
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                output.writeMessage(5, getDenseinfo());
            }
            if (getLatList().size() > 0)
            {
                output.writeUInt32NoTag(66);
                output.writeUInt32NoTag(this.latMemoizedSerializedSize);
            }
            for (int i = 0; i < this.lat_.size(); i++)
            {
                output.writeSInt64NoTag(this.lat_.getLong(i));
            }
            if (getLonList().size() > 0)
            {
                output.writeUInt32NoTag(74);
                output.writeUInt32NoTag(this.lonMemoizedSerializedSize);
            }
            for (int i = 0; i < this.lon_.size(); i++)
            {
                output.writeSInt64NoTag(this.lon_.getLong(i));
            }
            if (getKeysValsList().size() > 0)
            {
                output.writeUInt32NoTag(82);
                output.writeUInt32NoTag(this.keysValsMemoizedSerializedSize);
            }
            for (int i = 0; i < this.keysVals_.size(); i++)
            {
                output.writeInt32NoTag(this.keysVals_.getInt(i));
            }
            getUnknownFields().writeTo(output);
        }

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

            size = 0;
            {
                int dataSize = 0;
                for (int i = 0; i < this.id_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeSInt64SizeNoTag(this.id_.getLong(i));
                }
                size += dataSize;
                if (!getIdList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.idMemoizedSerializedSize = dataSize;
            }
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getDenseinfo());
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.lat_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeSInt64SizeNoTag(this.lat_.getLong(i));
                }
                size += dataSize;
                if (!getLatList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.latMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.lon_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeSInt64SizeNoTag(this.lon_.getLong(i));
                }
                size += dataSize;
                if (!getLonList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.lonMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.keysVals_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(this.keysVals_.getInt(i));
                }
                size += dataSize;
                if (!getKeysValsList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.keysValsMemoizedSerializedSize = dataSize;
            }
            size += getUnknownFields().getSerializedSize();
            this.memoizedSize = size;
            return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj)
        {
            if (obj == this)
            {
                return true;
            }
            if (!(obj instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes))
            {
                return super.equals(obj);
            }
            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes other =
                    (nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes) obj;

            if (!getIdList().equals(other.getIdList()))
                return false;
            if (hasDenseinfo() != other.hasDenseinfo())
                return false;
            if (hasDenseinfo())
            {
                if (!getDenseinfo().equals(other.getDenseinfo()))
                    return false;
            }
            if (!getLatList().equals(other.getLatList()))
                return false;
            if (!getLonList().equals(other.getLonList()))
                return false;
            if (!getKeysValsList().equals(other.getKeysValsList()))
                return false;
            if (!getUnknownFields().equals(other.getUnknownFields()))
                return false;
            return true;
        }

        @java.lang.Override
        public int hashCode()
        {
            if (this.memoizedHashCode != 0)
            {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = (19 * hash) + getDescriptor().hashCode();
            if (getIdCount() > 0)
            {
                hash = (37 * hash) + ID_FIELD_NUMBER;
                hash = (53 * hash) + getIdList().hashCode();
            }
            if (hasDenseinfo())
            {
                hash = (37 * hash) + DENSEINFO_FIELD_NUMBER;
                hash = (53 * hash) + getDenseinfo().hashCode();
            }
            if (getLatCount() > 0)
            {
                hash = (37 * hash) + LAT_FIELD_NUMBER;
                hash = (53 * hash) + getLatList().hashCode();
            }
            if (getLonCount() > 0)
            {
                hash = (37 * hash) + LON_FIELD_NUMBER;
                hash = (53 * hash) + getLonList().hashCode();
            }
            if (getKeysValsCount() > 0)
            {
                hash = (37 * hash) + KEYS_VALS_FIELD_NUMBER;
                hash = (53 * hash) + getKeysValsList().hashCode();
            }
            hash = (29 * hash) + getUnknownFields().hashCode();
            this.memoizedHashCode = hash;
            return hash;
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes parseFrom(
                final java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes parseFrom(
                final java.nio.ByteBuffer data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes parseFrom(
                final com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes parseFrom(
                final com.google.protobuf.ByteString data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes parseFrom(final byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes parseFrom(final byte[] data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes parseFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes parseFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes parseDelimitedFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes parseDelimitedFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes parseFrom(
                final com.google.protobuf.CodedInputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes parseFrom(
                final com.google.protobuf.CodedInputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        @java.lang.Override
        public Builder newBuilderForType()
        {
            return newBuilder();
        }

        public static Builder newBuilder()
        {
            return DEFAULT_INSTANCE.toBuilder();
        }

        public static Builder newBuilder(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes prototype)
        {
            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }

        @java.lang.Override
        public Builder toBuilder()
        {
            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
        }

        @java.lang.Override
        protected Builder newBuilderForType(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
        {
            Builder builder = new Builder(parent);
            return builder;
        }

        /**
         * Protobuf type {@code OSMPBF.DenseNodes}
         */
        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:OSMPBF.DenseNodes)
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodesOrBuilder
        {
            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_DenseNodes_descriptor;
            }

            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_DenseNodes_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.class,
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.Builder.class);
            }

            // Construct using nl.tudelft.simulation.dsol.animation.gis.osm.pbf.Osmformat.DenseNodes.newBuilder()
            private Builder()
            {
                maybeForceBuilderInitialization();
            }

            private Builder(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
            {
                super(parent);
                maybeForceBuilderInitialization();
            }

            private void maybeForceBuilderInitialization()
            {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders)
                {
                    internalGetDenseinfoFieldBuilder();
                }
            }

            @java.lang.Override
            public Builder clear()
            {
                super.clear();
                this.bitField0_ = 0;
                this.id_ = emptyLongList();
                this.denseinfo_ = null;
                if (this.denseinfoBuilder_ != null)
                {
                    this.denseinfoBuilder_.dispose();
                    this.denseinfoBuilder_ = null;
                }
                this.lat_ = emptyLongList();
                this.lon_ = emptyLongList();
                this.keysVals_ = emptyIntList();
                return this;
            }

            @java.lang.Override
            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_DenseNodes_descriptor;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes getDefaultInstanceForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.getDefaultInstance();
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes build()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes result = buildPartial();
                if (!result.isInitialized())
                {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes buildPartial()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes result =
                        new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes(this);
                if (this.bitField0_ != 0)
                {
                    buildPartial0(result);
                }
                onBuilt();
                return result;
            }

            private void buildPartial0(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes result)
            {
                int from_bitField0_ = this.bitField0_;
                if (((from_bitField0_ & 0x00000001) != 0))
                {
                    this.id_.makeImmutable();
                    result.id_ = this.id_;
                }
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000002) != 0))
                {
                    result.denseinfo_ = this.denseinfoBuilder_ == null ? this.denseinfo_ : this.denseinfoBuilder_.build();
                    to_bitField0_ |= 0x00000001;
                }
                if (((from_bitField0_ & 0x00000004) != 0))
                {
                    this.lat_.makeImmutable();
                    result.lat_ = this.lat_;
                }
                if (((from_bitField0_ & 0x00000008) != 0))
                {
                    this.lon_.makeImmutable();
                    result.lon_ = this.lon_;
                }
                if (((from_bitField0_ & 0x00000010) != 0))
                {
                    this.keysVals_.makeImmutable();
                    result.keysVals_ = this.keysVals_;
                }
                result.bitField0_ |= to_bitField0_;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.Message other)
            {
                if (other instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes)
                {
                    return mergeFrom((nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes) other);
                }
                else
                {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes other)
            {
                if (other == nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes.getDefaultInstance())
                    return this;
                if (!other.id_.isEmpty())
                {
                    if (this.id_.isEmpty())
                    {
                        this.id_ = other.id_;
                        this.id_.makeImmutable();
                        this.bitField0_ |= 0x00000001;
                    }
                    else
                    {
                        ensureIdIsMutable();
                        this.id_.addAll(other.id_);
                    }
                    onChanged();
                }
                if (other.hasDenseinfo())
                {
                    mergeDenseinfo(other.getDenseinfo());
                }
                if (!other.lat_.isEmpty())
                {
                    if (this.lat_.isEmpty())
                    {
                        this.lat_ = other.lat_;
                        this.lat_.makeImmutable();
                        this.bitField0_ |= 0x00000004;
                    }
                    else
                    {
                        ensureLatIsMutable();
                        this.lat_.addAll(other.lat_);
                    }
                    onChanged();
                }
                if (!other.lon_.isEmpty())
                {
                    if (this.lon_.isEmpty())
                    {
                        this.lon_ = other.lon_;
                        this.lon_.makeImmutable();
                        this.bitField0_ |= 0x00000008;
                    }
                    else
                    {
                        ensureLonIsMutable();
                        this.lon_.addAll(other.lon_);
                    }
                    onChanged();
                }
                if (!other.keysVals_.isEmpty())
                {
                    if (this.keysVals_.isEmpty())
                    {
                        this.keysVals_ = other.keysVals_;
                        this.keysVals_.makeImmutable();
                        this.bitField0_ |= 0x00000010;
                    }
                    else
                    {
                        ensureKeysValsIsMutable();
                        this.keysVals_.addAll(other.keysVals_);
                    }
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                onChanged();
                return this;
            }

            @java.lang.Override
            public final boolean isInitialized()
            {
                return true;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
            {
                if (extensionRegistry == null)
                {
                    throw new java.lang.NullPointerException();
                }
                try
                {
                    boolean done = false;
                    while (!done)
                    {
                        int tag = input.readTag();
                        switch (tag)
                        {
                            case 0:
                                done = true;
                                break;
                            case 8:
                            {
                                long v = input.readSInt64();
                                ensureIdIsMutable();
                                this.id_.addLong(v);
                                break;
                            } // case 8
                            case 10:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureIdIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.id_.addLong(input.readSInt64());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 10
                            case 42:
                            {
                                input.readMessage(internalGetDenseinfoFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x00000002;
                                break;
                            } // case 42
                            case 64:
                            {
                                long v = input.readSInt64();
                                ensureLatIsMutable();
                                this.lat_.addLong(v);
                                break;
                            } // case 64
                            case 66:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureLatIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.lat_.addLong(input.readSInt64());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 66
                            case 72:
                            {
                                long v = input.readSInt64();
                                ensureLonIsMutable();
                                this.lon_.addLong(v);
                                break;
                            } // case 72
                            case 74:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureLonIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.lon_.addLong(input.readSInt64());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 74
                            case 80:
                            {
                                int v = input.readInt32();
                                ensureKeysValsIsMutable();
                                this.keysVals_.addInt(v);
                                break;
                            } // case 80
                            case 82:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureKeysValsIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.keysVals_.addInt(input.readInt32());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 82
                            default:
                            {
                                if (!super.parseUnknownField(input, extensionRegistry, tag))
                                {
                                    done = true; // was an endgroup tag
                                }
                                break;
                            } // default:
                        } // switch (tag)
                    } // while (!done)
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.unwrapIOException();
                }
                finally
                {
                    onChanged();
                } // finally
                return this;
            }

            private int bitField0_;

            private com.google.protobuf.Internal.LongList id_ = emptyLongList();

            private void ensureIdIsMutable()
            {
                if (!this.id_.isModifiable())
                {
                    this.id_ = makeMutableCopy(this.id_);
                }
                this.bitField0_ |= 0x00000001;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 id = 1 [packed = true];</code>
             * @return A list containing the id.
             */
            @Override
            public java.util.List<java.lang.Long> getIdList()
            {
                this.id_.makeImmutable();
                return this.id_;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 id = 1 [packed = true];</code>
             * @return The count of id.
             */
            @Override
            public int getIdCount()
            {
                return this.id_.size();
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 id = 1 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The id at the given index.
             */
            @Override
            public long getId(final int index)
            {
                return this.id_.getLong(index);
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 id = 1 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The id to set.
             * @return This builder for chaining.
             */
            public Builder setId(final int index, final long value)
            {

                ensureIdIsMutable();
                this.id_.setLong(index, value);
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 id = 1 [packed = true];</code>
             * @param value The id to add.
             * @return This builder for chaining.
             */
            public Builder addId(final long value)
            {

                ensureIdIsMutable();
                this.id_.addLong(value);
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 id = 1 [packed = true];</code>
             * @param values The id to add.
             * @return This builder for chaining.
             */
            public Builder addAllId(final java.lang.Iterable<? extends java.lang.Long> values)
            {
                ensureIdIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.id_);
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 id = 1 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearId()
            {
                this.id_ = emptyLongList();
                this.bitField0_ = (this.bitField0_ & ~0x00000001);
                onChanged();
                return this;
            }

            private nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo denseinfo_;

            private com.google.protobuf.SingleFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfoOrBuilder> denseinfoBuilder_;

            /**
             * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
             * @return Whether the denseinfo field is set.
             */
            @Override
            public boolean hasDenseinfo()
            {
                return ((this.bitField0_ & 0x00000002) != 0);
            }

            /**
             * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
             * @return The denseinfo.
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo getDenseinfo()
            {
                if (this.denseinfoBuilder_ == null)
                {
                    return this.denseinfo_ == null
                            ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.getDefaultInstance()
                            : this.denseinfo_;
                }
                else
                {
                    return this.denseinfoBuilder_.getMessage();
                }
            }

            /**
             * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
             */
            public Builder setDenseinfo(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo value)
            {
                if (this.denseinfoBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    this.denseinfo_ = value;
                }
                else
                {
                    this.denseinfoBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
             */
            public Builder setDenseinfo(
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.Builder builderForValue)
            {
                if (this.denseinfoBuilder_ == null)
                {
                    this.denseinfo_ = builderForValue.build();
                }
                else
                {
                    this.denseinfoBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
             */
            public Builder mergeDenseinfo(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo value)
            {
                if (this.denseinfoBuilder_ == null)
                {
                    if (((this.bitField0_ & 0x00000002) != 0) && this.denseinfo_ != null
                            && this.denseinfo_ != nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo
                                    .getDefaultInstance())
                    {
                        getDenseinfoBuilder().mergeFrom(value);
                    }
                    else
                    {
                        this.denseinfo_ = value;
                    }
                }
                else
                {
                    this.denseinfoBuilder_.mergeFrom(value);
                }
                if (this.denseinfo_ != null)
                {
                    this.bitField0_ |= 0x00000002;
                    onChanged();
                }
                return this;
            }

            /**
             * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
             */
            public Builder clearDenseinfo()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000002);
                this.denseinfo_ = null;
                if (this.denseinfoBuilder_ != null)
                {
                    this.denseinfoBuilder_.dispose();
                    this.denseinfoBuilder_ = null;
                }
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.Builder getDenseinfoBuilder()
            {
                this.bitField0_ |= 0x00000002;
                onChanged();
                return internalGetDenseinfoFieldBuilder().getBuilder();
            }

            /**
             * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfoOrBuilder getDenseinfoOrBuilder()
            {
                if (this.denseinfoBuilder_ != null)
                {
                    return this.denseinfoBuilder_.getMessageOrBuilder();
                }
                else
                {
                    return this.denseinfo_ == null
                            ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.getDefaultInstance()
                            : this.denseinfo_;
                }
            }

            /**
             * <code>optional .OSMPBF.DenseInfo denseinfo = 5;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfoOrBuilder> internalGetDenseinfoFieldBuilder()
            {
                if (this.denseinfoBuilder_ == null)
                {
                    this.denseinfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfo.Builder,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseInfoOrBuilder>(getDenseinfo(),
                                    getParentForChildren(), isClean());
                    this.denseinfo_ = null;
                }
                return this.denseinfoBuilder_;
            }

            private com.google.protobuf.Internal.LongList lat_ = emptyLongList();

            private void ensureLatIsMutable()
            {
                if (!this.lat_.isModifiable())
                {
                    this.lat_ = makeMutableCopy(this.lat_);
                }
                this.bitField0_ |= 0x00000004;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 lat = 8 [packed = true];</code>
             * @return A list containing the lat.
             */
            @Override
            public java.util.List<java.lang.Long> getLatList()
            {
                this.lat_.makeImmutable();
                return this.lat_;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 lat = 8 [packed = true];</code>
             * @return The count of lat.
             */
            @Override
            public int getLatCount()
            {
                return this.lat_.size();
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 lat = 8 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The lat at the given index.
             */
            @Override
            public long getLat(final int index)
            {
                return this.lat_.getLong(index);
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 lat = 8 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The lat to set.
             * @return This builder for chaining.
             */
            public Builder setLat(final int index, final long value)
            {

                ensureLatIsMutable();
                this.lat_.setLong(index, value);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 lat = 8 [packed = true];</code>
             * @param value The lat to add.
             * @return This builder for chaining.
             */
            public Builder addLat(final long value)
            {

                ensureLatIsMutable();
                this.lat_.addLong(value);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 lat = 8 [packed = true];</code>
             * @param values The lat to add.
             * @return This builder for chaining.
             */
            public Builder addAllLat(final java.lang.Iterable<? extends java.lang.Long> values)
            {
                ensureLatIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.lat_);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 lat = 8 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearLat()
            {
                this.lat_ = emptyLongList();
                this.bitField0_ = (this.bitField0_ & ~0x00000004);
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.LongList lon_ = emptyLongList();

            private void ensureLonIsMutable()
            {
                if (!this.lon_.isModifiable())
                {
                    this.lon_ = makeMutableCopy(this.lon_);
                }
                this.bitField0_ |= 0x00000008;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 lon = 9 [packed = true];</code>
             * @return A list containing the lon.
             */
            @Override
            public java.util.List<java.lang.Long> getLonList()
            {
                this.lon_.makeImmutable();
                return this.lon_;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 lon = 9 [packed = true];</code>
             * @return The count of lon.
             */
            @Override
            public int getLonCount()
            {
                return this.lon_.size();
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 lon = 9 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The lon at the given index.
             */
            @Override
            public long getLon(final int index)
            {
                return this.lon_.getLong(index);
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 lon = 9 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The lon to set.
             * @return This builder for chaining.
             */
            public Builder setLon(final int index, final long value)
            {

                ensureLonIsMutable();
                this.lon_.setLong(index, value);
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 lon = 9 [packed = true];</code>
             * @param value The lon to add.
             * @return This builder for chaining.
             */
            public Builder addLon(final long value)
            {

                ensureLonIsMutable();
                this.lon_.addLong(value);
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 lon = 9 [packed = true];</code>
             * @param values The lon to add.
             * @return This builder for chaining.
             */
            public Builder addAllLon(final java.lang.Iterable<? extends java.lang.Long> values)
            {
                ensureLonIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.lon_);
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 lon = 9 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearLon()
            {
                this.lon_ = emptyLongList();
                this.bitField0_ = (this.bitField0_ & ~0x00000008);
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.IntList keysVals_ = emptyIntList();

            private void ensureKeysValsIsMutable()
            {
                if (!this.keysVals_.isModifiable())
                {
                    this.keysVals_ = makeMutableCopy(this.keysVals_);
                }
                this.bitField0_ |= 0x00000010;
            }

            /**
             * <pre>
             * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
             * </pre>
             *
             * <code>repeated int32 keys_vals = 10 [packed = true];</code>
             * @return A list containing the keysVals.
             */
            @Override
            public java.util.List<java.lang.Integer> getKeysValsList()
            {
                this.keysVals_.makeImmutable();
                return this.keysVals_;
            }

            /**
             * <pre>
             * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
             * </pre>
             *
             * <code>repeated int32 keys_vals = 10 [packed = true];</code>
             * @return The count of keysVals.
             */
            @Override
            public int getKeysValsCount()
            {
                return this.keysVals_.size();
            }

            /**
             * <pre>
             * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
             * </pre>
             *
             * <code>repeated int32 keys_vals = 10 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The keysVals at the given index.
             */
            @Override
            public int getKeysVals(final int index)
            {
                return this.keysVals_.getInt(index);
            }

            /**
             * <pre>
             * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
             * </pre>
             *
             * <code>repeated int32 keys_vals = 10 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The keysVals to set.
             * @return This builder for chaining.
             */
            public Builder setKeysVals(final int index, final int value)
            {

                ensureKeysValsIsMutable();
                this.keysVals_.setInt(index, value);
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
             * </pre>
             *
             * <code>repeated int32 keys_vals = 10 [packed = true];</code>
             * @param value The keysVals to add.
             * @return This builder for chaining.
             */
            public Builder addKeysVals(final int value)
            {

                ensureKeysValsIsMutable();
                this.keysVals_.addInt(value);
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
             * </pre>
             *
             * <code>repeated int32 keys_vals = 10 [packed = true];</code>
             * @param values The keysVals to add.
             * @return This builder for chaining.
             */
            public Builder addAllKeysVals(final java.lang.Iterable<? extends java.lang.Integer> values)
            {
                ensureKeysValsIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.keysVals_);
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless.
             * </pre>
             *
             * <code>repeated int32 keys_vals = 10 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearKeysVals()
            {
                this.keysVals_ = emptyIntList();
                this.bitField0_ = (this.bitField0_ & ~0x00000010);
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:OSMPBF.DenseNodes)
        }

        // @@protoc_insertion_point(class_scope:OSMPBF.DenseNodes)
        private static final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes DEFAULT_INSTANCE;
        static
        {
            DEFAULT_INSTANCE = new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes();
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes getDefaultInstance()
        {
            return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<DenseNodes> PARSER =
                new com.google.protobuf.AbstractParser<DenseNodes>()
                {
                    @java.lang.Override
                    public DenseNodes parsePartialFrom(final com.google.protobuf.CodedInputStream input,
                            final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                            throws com.google.protobuf.InvalidProtocolBufferException
                    {
                        Builder builder = newBuilder();
                        try
                        {
                            builder.mergeFrom(input, extensionRegistry);
                        }
                        catch (com.google.protobuf.InvalidProtocolBufferException e)
                        {
                            throw e.setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (com.google.protobuf.UninitializedMessageException e)
                        {
                            throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                        }
                        catch (java.io.IOException e)
                        {
                            throw new com.google.protobuf.InvalidProtocolBufferException(e)
                                    .setUnfinishedMessage(builder.buildPartial());
                        }
                        return builder.buildPartial();
                    }
                };

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

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

        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.DenseNodes getDefaultInstanceForType()
        {
            return DEFAULT_INSTANCE;
        }

    }

    public interface WayOrBuilder extends
            // @@protoc_insertion_point(interface_extends:OSMPBF.Way)
            com.google.protobuf.MessageOrBuilder
    {

        /**
         * <code>required int64 id = 1;</code>
         * @return Whether the id field is set.
         */
        boolean hasId();

        /**
         * <code>required int64 id = 1;</code>
         * @return The id.
         */
        long getId();

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @return A list containing the keys.
         */
        java.util.List<java.lang.Integer> getKeysList();

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @return The count of keys.
         */
        int getKeysCount();

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The keys at the given index.
         */
        int getKeys(int index);

        /**
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @return A list containing the vals.
         */
        java.util.List<java.lang.Integer> getValsList();

        /**
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @return The count of vals.
         */
        int getValsCount();

        /**
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The vals at the given index.
         */
        int getVals(int index);

        /**
         * <code>optional .OSMPBF.Info info = 4;</code>
         * @return Whether the info field is set.
         */
        boolean hasInfo();

        /**
         * <code>optional .OSMPBF.Info info = 4;</code>
         * @return The info.
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info getInfo();

        /**
         * <code>optional .OSMPBF.Info info = 4;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder getInfoOrBuilder();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 refs = 8 [packed = true];</code>
         * @return A list containing the refs.
         */
        java.util.List<java.lang.Long> getRefsList();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 refs = 8 [packed = true];</code>
         * @return The count of refs.
         */
        int getRefsCount();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 refs = 8 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The refs at the given index.
         */
        long getRefs(int index);

        /**
         * <pre>
         * The following two fields are optional. They are only used in a special
         * format where node locations are also added to the ways. This makes the
         * files larger, but allows creating way geometries directly.
         *
         * If this is used, you MUST set the optional_features tag "LocationsOnWays"
         * and the number of values in refs, lat, and lon MUST be the same.
         * </pre>
         *
         * <code>repeated sint64 lat = 9 [packed = true];</code>
         * @return A list containing the lat.
         */
        java.util.List<java.lang.Long> getLatList();

        /**
         * <pre>
         * The following two fields are optional. They are only used in a special
         * format where node locations are also added to the ways. This makes the
         * files larger, but allows creating way geometries directly.
         *
         * If this is used, you MUST set the optional_features tag "LocationsOnWays"
         * and the number of values in refs, lat, and lon MUST be the same.
         * </pre>
         *
         * <code>repeated sint64 lat = 9 [packed = true];</code>
         * @return The count of lat.
         */
        int getLatCount();

        /**
         * <pre>
         * The following two fields are optional. They are only used in a special
         * format where node locations are also added to the ways. This makes the
         * files larger, but allows creating way geometries directly.
         *
         * If this is used, you MUST set the optional_features tag "LocationsOnWays"
         * and the number of values in refs, lat, and lon MUST be the same.
         * </pre>
         *
         * <code>repeated sint64 lat = 9 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The lat at the given index.
         */
        long getLat(int index);

        /**
         * <pre>
         * DELTA coded, optional
         * </pre>
         *
         * <code>repeated sint64 lon = 10 [packed = true];</code>
         * @return A list containing the lon.
         */
        java.util.List<java.lang.Long> getLonList();

        /**
         * <pre>
         * DELTA coded, optional
         * </pre>
         *
         * <code>repeated sint64 lon = 10 [packed = true];</code>
         * @return The count of lon.
         */
        int getLonCount();

        /**
         * <pre>
         * DELTA coded, optional
         * </pre>
         *
         * <code>repeated sint64 lon = 10 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The lon at the given index.
         */
        long getLon(int index);
    }

    /**
     * Protobuf type {@code OSMPBF.Way}
     */
    public static final class Way extends com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:OSMPBF.Way)
            WayOrBuilder
    {
        private static final long serialVersionUID = 0L;
        static
        {
            com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                    com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 31, /* patch= */ 1,
                    /* suffix= */ "", Way.class.getName());
        }

        // Use Way.newBuilder() to construct.
        private Way(final com.google.protobuf.GeneratedMessage.Builder<?> builder)
        {
            super(builder);
        }

        private Way()
        {
            this.keys_ = emptyIntList();
            this.vals_ = emptyIntList();
            this.refs_ = emptyLongList();
            this.lat_ = emptyLongList();
            this.lon_ = emptyLongList();
        }

        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Way_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Way_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.class,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.Builder.class);
        }

        private int bitField0_;

        public static final int ID_FIELD_NUMBER = 1;

        private long id_ = 0L;

        /**
         * <code>required int64 id = 1;</code>
         * @return Whether the id field is set.
         */
        @java.lang.Override
        public boolean hasId()
        {
            return ((this.bitField0_ & 0x00000001) != 0);
        }

        /**
         * <code>required int64 id = 1;</code>
         * @return The id.
         */
        @java.lang.Override
        public long getId()
        {
            return this.id_;
        }

        public static final int KEYS_FIELD_NUMBER = 2;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.IntList keys_ = emptyIntList();

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @return A list containing the keys.
         */
        @java.lang.Override
        public java.util.List<java.lang.Integer> getKeysList()
        {
            return this.keys_;
        }

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @return The count of keys.
         */
        @Override
        public int getKeysCount()
        {
            return this.keys_.size();
        }

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The keys at the given index.
         */
        @Override
        public int getKeys(final int index)
        {
            return this.keys_.getInt(index);
        }

        private int keysMemoizedSerializedSize = -1;

        public static final int VALS_FIELD_NUMBER = 3;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.IntList vals_ = emptyIntList();

        /**
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @return A list containing the vals.
         */
        @java.lang.Override
        public java.util.List<java.lang.Integer> getValsList()
        {
            return this.vals_;
        }

        /**
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @return The count of vals.
         */
        @Override
        public int getValsCount()
        {
            return this.vals_.size();
        }

        /**
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The vals at the given index.
         */
        @Override
        public int getVals(final int index)
        {
            return this.vals_.getInt(index);
        }

        private int valsMemoizedSerializedSize = -1;

        public static final int INFO_FIELD_NUMBER = 4;

        private nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info info_;

        /**
         * <code>optional .OSMPBF.Info info = 4;</code>
         * @return Whether the info field is set.
         */
        @java.lang.Override
        public boolean hasInfo()
        {
            return ((this.bitField0_ & 0x00000002) != 0);
        }

        /**
         * <code>optional .OSMPBF.Info info = 4;</code>
         * @return The info.
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info getInfo()
        {
            return this.info_ == null ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance()
                    : this.info_;
        }

        /**
         * <code>optional .OSMPBF.Info info = 4;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder getInfoOrBuilder()
        {
            return this.info_ == null ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance()
                    : this.info_;
        }

        public static final int REFS_FIELD_NUMBER = 8;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.LongList refs_ = emptyLongList();

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 refs = 8 [packed = true];</code>
         * @return A list containing the refs.
         */
        @java.lang.Override
        public java.util.List<java.lang.Long> getRefsList()
        {
            return this.refs_;
        }

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 refs = 8 [packed = true];</code>
         * @return The count of refs.
         */
        @Override
        public int getRefsCount()
        {
            return this.refs_.size();
        }

        /**
         * <pre>
         * DELTA coded
         * </pre>
         *
         * <code>repeated sint64 refs = 8 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The refs at the given index.
         */
        @Override
        public long getRefs(final int index)
        {
            return this.refs_.getLong(index);
        }

        private int refsMemoizedSerializedSize = -1;

        public static final int LAT_FIELD_NUMBER = 9;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.LongList lat_ = emptyLongList();

        /**
         * <pre>
         * The following two fields are optional. They are only used in a special
         * format where node locations are also added to the ways. This makes the
         * files larger, but allows creating way geometries directly.
         *
         * If this is used, you MUST set the optional_features tag "LocationsOnWays"
         * and the number of values in refs, lat, and lon MUST be the same.
         * </pre>
         *
         * <code>repeated sint64 lat = 9 [packed = true];</code>
         * @return A list containing the lat.
         */
        @java.lang.Override
        public java.util.List<java.lang.Long> getLatList()
        {
            return this.lat_;
        }

        /**
         * <pre>
         * The following two fields are optional. They are only used in a special
         * format where node locations are also added to the ways. This makes the
         * files larger, but allows creating way geometries directly.
         *
         * If this is used, you MUST set the optional_features tag "LocationsOnWays"
         * and the number of values in refs, lat, and lon MUST be the same.
         * </pre>
         *
         * <code>repeated sint64 lat = 9 [packed = true];</code>
         * @return The count of lat.
         */
        @Override
        public int getLatCount()
        {
            return this.lat_.size();
        }

        /**
         * <pre>
         * The following two fields are optional. They are only used in a special
         * format where node locations are also added to the ways. This makes the
         * files larger, but allows creating way geometries directly.
         *
         * If this is used, you MUST set the optional_features tag "LocationsOnWays"
         * and the number of values in refs, lat, and lon MUST be the same.
         * </pre>
         *
         * <code>repeated sint64 lat = 9 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The lat at the given index.
         */
        @Override
        public long getLat(final int index)
        {
            return this.lat_.getLong(index);
        }

        private int latMemoizedSerializedSize = -1;

        public static final int LON_FIELD_NUMBER = 10;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.LongList lon_ = emptyLongList();

        /**
         * <pre>
         * DELTA coded, optional
         * </pre>
         *
         * <code>repeated sint64 lon = 10 [packed = true];</code>
         * @return A list containing the lon.
         */
        @java.lang.Override
        public java.util.List<java.lang.Long> getLonList()
        {
            return this.lon_;
        }

        /**
         * <pre>
         * DELTA coded, optional
         * </pre>
         *
         * <code>repeated sint64 lon = 10 [packed = true];</code>
         * @return The count of lon.
         */
        @Override
        public int getLonCount()
        {
            return this.lon_.size();
        }

        /**
         * <pre>
         * DELTA coded, optional
         * </pre>
         *
         * <code>repeated sint64 lon = 10 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The lon at the given index.
         */
        @Override
        public long getLon(final int index)
        {
            return this.lon_.getLong(index);
        }

        private int lonMemoizedSerializedSize = -1;

        private byte memoizedIsInitialized = -1;

        @java.lang.Override
        public final boolean isInitialized()
        {
            byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1)
                return true;
            if (isInitialized == 0)
                return false;

            if (!hasId())
            {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }

        @java.lang.Override
        public void writeTo(final com.google.protobuf.CodedOutputStream output) throws java.io.IOException
        {
            getSerializedSize();
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                output.writeInt64(1, this.id_);
            }
            if (getKeysList().size() > 0)
            {
                output.writeUInt32NoTag(18);
                output.writeUInt32NoTag(this.keysMemoizedSerializedSize);
            }
            for (int i = 0; i < this.keys_.size(); i++)
            {
                output.writeUInt32NoTag(this.keys_.getInt(i));
            }
            if (getValsList().size() > 0)
            {
                output.writeUInt32NoTag(26);
                output.writeUInt32NoTag(this.valsMemoizedSerializedSize);
            }
            for (int i = 0; i < this.vals_.size(); i++)
            {
                output.writeUInt32NoTag(this.vals_.getInt(i));
            }
            if (((this.bitField0_ & 0x00000002) != 0))
            {
                output.writeMessage(4, getInfo());
            }
            if (getRefsList().size() > 0)
            {
                output.writeUInt32NoTag(66);
                output.writeUInt32NoTag(this.refsMemoizedSerializedSize);
            }
            for (int i = 0; i < this.refs_.size(); i++)
            {
                output.writeSInt64NoTag(this.refs_.getLong(i));
            }
            if (getLatList().size() > 0)
            {
                output.writeUInt32NoTag(74);
                output.writeUInt32NoTag(this.latMemoizedSerializedSize);
            }
            for (int i = 0; i < this.lat_.size(); i++)
            {
                output.writeSInt64NoTag(this.lat_.getLong(i));
            }
            if (getLonList().size() > 0)
            {
                output.writeUInt32NoTag(82);
                output.writeUInt32NoTag(this.lonMemoizedSerializedSize);
            }
            for (int i = 0; i < this.lon_.size(); i++)
            {
                output.writeSInt64NoTag(this.lon_.getLong(i));
            }
            getUnknownFields().writeTo(output);
        }

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

            size = 0;
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeInt64Size(1, this.id_);
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.keys_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(this.keys_.getInt(i));
                }
                size += dataSize;
                if (!getKeysList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.keysMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.vals_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(this.vals_.getInt(i));
                }
                size += dataSize;
                if (!getValsList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.valsMemoizedSerializedSize = dataSize;
            }
            if (((this.bitField0_ & 0x00000002) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getInfo());
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.refs_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeSInt64SizeNoTag(this.refs_.getLong(i));
                }
                size += dataSize;
                if (!getRefsList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.refsMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.lat_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeSInt64SizeNoTag(this.lat_.getLong(i));
                }
                size += dataSize;
                if (!getLatList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.latMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.lon_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeSInt64SizeNoTag(this.lon_.getLong(i));
                }
                size += dataSize;
                if (!getLonList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.lonMemoizedSerializedSize = dataSize;
            }
            size += getUnknownFields().getSerializedSize();
            this.memoizedSize = size;
            return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj)
        {
            if (obj == this)
            {
                return true;
            }
            if (!(obj instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way))
            {
                return super.equals(obj);
            }
            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way other =
                    (nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way) obj;

            if (hasId() != other.hasId())
                return false;
            if (hasId())
            {
                if (getId() != other.getId())
                    return false;
            }
            if (!getKeysList().equals(other.getKeysList()))
                return false;
            if (!getValsList().equals(other.getValsList()))
                return false;
            if (hasInfo() != other.hasInfo())
                return false;
            if (hasInfo())
            {
                if (!getInfo().equals(other.getInfo()))
                    return false;
            }
            if (!getRefsList().equals(other.getRefsList()))
                return false;
            if (!getLatList().equals(other.getLatList()))
                return false;
            if (!getLonList().equals(other.getLonList()))
                return false;
            if (!getUnknownFields().equals(other.getUnknownFields()))
                return false;
            return true;
        }

        @java.lang.Override
        public int hashCode()
        {
            if (this.memoizedHashCode != 0)
            {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = (19 * hash) + getDescriptor().hashCode();
            if (hasId())
            {
                hash = (37 * hash) + ID_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getId());
            }
            if (getKeysCount() > 0)
            {
                hash = (37 * hash) + KEYS_FIELD_NUMBER;
                hash = (53 * hash) + getKeysList().hashCode();
            }
            if (getValsCount() > 0)
            {
                hash = (37 * hash) + VALS_FIELD_NUMBER;
                hash = (53 * hash) + getValsList().hashCode();
            }
            if (hasInfo())
            {
                hash = (37 * hash) + INFO_FIELD_NUMBER;
                hash = (53 * hash) + getInfo().hashCode();
            }
            if (getRefsCount() > 0)
            {
                hash = (37 * hash) + REFS_FIELD_NUMBER;
                hash = (53 * hash) + getRefsList().hashCode();
            }
            if (getLatCount() > 0)
            {
                hash = (37 * hash) + LAT_FIELD_NUMBER;
                hash = (53 * hash) + getLatList().hashCode();
            }
            if (getLonCount() > 0)
            {
                hash = (37 * hash) + LON_FIELD_NUMBER;
                hash = (53 * hash) + getLonList().hashCode();
            }
            hash = (29 * hash) + getUnknownFields().hashCode();
            this.memoizedHashCode = hash;
            return hash;
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way parseFrom(final java.nio.ByteBuffer data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way parseFrom(final java.nio.ByteBuffer data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way parseFrom(
                final com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way parseFrom(
                final com.google.protobuf.ByteString data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way parseFrom(final byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way parseFrom(final byte[] data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way parseFrom(final java.io.InputStream input)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way parseFrom(final java.io.InputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way parseDelimitedFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way parseDelimitedFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way parseFrom(
                final com.google.protobuf.CodedInputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way parseFrom(
                final com.google.protobuf.CodedInputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        @java.lang.Override
        public Builder newBuilderForType()
        {
            return newBuilder();
        }

        public static Builder newBuilder()
        {
            return DEFAULT_INSTANCE.toBuilder();
        }

        public static Builder newBuilder(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way prototype)
        {
            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }

        @java.lang.Override
        public Builder toBuilder()
        {
            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
        }

        @java.lang.Override
        protected Builder newBuilderForType(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
        {
            Builder builder = new Builder(parent);
            return builder;
        }

        /**
         * Protobuf type {@code OSMPBF.Way}
         */
        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:OSMPBF.Way)
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.WayOrBuilder
        {
            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Way_descriptor;
            }

            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Way_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.class,
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.Builder.class);
            }

            // Construct using nl.tudelft.simulation.dsol.animation.gis.osm.pbf.Osmformat.Way.newBuilder()
            private Builder()
            {
                maybeForceBuilderInitialization();
            }

            private Builder(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
            {
                super(parent);
                maybeForceBuilderInitialization();
            }

            private void maybeForceBuilderInitialization()
            {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders)
                {
                    internalGetInfoFieldBuilder();
                }
            }

            @java.lang.Override
            public Builder clear()
            {
                super.clear();
                this.bitField0_ = 0;
                this.id_ = 0L;
                this.keys_ = emptyIntList();
                this.vals_ = emptyIntList();
                this.info_ = null;
                if (this.infoBuilder_ != null)
                {
                    this.infoBuilder_.dispose();
                    this.infoBuilder_ = null;
                }
                this.refs_ = emptyLongList();
                this.lat_ = emptyLongList();
                this.lon_ = emptyLongList();
                return this;
            }

            @java.lang.Override
            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Way_descriptor;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way getDefaultInstanceForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.getDefaultInstance();
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way build()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way result = buildPartial();
                if (!result.isInitialized())
                {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way buildPartial()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way result =
                        new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way(this);
                if (this.bitField0_ != 0)
                {
                    buildPartial0(result);
                }
                onBuilt();
                return result;
            }

            private void buildPartial0(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way result)
            {
                int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) != 0))
                {
                    result.id_ = this.id_;
                    to_bitField0_ |= 0x00000001;
                }
                if (((from_bitField0_ & 0x00000002) != 0))
                {
                    this.keys_.makeImmutable();
                    result.keys_ = this.keys_;
                }
                if (((from_bitField0_ & 0x00000004) != 0))
                {
                    this.vals_.makeImmutable();
                    result.vals_ = this.vals_;
                }
                if (((from_bitField0_ & 0x00000008) != 0))
                {
                    result.info_ = this.infoBuilder_ == null ? this.info_ : this.infoBuilder_.build();
                    to_bitField0_ |= 0x00000002;
                }
                if (((from_bitField0_ & 0x00000010) != 0))
                {
                    this.refs_.makeImmutable();
                    result.refs_ = this.refs_;
                }
                if (((from_bitField0_ & 0x00000020) != 0))
                {
                    this.lat_.makeImmutable();
                    result.lat_ = this.lat_;
                }
                if (((from_bitField0_ & 0x00000040) != 0))
                {
                    this.lon_.makeImmutable();
                    result.lon_ = this.lon_;
                }
                result.bitField0_ |= to_bitField0_;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.Message other)
            {
                if (other instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way)
                {
                    return mergeFrom((nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way) other);
                }
                else
                {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way other)
            {
                if (other == nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way.getDefaultInstance())
                    return this;
                if (other.hasId())
                {
                    setId(other.getId());
                }
                if (!other.keys_.isEmpty())
                {
                    if (this.keys_.isEmpty())
                    {
                        this.keys_ = other.keys_;
                        this.keys_.makeImmutable();
                        this.bitField0_ |= 0x00000002;
                    }
                    else
                    {
                        ensureKeysIsMutable();
                        this.keys_.addAll(other.keys_);
                    }
                    onChanged();
                }
                if (!other.vals_.isEmpty())
                {
                    if (this.vals_.isEmpty())
                    {
                        this.vals_ = other.vals_;
                        this.vals_.makeImmutable();
                        this.bitField0_ |= 0x00000004;
                    }
                    else
                    {
                        ensureValsIsMutable();
                        this.vals_.addAll(other.vals_);
                    }
                    onChanged();
                }
                if (other.hasInfo())
                {
                    mergeInfo(other.getInfo());
                }
                if (!other.refs_.isEmpty())
                {
                    if (this.refs_.isEmpty())
                    {
                        this.refs_ = other.refs_;
                        this.refs_.makeImmutable();
                        this.bitField0_ |= 0x00000010;
                    }
                    else
                    {
                        ensureRefsIsMutable();
                        this.refs_.addAll(other.refs_);
                    }
                    onChanged();
                }
                if (!other.lat_.isEmpty())
                {
                    if (this.lat_.isEmpty())
                    {
                        this.lat_ = other.lat_;
                        this.lat_.makeImmutable();
                        this.bitField0_ |= 0x00000020;
                    }
                    else
                    {
                        ensureLatIsMutable();
                        this.lat_.addAll(other.lat_);
                    }
                    onChanged();
                }
                if (!other.lon_.isEmpty())
                {
                    if (this.lon_.isEmpty())
                    {
                        this.lon_ = other.lon_;
                        this.lon_.makeImmutable();
                        this.bitField0_ |= 0x00000040;
                    }
                    else
                    {
                        ensureLonIsMutable();
                        this.lon_.addAll(other.lon_);
                    }
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                onChanged();
                return this;
            }

            @java.lang.Override
            public final boolean isInitialized()
            {
                if (!hasId())
                {
                    return false;
                }
                return true;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
            {
                if (extensionRegistry == null)
                {
                    throw new java.lang.NullPointerException();
                }
                try
                {
                    boolean done = false;
                    while (!done)
                    {
                        int tag = input.readTag();
                        switch (tag)
                        {
                            case 0:
                                done = true;
                                break;
                            case 8:
                            {
                                this.id_ = input.readInt64();
                                this.bitField0_ |= 0x00000001;
                                break;
                            } // case 8
                            case 16:
                            {
                                int v = input.readUInt32();
                                ensureKeysIsMutable();
                                this.keys_.addInt(v);
                                break;
                            } // case 16
                            case 18:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureKeysIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.keys_.addInt(input.readUInt32());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 18
                            case 24:
                            {
                                int v = input.readUInt32();
                                ensureValsIsMutable();
                                this.vals_.addInt(v);
                                break;
                            } // case 24
                            case 26:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureValsIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.vals_.addInt(input.readUInt32());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 26
                            case 34:
                            {
                                input.readMessage(internalGetInfoFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x00000008;
                                break;
                            } // case 34
                            case 64:
                            {
                                long v = input.readSInt64();
                                ensureRefsIsMutable();
                                this.refs_.addLong(v);
                                break;
                            } // case 64
                            case 66:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureRefsIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.refs_.addLong(input.readSInt64());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 66
                            case 72:
                            {
                                long v = input.readSInt64();
                                ensureLatIsMutable();
                                this.lat_.addLong(v);
                                break;
                            } // case 72
                            case 74:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureLatIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.lat_.addLong(input.readSInt64());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 74
                            case 80:
                            {
                                long v = input.readSInt64();
                                ensureLonIsMutable();
                                this.lon_.addLong(v);
                                break;
                            } // case 80
                            case 82:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureLonIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.lon_.addLong(input.readSInt64());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 82
                            default:
                            {
                                if (!super.parseUnknownField(input, extensionRegistry, tag))
                                {
                                    done = true; // was an endgroup tag
                                }
                                break;
                            } // default:
                        } // switch (tag)
                    } // while (!done)
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.unwrapIOException();
                }
                finally
                {
                    onChanged();
                } // finally
                return this;
            }

            private int bitField0_;

            private long id_;

            /**
             * <code>required int64 id = 1;</code>
             * @return Whether the id field is set.
             */
            @java.lang.Override
            public boolean hasId()
            {
                return ((this.bitField0_ & 0x00000001) != 0);
            }

            /**
             * <code>required int64 id = 1;</code>
             * @return The id.
             */
            @java.lang.Override
            public long getId()
            {
                return this.id_;
            }

            /**
             * <code>required int64 id = 1;</code>
             * @param value The id to set.
             * @return This builder for chaining.
             */
            public Builder setId(final long value)
            {

                this.id_ = value;
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>required int64 id = 1;</code>
             * @return This builder for chaining.
             */
            public Builder clearId()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000001);
                this.id_ = 0L;
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.IntList keys_ = emptyIntList();

            private void ensureKeysIsMutable()
            {
                if (!this.keys_.isModifiable())
                {
                    this.keys_ = makeMutableCopy(this.keys_);
                }
                this.bitField0_ |= 0x00000002;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @return A list containing the keys.
             */
            @Override
            public java.util.List<java.lang.Integer> getKeysList()
            {
                this.keys_.makeImmutable();
                return this.keys_;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @return The count of keys.
             */
            @Override
            public int getKeysCount()
            {
                return this.keys_.size();
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The keys at the given index.
             */
            @Override
            public int getKeys(final int index)
            {
                return this.keys_.getInt(index);
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The keys to set.
             * @return This builder for chaining.
             */
            public Builder setKeys(final int index, final int value)
            {

                ensureKeysIsMutable();
                this.keys_.setInt(index, value);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @param value The keys to add.
             * @return This builder for chaining.
             */
            public Builder addKeys(final int value)
            {

                ensureKeysIsMutable();
                this.keys_.addInt(value);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @param values The keys to add.
             * @return This builder for chaining.
             */
            public Builder addAllKeys(final java.lang.Iterable<? extends java.lang.Integer> values)
            {
                ensureKeysIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.keys_);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearKeys()
            {
                this.keys_ = emptyIntList();
                this.bitField0_ = (this.bitField0_ & ~0x00000002);
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.IntList vals_ = emptyIntList();

            private void ensureValsIsMutable()
            {
                if (!this.vals_.isModifiable())
                {
                    this.vals_ = makeMutableCopy(this.vals_);
                }
                this.bitField0_ |= 0x00000004;
            }

            /**
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @return A list containing the vals.
             */
            @Override
            public java.util.List<java.lang.Integer> getValsList()
            {
                this.vals_.makeImmutable();
                return this.vals_;
            }

            /**
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @return The count of vals.
             */
            @Override
            public int getValsCount()
            {
                return this.vals_.size();
            }

            /**
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The vals at the given index.
             */
            @Override
            public int getVals(final int index)
            {
                return this.vals_.getInt(index);
            }

            /**
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The vals to set.
             * @return This builder for chaining.
             */
            public Builder setVals(final int index, final int value)
            {

                ensureValsIsMutable();
                this.vals_.setInt(index, value);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @param value The vals to add.
             * @return This builder for chaining.
             */
            public Builder addVals(final int value)
            {

                ensureValsIsMutable();
                this.vals_.addInt(value);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @param values The vals to add.
             * @return This builder for chaining.
             */
            public Builder addAllVals(final java.lang.Iterable<? extends java.lang.Integer> values)
            {
                ensureValsIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.vals_);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearVals()
            {
                this.vals_ = emptyIntList();
                this.bitField0_ = (this.bitField0_ & ~0x00000004);
                onChanged();
                return this;
            }

            private nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info info_;

            private com.google.protobuf.SingleFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder> infoBuilder_;

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             * @return Whether the info field is set.
             */
            @Override
            public boolean hasInfo()
            {
                return ((this.bitField0_ & 0x00000008) != 0);
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             * @return The info.
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info getInfo()
            {
                if (this.infoBuilder_ == null)
                {
                    return this.info_ == null
                            ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance() : this.info_;
                }
                else
                {
                    return this.infoBuilder_.getMessage();
                }
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public Builder setInfo(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info value)
            {
                if (this.infoBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    this.info_ = value;
                }
                else
                {
                    this.infoBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public Builder setInfo(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder builderForValue)
            {
                if (this.infoBuilder_ == null)
                {
                    this.info_ = builderForValue.build();
                }
                else
                {
                    this.infoBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public Builder mergeInfo(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info value)
            {
                if (this.infoBuilder_ == null)
                {
                    if (((this.bitField0_ & 0x00000008) != 0) && this.info_ != null
                            && this.info_ != nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance())
                    {
                        getInfoBuilder().mergeFrom(value);
                    }
                    else
                    {
                        this.info_ = value;
                    }
                }
                else
                {
                    this.infoBuilder_.mergeFrom(value);
                }
                if (this.info_ != null)
                {
                    this.bitField0_ |= 0x00000008;
                    onChanged();
                }
                return this;
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public Builder clearInfo()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000008);
                this.info_ = null;
                if (this.infoBuilder_ != null)
                {
                    this.infoBuilder_.dispose();
                    this.infoBuilder_ = null;
                }
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder getInfoBuilder()
            {
                this.bitField0_ |= 0x00000008;
                onChanged();
                return internalGetInfoFieldBuilder().getBuilder();
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder getInfoOrBuilder()
            {
                if (this.infoBuilder_ != null)
                {
                    return this.infoBuilder_.getMessageOrBuilder();
                }
                else
                {
                    return this.info_ == null
                            ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance() : this.info_;
                }
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder> internalGetInfoFieldBuilder()
            {
                if (this.infoBuilder_ == null)
                {
                    this.infoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder>(getInfo(),
                                    getParentForChildren(), isClean());
                    this.info_ = null;
                }
                return this.infoBuilder_;
            }

            private com.google.protobuf.Internal.LongList refs_ = emptyLongList();

            private void ensureRefsIsMutable()
            {
                if (!this.refs_.isModifiable())
                {
                    this.refs_ = makeMutableCopy(this.refs_);
                }
                this.bitField0_ |= 0x00000010;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 refs = 8 [packed = true];</code>
             * @return A list containing the refs.
             */
            @Override
            public java.util.List<java.lang.Long> getRefsList()
            {
                this.refs_.makeImmutable();
                return this.refs_;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 refs = 8 [packed = true];</code>
             * @return The count of refs.
             */
            @Override
            public int getRefsCount()
            {
                return this.refs_.size();
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 refs = 8 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The refs at the given index.
             */
            @Override
            public long getRefs(final int index)
            {
                return this.refs_.getLong(index);
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 refs = 8 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The refs to set.
             * @return This builder for chaining.
             */
            public Builder setRefs(final int index, final long value)
            {

                ensureRefsIsMutable();
                this.refs_.setLong(index, value);
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 refs = 8 [packed = true];</code>
             * @param value The refs to add.
             * @return This builder for chaining.
             */
            public Builder addRefs(final long value)
            {

                ensureRefsIsMutable();
                this.refs_.addLong(value);
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 refs = 8 [packed = true];</code>
             * @param values The refs to add.
             * @return This builder for chaining.
             */
            public Builder addAllRefs(final java.lang.Iterable<? extends java.lang.Long> values)
            {
                ensureRefsIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.refs_);
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded
             * </pre>
             *
             * <code>repeated sint64 refs = 8 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearRefs()
            {
                this.refs_ = emptyLongList();
                this.bitField0_ = (this.bitField0_ & ~0x00000010);
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.LongList lat_ = emptyLongList();

            private void ensureLatIsMutable()
            {
                if (!this.lat_.isModifiable())
                {
                    this.lat_ = makeMutableCopy(this.lat_);
                }
                this.bitField0_ |= 0x00000020;
            }

            /**
             * <pre>
             * The following two fields are optional. They are only used in a special
             * format where node locations are also added to the ways. This makes the
             * files larger, but allows creating way geometries directly.
             *
             * If this is used, you MUST set the optional_features tag "LocationsOnWays"
             * and the number of values in refs, lat, and lon MUST be the same.
             * </pre>
             *
             * <code>repeated sint64 lat = 9 [packed = true];</code>
             * @return A list containing the lat.
             */
            @Override
            public java.util.List<java.lang.Long> getLatList()
            {
                this.lat_.makeImmutable();
                return this.lat_;
            }

            /**
             * <pre>
             * The following two fields are optional. They are only used in a special
             * format where node locations are also added to the ways. This makes the
             * files larger, but allows creating way geometries directly.
             *
             * If this is used, you MUST set the optional_features tag "LocationsOnWays"
             * and the number of values in refs, lat, and lon MUST be the same.
             * </pre>
             *
             * <code>repeated sint64 lat = 9 [packed = true];</code>
             * @return The count of lat.
             */
            @Override
            public int getLatCount()
            {
                return this.lat_.size();
            }

            /**
             * <pre>
             * The following two fields are optional. They are only used in a special
             * format where node locations are also added to the ways. This makes the
             * files larger, but allows creating way geometries directly.
             *
             * If this is used, you MUST set the optional_features tag "LocationsOnWays"
             * and the number of values in refs, lat, and lon MUST be the same.
             * </pre>
             *
             * <code>repeated sint64 lat = 9 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The lat at the given index.
             */
            @Override
            public long getLat(final int index)
            {
                return this.lat_.getLong(index);
            }

            /**
             * <pre>
             * The following two fields are optional. They are only used in a special
             * format where node locations are also added to the ways. This makes the
             * files larger, but allows creating way geometries directly.
             *
             * If this is used, you MUST set the optional_features tag "LocationsOnWays"
             * and the number of values in refs, lat, and lon MUST be the same.
             * </pre>
             *
             * <code>repeated sint64 lat = 9 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The lat to set.
             * @return This builder for chaining.
             */
            public Builder setLat(final int index, final long value)
            {

                ensureLatIsMutable();
                this.lat_.setLong(index, value);
                this.bitField0_ |= 0x00000020;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * The following two fields are optional. They are only used in a special
             * format where node locations are also added to the ways. This makes the
             * files larger, but allows creating way geometries directly.
             *
             * If this is used, you MUST set the optional_features tag "LocationsOnWays"
             * and the number of values in refs, lat, and lon MUST be the same.
             * </pre>
             *
             * <code>repeated sint64 lat = 9 [packed = true];</code>
             * @param value The lat to add.
             * @return This builder for chaining.
             */
            public Builder addLat(final long value)
            {

                ensureLatIsMutable();
                this.lat_.addLong(value);
                this.bitField0_ |= 0x00000020;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * The following two fields are optional. They are only used in a special
             * format where node locations are also added to the ways. This makes the
             * files larger, but allows creating way geometries directly.
             *
             * If this is used, you MUST set the optional_features tag "LocationsOnWays"
             * and the number of values in refs, lat, and lon MUST be the same.
             * </pre>
             *
             * <code>repeated sint64 lat = 9 [packed = true];</code>
             * @param values The lat to add.
             * @return This builder for chaining.
             */
            public Builder addAllLat(final java.lang.Iterable<? extends java.lang.Long> values)
            {
                ensureLatIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.lat_);
                this.bitField0_ |= 0x00000020;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * The following two fields are optional. They are only used in a special
             * format where node locations are also added to the ways. This makes the
             * files larger, but allows creating way geometries directly.
             *
             * If this is used, you MUST set the optional_features tag "LocationsOnWays"
             * and the number of values in refs, lat, and lon MUST be the same.
             * </pre>
             *
             * <code>repeated sint64 lat = 9 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearLat()
            {
                this.lat_ = emptyLongList();
                this.bitField0_ = (this.bitField0_ & ~0x00000020);
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.LongList lon_ = emptyLongList();

            private void ensureLonIsMutable()
            {
                if (!this.lon_.isModifiable())
                {
                    this.lon_ = makeMutableCopy(this.lon_);
                }
                this.bitField0_ |= 0x00000040;
            }

            /**
             * <pre>
             * DELTA coded, optional
             * </pre>
             *
             * <code>repeated sint64 lon = 10 [packed = true];</code>
             * @return A list containing the lon.
             */
            @Override
            public java.util.List<java.lang.Long> getLonList()
            {
                this.lon_.makeImmutable();
                return this.lon_;
            }

            /**
             * <pre>
             * DELTA coded, optional
             * </pre>
             *
             * <code>repeated sint64 lon = 10 [packed = true];</code>
             * @return The count of lon.
             */
            @Override
            public int getLonCount()
            {
                return this.lon_.size();
            }

            /**
             * <pre>
             * DELTA coded, optional
             * </pre>
             *
             * <code>repeated sint64 lon = 10 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The lon at the given index.
             */
            @Override
            public long getLon(final int index)
            {
                return this.lon_.getLong(index);
            }

            /**
             * <pre>
             * DELTA coded, optional
             * </pre>
             *
             * <code>repeated sint64 lon = 10 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The lon to set.
             * @return This builder for chaining.
             */
            public Builder setLon(final int index, final long value)
            {

                ensureLonIsMutable();
                this.lon_.setLong(index, value);
                this.bitField0_ |= 0x00000040;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded, optional
             * </pre>
             *
             * <code>repeated sint64 lon = 10 [packed = true];</code>
             * @param value The lon to add.
             * @return This builder for chaining.
             */
            public Builder addLon(final long value)
            {

                ensureLonIsMutable();
                this.lon_.addLong(value);
                this.bitField0_ |= 0x00000040;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded, optional
             * </pre>
             *
             * <code>repeated sint64 lon = 10 [packed = true];</code>
             * @param values The lon to add.
             * @return This builder for chaining.
             */
            public Builder addAllLon(final java.lang.Iterable<? extends java.lang.Long> values)
            {
                ensureLonIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.lon_);
                this.bitField0_ |= 0x00000040;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA coded, optional
             * </pre>
             *
             * <code>repeated sint64 lon = 10 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearLon()
            {
                this.lon_ = emptyLongList();
                this.bitField0_ = (this.bitField0_ & ~0x00000040);
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:OSMPBF.Way)
        }

        // @@protoc_insertion_point(class_scope:OSMPBF.Way)
        private static final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way DEFAULT_INSTANCE;
        static
        {
            DEFAULT_INSTANCE = new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way();
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way getDefaultInstance()
        {
            return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<Way> PARSER = new com.google.protobuf.AbstractParser<Way>()
        {
            @java.lang.Override
            public Way parsePartialFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws com.google.protobuf.InvalidProtocolBufferException
            {
                Builder builder = newBuilder();
                try
                {
                    builder.mergeFrom(input, extensionRegistry);
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.setUnfinishedMessage(builder.buildPartial());
                }
                catch (com.google.protobuf.UninitializedMessageException e)
                {
                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                }
                catch (java.io.IOException e)
                {
                    throw new com.google.protobuf.InvalidProtocolBufferException(e)
                            .setUnfinishedMessage(builder.buildPartial());
                }
                return builder.buildPartial();
            }
        };

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

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

        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Way getDefaultInstanceForType()
        {
            return DEFAULT_INSTANCE;
        }

    }

    public interface RelationOrBuilder extends
            // @@protoc_insertion_point(interface_extends:OSMPBF.Relation)
            com.google.protobuf.MessageOrBuilder
    {

        /**
         * <code>required int64 id = 1;</code>
         * @return Whether the id field is set.
         */
        boolean hasId();

        /**
         * <code>required int64 id = 1;</code>
         * @return The id.
         */
        long getId();

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @return A list containing the keys.
         */
        java.util.List<java.lang.Integer> getKeysList();

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @return The count of keys.
         */
        int getKeysCount();

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The keys at the given index.
         */
        int getKeys(int index);

        /**
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @return A list containing the vals.
         */
        java.util.List<java.lang.Integer> getValsList();

        /**
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @return The count of vals.
         */
        int getValsCount();

        /**
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The vals at the given index.
         */
        int getVals(int index);

        /**
         * <code>optional .OSMPBF.Info info = 4;</code>
         * @return Whether the info field is set.
         */
        boolean hasInfo();

        /**
         * <code>optional .OSMPBF.Info info = 4;</code>
         * @return The info.
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info getInfo();

        /**
         * <code>optional .OSMPBF.Info info = 4;</code>
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder getInfoOrBuilder();

        /**
         * <pre>
         * Parallel arrays
         * </pre>
         *
         * <code>repeated int32 roles_sid = 8 [packed = true];</code>
         * @return A list containing the rolesSid.
         */
        java.util.List<java.lang.Integer> getRolesSidList();

        /**
         * <pre>
         * Parallel arrays
         * </pre>
         *
         * <code>repeated int32 roles_sid = 8 [packed = true];</code>
         * @return The count of rolesSid.
         */
        int getRolesSidCount();

        /**
         * <pre>
         * Parallel arrays
         * </pre>
         *
         * <code>repeated int32 roles_sid = 8 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The rolesSid at the given index.
         */
        int getRolesSid(int index);

        /**
         * <pre>
         * DELTA encoded
         * </pre>
         *
         * <code>repeated sint64 memids = 9 [packed = true];</code>
         * @return A list containing the memids.
         */
        java.util.List<java.lang.Long> getMemidsList();

        /**
         * <pre>
         * DELTA encoded
         * </pre>
         *
         * <code>repeated sint64 memids = 9 [packed = true];</code>
         * @return The count of memids.
         */
        int getMemidsCount();

        /**
         * <pre>
         * DELTA encoded
         * </pre>
         *
         * <code>repeated sint64 memids = 9 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The memids at the given index.
         */
        long getMemids(int index);

        /**
         * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
         * @return A list containing the types.
         */
        java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType> getTypesList();

        /**
         * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
         * @return The count of types.
         */
        int getTypesCount();

        /**
         * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The types at the given index.
         */
        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType getTypes(int index);
    }

    /**
     * Protobuf type {@code OSMPBF.Relation}
     */
    public static final class Relation extends com.google.protobuf.GeneratedMessage implements
            // @@protoc_insertion_point(message_implements:OSMPBF.Relation)
            RelationOrBuilder
    {
        private static final long serialVersionUID = 0L;
        static
        {
            com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                    com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 31, /* patch= */ 1,
                    /* suffix= */ "", Relation.class.getName());
        }

        // Use Relation.newBuilder() to construct.
        private Relation(final com.google.protobuf.GeneratedMessage.Builder<?> builder)
        {
            super(builder);
        }

        private Relation()
        {
            this.keys_ = emptyIntList();
            this.vals_ = emptyIntList();
            this.rolesSid_ = emptyIntList();
            this.memids_ = emptyLongList();
            this.types_ = emptyIntList();
        }

        public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Relation_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
        {
            return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Relation_fieldAccessorTable
                    .ensureFieldAccessorsInitialized(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.class,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.Builder.class);
        }

        /**
         * Protobuf enum {@code OSMPBF.Relation.MemberType}
         */
        public enum MemberType implements com.google.protobuf.ProtocolMessageEnum
        {
            /**
             * <code>NODE = 0;</code>
             */
            NODE(0),
            /**
             * <code>WAY = 1;</code>
             */
            WAY(1),
            /**
             * <code>RELATION = 2;</code>
             */
            RELATION(2),;

            static
            {
                com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
                        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, /* major= */ 4, /* minor= */ 31,
                        /* patch= */ 1, /* suffix= */ "", MemberType.class.getName());
            }

            /**
             * <code>NODE = 0;</code>
             */
            public static final int NODE_VALUE = 0;

            /**
             * <code>WAY = 1;</code>
             */
            public static final int WAY_VALUE = 1;

            /**
             * <code>RELATION = 2;</code>
             */
            public static final int RELATION_VALUE = 2;

            @Override
            public final int getNumber()
            {
                return this.value;
            }

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

            /**
             * @param value The numeric wire value of the corresponding enum entry.
             * @return The enum associated with the given numeric wire value.
             */
            public static MemberType forNumber(final int value)
            {
                switch (value)
                {
                    case 0:
                        return NODE;
                    case 1:
                        return WAY;
                    case 2:
                        return RELATION;
                    default:
                        return null;
                }
            }

            public static com.google.protobuf.Internal.EnumLiteMap<MemberType> internalGetValueMap()
            {
                return internalValueMap;
            }

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

            @Override
            public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor()
            {
                return getDescriptor().getValues().get(ordinal());
            }

            @Override
            public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType()
            {
                return getDescriptor();
            }

            public static com.google.protobuf.Descriptors.EnumDescriptor getDescriptor()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.getDescriptor().getEnumTypes().get(0);
            }

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

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

            private final int value;

            private MemberType(final int value)
            {
                this.value = value;
            }

            // @@protoc_insertion_point(enum_scope:OSMPBF.Relation.MemberType)
        }

        private int bitField0_;

        public static final int ID_FIELD_NUMBER = 1;

        private long id_ = 0L;

        /**
         * <code>required int64 id = 1;</code>
         * @return Whether the id field is set.
         */
        @java.lang.Override
        public boolean hasId()
        {
            return ((this.bitField0_ & 0x00000001) != 0);
        }

        /**
         * <code>required int64 id = 1;</code>
         * @return The id.
         */
        @java.lang.Override
        public long getId()
        {
            return this.id_;
        }

        public static final int KEYS_FIELD_NUMBER = 2;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.IntList keys_ = emptyIntList();

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @return A list containing the keys.
         */
        @java.lang.Override
        public java.util.List<java.lang.Integer> getKeysList()
        {
            return this.keys_;
        }

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @return The count of keys.
         */
        @Override
        public int getKeysCount()
        {
            return this.keys_.size();
        }

        /**
         * <pre>
         * Parallel arrays.
         * </pre>
         *
         * <code>repeated uint32 keys = 2 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The keys at the given index.
         */
        @Override
        public int getKeys(final int index)
        {
            return this.keys_.getInt(index);
        }

        private int keysMemoizedSerializedSize = -1;

        public static final int VALS_FIELD_NUMBER = 3;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.IntList vals_ = emptyIntList();

        /**
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @return A list containing the vals.
         */
        @java.lang.Override
        public java.util.List<java.lang.Integer> getValsList()
        {
            return this.vals_;
        }

        /**
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @return The count of vals.
         */
        @Override
        public int getValsCount()
        {
            return this.vals_.size();
        }

        /**
         * <code>repeated uint32 vals = 3 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The vals at the given index.
         */
        @Override
        public int getVals(final int index)
        {
            return this.vals_.getInt(index);
        }

        private int valsMemoizedSerializedSize = -1;

        public static final int INFO_FIELD_NUMBER = 4;

        private nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info info_;

        /**
         * <code>optional .OSMPBF.Info info = 4;</code>
         * @return Whether the info field is set.
         */
        @java.lang.Override
        public boolean hasInfo()
        {
            return ((this.bitField0_ & 0x00000002) != 0);
        }

        /**
         * <code>optional .OSMPBF.Info info = 4;</code>
         * @return The info.
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info getInfo()
        {
            return this.info_ == null ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance()
                    : this.info_;
        }

        /**
         * <code>optional .OSMPBF.Info info = 4;</code>
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder getInfoOrBuilder()
        {
            return this.info_ == null ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance()
                    : this.info_;
        }

        public static final int ROLES_SID_FIELD_NUMBER = 8;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.IntList rolesSid_ = emptyIntList();

        /**
         * <pre>
         * Parallel arrays
         * </pre>
         *
         * <code>repeated int32 roles_sid = 8 [packed = true];</code>
         * @return A list containing the rolesSid.
         */
        @java.lang.Override
        public java.util.List<java.lang.Integer> getRolesSidList()
        {
            return this.rolesSid_;
        }

        /**
         * <pre>
         * Parallel arrays
         * </pre>
         *
         * <code>repeated int32 roles_sid = 8 [packed = true];</code>
         * @return The count of rolesSid.
         */
        @Override
        public int getRolesSidCount()
        {
            return this.rolesSid_.size();
        }

        /**
         * <pre>
         * Parallel arrays
         * </pre>
         *
         * <code>repeated int32 roles_sid = 8 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The rolesSid at the given index.
         */
        @Override
        public int getRolesSid(final int index)
        {
            return this.rolesSid_.getInt(index);
        }

        private int rolesSidMemoizedSerializedSize = -1;

        public static final int MEMIDS_FIELD_NUMBER = 9;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.LongList memids_ = emptyLongList();

        /**
         * <pre>
         * DELTA encoded
         * </pre>
         *
         * <code>repeated sint64 memids = 9 [packed = true];</code>
         * @return A list containing the memids.
         */
        @java.lang.Override
        public java.util.List<java.lang.Long> getMemidsList()
        {
            return this.memids_;
        }

        /**
         * <pre>
         * DELTA encoded
         * </pre>
         *
         * <code>repeated sint64 memids = 9 [packed = true];</code>
         * @return The count of memids.
         */
        @Override
        public int getMemidsCount()
        {
            return this.memids_.size();
        }

        /**
         * <pre>
         * DELTA encoded
         * </pre>
         *
         * <code>repeated sint64 memids = 9 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The memids at the given index.
         */
        @Override
        public long getMemids(final int index)
        {
            return this.memids_.getLong(index);
        }

        private int memidsMemoizedSerializedSize = -1;

        public static final int TYPES_FIELD_NUMBER = 10;

        @SuppressWarnings("serial")
        private com.google.protobuf.Internal.IntList types_ = emptyIntList();

        private static final com.google.protobuf.Internal.IntListAdapter.IntConverter<
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType> types_converter_ =
                        new com.google.protobuf.Internal.IntListAdapter.IntConverter<
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType>()
                        {
                            @Override
                            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType convert(
                                    final int from)
                            {
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType result =
                                        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType
                                                .forNumber(from);
                                return result == null
                                        ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType.NODE
                                        : result;
                            }
                        };

        /**
         * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
         * @return A list containing the types.
         */
        @java.lang.Override
        public java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType> getTypesList()
        {
            return new com.google.protobuf.Internal.IntListAdapter<
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType>(this.types_, types_converter_);
        }

        /**
         * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
         * @return The count of types.
         */
        @java.lang.Override
        public int getTypesCount()
        {
            return this.types_.size();
        }

        /**
         * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
         * @param index The index of the element to return.
         * @return The types at the given index.
         */
        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType getTypes(final int index)
        {
            return types_converter_.convert(this.types_.getInt(index));
        }

        private int typesMemoizedSerializedSize;

        private byte memoizedIsInitialized = -1;

        @java.lang.Override
        public final boolean isInitialized()
        {
            byte isInitialized = this.memoizedIsInitialized;
            if (isInitialized == 1)
                return true;
            if (isInitialized == 0)
                return false;

            if (!hasId())
            {
                this.memoizedIsInitialized = 0;
                return false;
            }
            this.memoizedIsInitialized = 1;
            return true;
        }

        @java.lang.Override
        public void writeTo(final com.google.protobuf.CodedOutputStream output) throws java.io.IOException
        {
            getSerializedSize();
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                output.writeInt64(1, this.id_);
            }
            if (getKeysList().size() > 0)
            {
                output.writeUInt32NoTag(18);
                output.writeUInt32NoTag(this.keysMemoizedSerializedSize);
            }
            for (int i = 0; i < this.keys_.size(); i++)
            {
                output.writeUInt32NoTag(this.keys_.getInt(i));
            }
            if (getValsList().size() > 0)
            {
                output.writeUInt32NoTag(26);
                output.writeUInt32NoTag(this.valsMemoizedSerializedSize);
            }
            for (int i = 0; i < this.vals_.size(); i++)
            {
                output.writeUInt32NoTag(this.vals_.getInt(i));
            }
            if (((this.bitField0_ & 0x00000002) != 0))
            {
                output.writeMessage(4, getInfo());
            }
            if (getRolesSidList().size() > 0)
            {
                output.writeUInt32NoTag(66);
                output.writeUInt32NoTag(this.rolesSidMemoizedSerializedSize);
            }
            for (int i = 0; i < this.rolesSid_.size(); i++)
            {
                output.writeInt32NoTag(this.rolesSid_.getInt(i));
            }
            if (getMemidsList().size() > 0)
            {
                output.writeUInt32NoTag(74);
                output.writeUInt32NoTag(this.memidsMemoizedSerializedSize);
            }
            for (int i = 0; i < this.memids_.size(); i++)
            {
                output.writeSInt64NoTag(this.memids_.getLong(i));
            }
            if (getTypesList().size() > 0)
            {
                output.writeUInt32NoTag(82);
                output.writeUInt32NoTag(this.typesMemoizedSerializedSize);
            }
            for (int i = 0; i < this.types_.size(); i++)
            {
                output.writeEnumNoTag(this.types_.getInt(i));
            }
            getUnknownFields().writeTo(output);
        }

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

            size = 0;
            if (((this.bitField0_ & 0x00000001) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeInt64Size(1, this.id_);
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.keys_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(this.keys_.getInt(i));
                }
                size += dataSize;
                if (!getKeysList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.keysMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.vals_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(this.vals_.getInt(i));
                }
                size += dataSize;
                if (!getValsList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.valsMemoizedSerializedSize = dataSize;
            }
            if (((this.bitField0_ & 0x00000002) != 0))
            {
                size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getInfo());
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.rolesSid_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(this.rolesSid_.getInt(i));
                }
                size += dataSize;
                if (!getRolesSidList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.rolesSidMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.memids_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeSInt64SizeNoTag(this.memids_.getLong(i));
                }
                size += dataSize;
                if (!getMemidsList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize);
                }
                this.memidsMemoizedSerializedSize = dataSize;
            }
            {
                int dataSize = 0;
                for (int i = 0; i < this.types_.size(); i++)
                {
                    dataSize += com.google.protobuf.CodedOutputStream.computeEnumSizeNoTag(this.types_.getInt(i));
                }
                size += dataSize;
                if (!getTypesList().isEmpty())
                {
                    size += 1;
                    size += com.google.protobuf.CodedOutputStream.computeUInt32SizeNoTag(dataSize);
                }
                this.typesMemoizedSerializedSize = dataSize;
            }
            size += getUnknownFields().getSerializedSize();
            this.memoizedSize = size;
            return size;
        }

        @java.lang.Override
        public boolean equals(final java.lang.Object obj)
        {
            if (obj == this)
            {
                return true;
            }
            if (!(obj instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation))
            {
                return super.equals(obj);
            }
            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation other =
                    (nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation) obj;

            if (hasId() != other.hasId())
                return false;
            if (hasId())
            {
                if (getId() != other.getId())
                    return false;
            }
            if (!getKeysList().equals(other.getKeysList()))
                return false;
            if (!getValsList().equals(other.getValsList()))
                return false;
            if (hasInfo() != other.hasInfo())
                return false;
            if (hasInfo())
            {
                if (!getInfo().equals(other.getInfo()))
                    return false;
            }
            if (!getRolesSidList().equals(other.getRolesSidList()))
                return false;
            if (!getMemidsList().equals(other.getMemidsList()))
                return false;
            if (!this.types_.equals(other.types_))
                return false;
            if (!getUnknownFields().equals(other.getUnknownFields()))
                return false;
            return true;
        }

        @java.lang.Override
        public int hashCode()
        {
            if (this.memoizedHashCode != 0)
            {
                return this.memoizedHashCode;
            }
            int hash = 41;
            hash = (19 * hash) + getDescriptor().hashCode();
            if (hasId())
            {
                hash = (37 * hash) + ID_FIELD_NUMBER;
                hash = (53 * hash) + com.google.protobuf.Internal.hashLong(getId());
            }
            if (getKeysCount() > 0)
            {
                hash = (37 * hash) + KEYS_FIELD_NUMBER;
                hash = (53 * hash) + getKeysList().hashCode();
            }
            if (getValsCount() > 0)
            {
                hash = (37 * hash) + VALS_FIELD_NUMBER;
                hash = (53 * hash) + getValsList().hashCode();
            }
            if (hasInfo())
            {
                hash = (37 * hash) + INFO_FIELD_NUMBER;
                hash = (53 * hash) + getInfo().hashCode();
            }
            if (getRolesSidCount() > 0)
            {
                hash = (37 * hash) + ROLES_SID_FIELD_NUMBER;
                hash = (53 * hash) + getRolesSidList().hashCode();
            }
            if (getMemidsCount() > 0)
            {
                hash = (37 * hash) + MEMIDS_FIELD_NUMBER;
                hash = (53 * hash) + getMemidsList().hashCode();
            }
            if (getTypesCount() > 0)
            {
                hash = (37 * hash) + TYPES_FIELD_NUMBER;
                hash = (53 * hash) + this.types_.hashCode();
            }
            hash = (29 * hash) + getUnknownFields().hashCode();
            this.memoizedHashCode = hash;
            return hash;
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation parseFrom(final java.nio.ByteBuffer data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation parseFrom(final java.nio.ByteBuffer data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation parseFrom(
                final com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation parseFrom(
                final com.google.protobuf.ByteString data, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation parseFrom(final byte[] data)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation parseFrom(final byte[] data,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws com.google.protobuf.InvalidProtocolBufferException
        {
            return PARSER.parseFrom(data, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation parseFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation parseFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation parseDelimitedFrom(
                final java.io.InputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation parseDelimitedFrom(
                final java.io.InputStream input, final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation parseFrom(
                final com.google.protobuf.CodedInputStream input) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input);
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation parseFrom(
                final com.google.protobuf.CodedInputStream input,
                final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
        {
            return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry);
        }

        @java.lang.Override
        public Builder newBuilderForType()
        {
            return newBuilder();
        }

        public static Builder newBuilder()
        {
            return DEFAULT_INSTANCE.toBuilder();
        }

        public static Builder newBuilder(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation prototype)
        {
            return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
        }

        @java.lang.Override
        public Builder toBuilder()
        {
            return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this);
        }

        @java.lang.Override
        protected Builder newBuilderForType(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
        {
            Builder builder = new Builder(parent);
            return builder;
        }

        /**
         * Protobuf type {@code OSMPBF.Relation}
         */
        public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder<Builder> implements
                // @@protoc_insertion_point(builder_implements:OSMPBF.Relation)
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.RelationOrBuilder
        {
            public static final com.google.protobuf.Descriptors.Descriptor getDescriptor()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Relation_descriptor;
            }

            @java.lang.Override
            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Relation_fieldAccessorTable
                        .ensureFieldAccessorsInitialized(nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.class,
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.Builder.class);
            }

            // Construct using nl.tudelft.simulation.dsol.animation.gis.osm.pbf.Osmformat.Relation.newBuilder()
            private Builder()
            {
                maybeForceBuilderInitialization();
            }

            private Builder(final com.google.protobuf.GeneratedMessage.BuilderParent parent)
            {
                super(parent);
                maybeForceBuilderInitialization();
            }

            private void maybeForceBuilderInitialization()
            {
                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders)
                {
                    internalGetInfoFieldBuilder();
                }
            }

            @java.lang.Override
            public Builder clear()
            {
                super.clear();
                this.bitField0_ = 0;
                this.id_ = 0L;
                this.keys_ = emptyIntList();
                this.vals_ = emptyIntList();
                this.info_ = null;
                if (this.infoBuilder_ != null)
                {
                    this.infoBuilder_.dispose();
                    this.infoBuilder_ = null;
                }
                this.rolesSid_ = emptyIntList();
                this.memids_ = emptyLongList();
                this.types_ = emptyIntList();
                return this;
            }

            @java.lang.Override
            public com.google.protobuf.Descriptors.Descriptor getDescriptorForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.internal_static_OSMPBF_Relation_descriptor;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation getDefaultInstanceForType()
            {
                return nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.getDefaultInstance();
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation build()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation result = buildPartial();
                if (!result.isInitialized())
                {
                    throw newUninitializedMessageException(result);
                }
                return result;
            }

            @java.lang.Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation buildPartial()
            {
                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation result =
                        new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation(this);
                if (this.bitField0_ != 0)
                {
                    buildPartial0(result);
                }
                onBuilt();
                return result;
            }

            private void buildPartial0(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation result)
            {
                int from_bitField0_ = this.bitField0_;
                int to_bitField0_ = 0;
                if (((from_bitField0_ & 0x00000001) != 0))
                {
                    result.id_ = this.id_;
                    to_bitField0_ |= 0x00000001;
                }
                if (((from_bitField0_ & 0x00000002) != 0))
                {
                    this.keys_.makeImmutable();
                    result.keys_ = this.keys_;
                }
                if (((from_bitField0_ & 0x00000004) != 0))
                {
                    this.vals_.makeImmutable();
                    result.vals_ = this.vals_;
                }
                if (((from_bitField0_ & 0x00000008) != 0))
                {
                    result.info_ = this.infoBuilder_ == null ? this.info_ : this.infoBuilder_.build();
                    to_bitField0_ |= 0x00000002;
                }
                if (((from_bitField0_ & 0x00000010) != 0))
                {
                    this.rolesSid_.makeImmutable();
                    result.rolesSid_ = this.rolesSid_;
                }
                if (((from_bitField0_ & 0x00000020) != 0))
                {
                    this.memids_.makeImmutable();
                    result.memids_ = this.memids_;
                }
                if (((from_bitField0_ & 0x00000040) != 0))
                {
                    this.types_.makeImmutable();
                    result.types_ = this.types_;
                }
                result.bitField0_ |= to_bitField0_;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.Message other)
            {
                if (other instanceof nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation)
                {
                    return mergeFrom((nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation) other);
                }
                else
                {
                    super.mergeFrom(other);
                    return this;
                }
            }

            public Builder mergeFrom(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation other)
            {
                if (other == nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.getDefaultInstance())
                    return this;
                if (other.hasId())
                {
                    setId(other.getId());
                }
                if (!other.keys_.isEmpty())
                {
                    if (this.keys_.isEmpty())
                    {
                        this.keys_ = other.keys_;
                        this.keys_.makeImmutable();
                        this.bitField0_ |= 0x00000002;
                    }
                    else
                    {
                        ensureKeysIsMutable();
                        this.keys_.addAll(other.keys_);
                    }
                    onChanged();
                }
                if (!other.vals_.isEmpty())
                {
                    if (this.vals_.isEmpty())
                    {
                        this.vals_ = other.vals_;
                        this.vals_.makeImmutable();
                        this.bitField0_ |= 0x00000004;
                    }
                    else
                    {
                        ensureValsIsMutable();
                        this.vals_.addAll(other.vals_);
                    }
                    onChanged();
                }
                if (other.hasInfo())
                {
                    mergeInfo(other.getInfo());
                }
                if (!other.rolesSid_.isEmpty())
                {
                    if (this.rolesSid_.isEmpty())
                    {
                        this.rolesSid_ = other.rolesSid_;
                        this.rolesSid_.makeImmutable();
                        this.bitField0_ |= 0x00000010;
                    }
                    else
                    {
                        ensureRolesSidIsMutable();
                        this.rolesSid_.addAll(other.rolesSid_);
                    }
                    onChanged();
                }
                if (!other.memids_.isEmpty())
                {
                    if (this.memids_.isEmpty())
                    {
                        this.memids_ = other.memids_;
                        this.memids_.makeImmutable();
                        this.bitField0_ |= 0x00000020;
                    }
                    else
                    {
                        ensureMemidsIsMutable();
                        this.memids_.addAll(other.memids_);
                    }
                    onChanged();
                }
                if (!other.types_.isEmpty())
                {
                    if (this.types_.isEmpty())
                    {
                        this.types_ = other.types_;
                        this.types_.makeImmutable();
                        this.bitField0_ |= 0x00000040;
                    }
                    else
                    {
                        ensureTypesIsMutable();
                        this.types_.addAll(other.types_);
                    }
                    onChanged();
                }
                this.mergeUnknownFields(other.getUnknownFields());
                onChanged();
                return this;
            }

            @java.lang.Override
            public final boolean isInitialized()
            {
                if (!hasId())
                {
                    return false;
                }
                return true;
            }

            @java.lang.Override
            public Builder mergeFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException
            {
                if (extensionRegistry == null)
                {
                    throw new java.lang.NullPointerException();
                }
                try
                {
                    boolean done = false;
                    while (!done)
                    {
                        int tag = input.readTag();
                        switch (tag)
                        {
                            case 0:
                                done = true;
                                break;
                            case 8:
                            {
                                this.id_ = input.readInt64();
                                this.bitField0_ |= 0x00000001;
                                break;
                            } // case 8
                            case 16:
                            {
                                int v = input.readUInt32();
                                ensureKeysIsMutable();
                                this.keys_.addInt(v);
                                break;
                            } // case 16
                            case 18:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureKeysIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.keys_.addInt(input.readUInt32());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 18
                            case 24:
                            {
                                int v = input.readUInt32();
                                ensureValsIsMutable();
                                this.vals_.addInt(v);
                                break;
                            } // case 24
                            case 26:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureValsIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.vals_.addInt(input.readUInt32());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 26
                            case 34:
                            {
                                input.readMessage(internalGetInfoFieldBuilder().getBuilder(), extensionRegistry);
                                this.bitField0_ |= 0x00000008;
                                break;
                            } // case 34
                            case 64:
                            {
                                int v = input.readInt32();
                                ensureRolesSidIsMutable();
                                this.rolesSid_.addInt(v);
                                break;
                            } // case 64
                            case 66:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureRolesSidIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.rolesSid_.addInt(input.readInt32());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 66
                            case 72:
                            {
                                long v = input.readSInt64();
                                ensureMemidsIsMutable();
                                this.memids_.addLong(v);
                                break;
                            } // case 72
                            case 74:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureMemidsIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    this.memids_.addLong(input.readSInt64());
                                }
                                input.popLimit(limit);
                                break;
                            } // case 74
                            case 80:
                            {
                                int tmpRaw = input.readEnum();
                                nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType tmpValue =
                                        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType
                                                .forNumber(tmpRaw);
                                if (tmpValue == null)
                                {
                                    mergeUnknownVarintField(10, tmpRaw);
                                }
                                else
                                {
                                    ensureTypesIsMutable();
                                    this.types_.addInt(tmpRaw);
                                }
                                break;
                            } // case 80
                            case 82:
                            {
                                int length = input.readRawVarint32();
                                int limit = input.pushLimit(length);
                                ensureTypesIsMutable();
                                while (input.getBytesUntilLimit() > 0)
                                {
                                    int tmpRaw = input.readEnum();
                                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType tmpValue =
                                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType
                                                    .forNumber(tmpRaw);
                                    if (tmpValue == null)
                                    {
                                        mergeUnknownVarintField(10, tmpRaw);
                                    }
                                    else
                                    {
                                        this.types_.addInt(tmpRaw);
                                    }
                                }
                                input.popLimit(limit);
                                break;
                            } // case 82
                            default:
                            {
                                if (!super.parseUnknownField(input, extensionRegistry, tag))
                                {
                                    done = true; // was an endgroup tag
                                }
                                break;
                            } // default:
                        } // switch (tag)
                    } // while (!done)
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.unwrapIOException();
                }
                finally
                {
                    onChanged();
                } // finally
                return this;
            }

            private int bitField0_;

            private long id_;

            /**
             * <code>required int64 id = 1;</code>
             * @return Whether the id field is set.
             */
            @java.lang.Override
            public boolean hasId()
            {
                return ((this.bitField0_ & 0x00000001) != 0);
            }

            /**
             * <code>required int64 id = 1;</code>
             * @return The id.
             */
            @java.lang.Override
            public long getId()
            {
                return this.id_;
            }

            /**
             * <code>required int64 id = 1;</code>
             * @param value The id to set.
             * @return This builder for chaining.
             */
            public Builder setId(final long value)
            {

                this.id_ = value;
                this.bitField0_ |= 0x00000001;
                onChanged();
                return this;
            }

            /**
             * <code>required int64 id = 1;</code>
             * @return This builder for chaining.
             */
            public Builder clearId()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000001);
                this.id_ = 0L;
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.IntList keys_ = emptyIntList();

            private void ensureKeysIsMutable()
            {
                if (!this.keys_.isModifiable())
                {
                    this.keys_ = makeMutableCopy(this.keys_);
                }
                this.bitField0_ |= 0x00000002;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @return A list containing the keys.
             */
            @Override
            public java.util.List<java.lang.Integer> getKeysList()
            {
                this.keys_.makeImmutable();
                return this.keys_;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @return The count of keys.
             */
            @Override
            public int getKeysCount()
            {
                return this.keys_.size();
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The keys at the given index.
             */
            @Override
            public int getKeys(final int index)
            {
                return this.keys_.getInt(index);
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The keys to set.
             * @return This builder for chaining.
             */
            public Builder setKeys(final int index, final int value)
            {

                ensureKeysIsMutable();
                this.keys_.setInt(index, value);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @param value The keys to add.
             * @return This builder for chaining.
             */
            public Builder addKeys(final int value)
            {

                ensureKeysIsMutable();
                this.keys_.addInt(value);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @param values The keys to add.
             * @return This builder for chaining.
             */
            public Builder addAllKeys(final java.lang.Iterable<? extends java.lang.Integer> values)
            {
                ensureKeysIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.keys_);
                this.bitField0_ |= 0x00000002;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Parallel arrays.
             * </pre>
             *
             * <code>repeated uint32 keys = 2 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearKeys()
            {
                this.keys_ = emptyIntList();
                this.bitField0_ = (this.bitField0_ & ~0x00000002);
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.IntList vals_ = emptyIntList();

            private void ensureValsIsMutable()
            {
                if (!this.vals_.isModifiable())
                {
                    this.vals_ = makeMutableCopy(this.vals_);
                }
                this.bitField0_ |= 0x00000004;
            }

            /**
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @return A list containing the vals.
             */
            @Override
            public java.util.List<java.lang.Integer> getValsList()
            {
                this.vals_.makeImmutable();
                return this.vals_;
            }

            /**
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @return The count of vals.
             */
            @Override
            public int getValsCount()
            {
                return this.vals_.size();
            }

            /**
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The vals at the given index.
             */
            @Override
            public int getVals(final int index)
            {
                return this.vals_.getInt(index);
            }

            /**
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The vals to set.
             * @return This builder for chaining.
             */
            public Builder setVals(final int index, final int value)
            {

                ensureValsIsMutable();
                this.vals_.setInt(index, value);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @param value The vals to add.
             * @return This builder for chaining.
             */
            public Builder addVals(final int value)
            {

                ensureValsIsMutable();
                this.vals_.addInt(value);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @param values The vals to add.
             * @return This builder for chaining.
             */
            public Builder addAllVals(final java.lang.Iterable<? extends java.lang.Integer> values)
            {
                ensureValsIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.vals_);
                this.bitField0_ |= 0x00000004;
                onChanged();
                return this;
            }

            /**
             * <code>repeated uint32 vals = 3 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearVals()
            {
                this.vals_ = emptyIntList();
                this.bitField0_ = (this.bitField0_ & ~0x00000004);
                onChanged();
                return this;
            }

            private nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info info_;

            private com.google.protobuf.SingleFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder> infoBuilder_;

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             * @return Whether the info field is set.
             */
            @Override
            public boolean hasInfo()
            {
                return ((this.bitField0_ & 0x00000008) != 0);
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             * @return The info.
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info getInfo()
            {
                if (this.infoBuilder_ == null)
                {
                    return this.info_ == null
                            ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance() : this.info_;
                }
                else
                {
                    return this.infoBuilder_.getMessage();
                }
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public Builder setInfo(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info value)
            {
                if (this.infoBuilder_ == null)
                {
                    if (value == null)
                    {
                        throw new NullPointerException();
                    }
                    this.info_ = value;
                }
                else
                {
                    this.infoBuilder_.setMessage(value);
                }
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public Builder setInfo(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder builderForValue)
            {
                if (this.infoBuilder_ == null)
                {
                    this.info_ = builderForValue.build();
                }
                else
                {
                    this.infoBuilder_.setMessage(builderForValue.build());
                }
                this.bitField0_ |= 0x00000008;
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public Builder mergeInfo(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info value)
            {
                if (this.infoBuilder_ == null)
                {
                    if (((this.bitField0_ & 0x00000008) != 0) && this.info_ != null
                            && this.info_ != nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance())
                    {
                        getInfoBuilder().mergeFrom(value);
                    }
                    else
                    {
                        this.info_ = value;
                    }
                }
                else
                {
                    this.infoBuilder_.mergeFrom(value);
                }
                if (this.info_ != null)
                {
                    this.bitField0_ |= 0x00000008;
                    onChanged();
                }
                return this;
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public Builder clearInfo()
            {
                this.bitField0_ = (this.bitField0_ & ~0x00000008);
                this.info_ = null;
                if (this.infoBuilder_ != null)
                {
                    this.infoBuilder_.dispose();
                    this.infoBuilder_ = null;
                }
                onChanged();
                return this;
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder getInfoBuilder()
            {
                this.bitField0_ |= 0x00000008;
                onChanged();
                return internalGetInfoFieldBuilder().getBuilder();
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder getInfoOrBuilder()
            {
                if (this.infoBuilder_ != null)
                {
                    return this.infoBuilder_.getMessageOrBuilder();
                }
                else
                {
                    return this.info_ == null
                            ? nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.getDefaultInstance() : this.info_;
                }
            }

            /**
             * <code>optional .OSMPBF.Info info = 4;</code>
             */
            private com.google.protobuf.SingleFieldBuilder<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder,
                    nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder> internalGetInfoFieldBuilder()
            {
                if (this.infoBuilder_ == null)
                {
                    this.infoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Info.Builder,
                            nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.InfoOrBuilder>(getInfo(),
                                    getParentForChildren(), isClean());
                    this.info_ = null;
                }
                return this.infoBuilder_;
            }

            private com.google.protobuf.Internal.IntList rolesSid_ = emptyIntList();

            private void ensureRolesSidIsMutable()
            {
                if (!this.rolesSid_.isModifiable())
                {
                    this.rolesSid_ = makeMutableCopy(this.rolesSid_);
                }
                this.bitField0_ |= 0x00000010;
            }

            /**
             * <pre>
             * Parallel arrays
             * </pre>
             *
             * <code>repeated int32 roles_sid = 8 [packed = true];</code>
             * @return A list containing the rolesSid.
             */
            @Override
            public java.util.List<java.lang.Integer> getRolesSidList()
            {
                this.rolesSid_.makeImmutable();
                return this.rolesSid_;
            }

            /**
             * <pre>
             * Parallel arrays
             * </pre>
             *
             * <code>repeated int32 roles_sid = 8 [packed = true];</code>
             * @return The count of rolesSid.
             */
            @Override
            public int getRolesSidCount()
            {
                return this.rolesSid_.size();
            }

            /**
             * <pre>
             * Parallel arrays
             * </pre>
             *
             * <code>repeated int32 roles_sid = 8 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The rolesSid at the given index.
             */
            @Override
            public int getRolesSid(final int index)
            {
                return this.rolesSid_.getInt(index);
            }

            /**
             * <pre>
             * Parallel arrays
             * </pre>
             *
             * <code>repeated int32 roles_sid = 8 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The rolesSid to set.
             * @return This builder for chaining.
             */
            public Builder setRolesSid(final int index, final int value)
            {

                ensureRolesSidIsMutable();
                this.rolesSid_.setInt(index, value);
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Parallel arrays
             * </pre>
             *
             * <code>repeated int32 roles_sid = 8 [packed = true];</code>
             * @param value The rolesSid to add.
             * @return This builder for chaining.
             */
            public Builder addRolesSid(final int value)
            {

                ensureRolesSidIsMutable();
                this.rolesSid_.addInt(value);
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Parallel arrays
             * </pre>
             *
             * <code>repeated int32 roles_sid = 8 [packed = true];</code>
             * @param values The rolesSid to add.
             * @return This builder for chaining.
             */
            public Builder addAllRolesSid(final java.lang.Iterable<? extends java.lang.Integer> values)
            {
                ensureRolesSidIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.rolesSid_);
                this.bitField0_ |= 0x00000010;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * Parallel arrays
             * </pre>
             *
             * <code>repeated int32 roles_sid = 8 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearRolesSid()
            {
                this.rolesSid_ = emptyIntList();
                this.bitField0_ = (this.bitField0_ & ~0x00000010);
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.LongList memids_ = emptyLongList();

            private void ensureMemidsIsMutable()
            {
                if (!this.memids_.isModifiable())
                {
                    this.memids_ = makeMutableCopy(this.memids_);
                }
                this.bitField0_ |= 0x00000020;
            }

            /**
             * <pre>
             * DELTA encoded
             * </pre>
             *
             * <code>repeated sint64 memids = 9 [packed = true];</code>
             * @return A list containing the memids.
             */
            @Override
            public java.util.List<java.lang.Long> getMemidsList()
            {
                this.memids_.makeImmutable();
                return this.memids_;
            }

            /**
             * <pre>
             * DELTA encoded
             * </pre>
             *
             * <code>repeated sint64 memids = 9 [packed = true];</code>
             * @return The count of memids.
             */
            @Override
            public int getMemidsCount()
            {
                return this.memids_.size();
            }

            /**
             * <pre>
             * DELTA encoded
             * </pre>
             *
             * <code>repeated sint64 memids = 9 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The memids at the given index.
             */
            @Override
            public long getMemids(final int index)
            {
                return this.memids_.getLong(index);
            }

            /**
             * <pre>
             * DELTA encoded
             * </pre>
             *
             * <code>repeated sint64 memids = 9 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The memids to set.
             * @return This builder for chaining.
             */
            public Builder setMemids(final int index, final long value)
            {

                ensureMemidsIsMutable();
                this.memids_.setLong(index, value);
                this.bitField0_ |= 0x00000020;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA encoded
             * </pre>
             *
             * <code>repeated sint64 memids = 9 [packed = true];</code>
             * @param value The memids to add.
             * @return This builder for chaining.
             */
            public Builder addMemids(final long value)
            {

                ensureMemidsIsMutable();
                this.memids_.addLong(value);
                this.bitField0_ |= 0x00000020;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA encoded
             * </pre>
             *
             * <code>repeated sint64 memids = 9 [packed = true];</code>
             * @param values The memids to add.
             * @return This builder for chaining.
             */
            public Builder addAllMemids(final java.lang.Iterable<? extends java.lang.Long> values)
            {
                ensureMemidsIsMutable();
                com.google.protobuf.AbstractMessageLite.Builder.addAll(values, this.memids_);
                this.bitField0_ |= 0x00000020;
                onChanged();
                return this;
            }

            /**
             * <pre>
             * DELTA encoded
             * </pre>
             *
             * <code>repeated sint64 memids = 9 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearMemids()
            {
                this.memids_ = emptyLongList();
                this.bitField0_ = (this.bitField0_ & ~0x00000020);
                onChanged();
                return this;
            }

            private com.google.protobuf.Internal.IntList types_ = emptyIntList();

            private void ensureTypesIsMutable()
            {
                if (!this.types_.isModifiable())
                {
                    this.types_ = makeMutableCopy(this.types_);
                }
                this.bitField0_ |= 0x00000040;
            }

            /**
             * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
             * @return A list containing the types.
             */
            @Override
            public java.util.List<nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType> getTypesList()
            {
                return new com.google.protobuf.Internal.IntListAdapter<
                        nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType>(this.types_,
                                types_converter_);
            }

            /**
             * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
             * @return The count of types.
             */
            @Override
            public int getTypesCount()
            {
                return this.types_.size();
            }

            /**
             * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
             * @param index The index of the element to return.
             * @return The types at the given index.
             */
            @Override
            public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType getTypes(final int index)
            {
                return types_converter_.convert(this.types_.getInt(index));
            }

            /**
             * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
             * @param index The index to set the value at.
             * @param value The types to set.
             * @return This builder for chaining.
             */
            public Builder setTypes(final int index,
                    final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                ensureTypesIsMutable();
                this.types_.setInt(index, value.getNumber());
                onChanged();
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
             * @param value The types to add.
             * @return This builder for chaining.
             */
            public Builder addTypes(final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType value)
            {
                if (value == null)
                {
                    throw new NullPointerException();
                }
                ensureTypesIsMutable();
                this.types_.addInt(value.getNumber());
                onChanged();
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
             * @param values The types to add.
             * @return This builder for chaining.
             */
            public Builder addAllTypes(final java.lang.Iterable<
                    ? extends nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType> values)
            {
                ensureTypesIsMutable();
                for (nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation.MemberType value : values)
                {
                    this.types_.addInt(value.getNumber());
                }
                onChanged();
                return this;
            }

            /**
             * <code>repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];</code>
             * @return This builder for chaining.
             */
            public Builder clearTypes()
            {
                this.types_ = emptyIntList();
                this.bitField0_ = (this.bitField0_ & ~0x00000040);
                onChanged();
                return this;
            }

            // @@protoc_insertion_point(builder_scope:OSMPBF.Relation)
        }

        // @@protoc_insertion_point(class_scope:OSMPBF.Relation)
        private static final nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation DEFAULT_INSTANCE;
        static
        {
            DEFAULT_INSTANCE = new nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation();
        }

        public static nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation getDefaultInstance()
        {
            return DEFAULT_INSTANCE;
        }

        private static final com.google.protobuf.Parser<Relation> PARSER = new com.google.protobuf.AbstractParser<Relation>()
        {
            @java.lang.Override
            public Relation parsePartialFrom(final com.google.protobuf.CodedInputStream input,
                    final com.google.protobuf.ExtensionRegistryLite extensionRegistry)
                    throws com.google.protobuf.InvalidProtocolBufferException
            {
                Builder builder = newBuilder();
                try
                {
                    builder.mergeFrom(input, extensionRegistry);
                }
                catch (com.google.protobuf.InvalidProtocolBufferException e)
                {
                    throw e.setUnfinishedMessage(builder.buildPartial());
                }
                catch (com.google.protobuf.UninitializedMessageException e)
                {
                    throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
                }
                catch (java.io.IOException e)
                {
                    throw new com.google.protobuf.InvalidProtocolBufferException(e)
                            .setUnfinishedMessage(builder.buildPartial());
                }
                return builder.buildPartial();
            }
        };

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

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

        @java.lang.Override
        public nl.tudelft.simulation.dsol.animation.gis.osm.pbf.OSMPBF.Relation getDefaultInstanceForType()
        {
            return DEFAULT_INSTANCE;
        }

    }

    private static final com.google.protobuf.Descriptors.Descriptor internal_static_OSMPBF_HeaderBlock_descriptor;

    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_OSMPBF_HeaderBlock_fieldAccessorTable;

    private static final com.google.protobuf.Descriptors.Descriptor internal_static_OSMPBF_HeaderBBox_descriptor;

    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_OSMPBF_HeaderBBox_fieldAccessorTable;

    private static final com.google.protobuf.Descriptors.Descriptor internal_static_OSMPBF_PrimitiveBlock_descriptor;

    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_OSMPBF_PrimitiveBlock_fieldAccessorTable;

    private static final com.google.protobuf.Descriptors.Descriptor internal_static_OSMPBF_PrimitiveGroup_descriptor;

    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_OSMPBF_PrimitiveGroup_fieldAccessorTable;

    private static final com.google.protobuf.Descriptors.Descriptor internal_static_OSMPBF_StringTable_descriptor;

    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_OSMPBF_StringTable_fieldAccessorTable;

    private static final com.google.protobuf.Descriptors.Descriptor internal_static_OSMPBF_Info_descriptor;

    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_OSMPBF_Info_fieldAccessorTable;

    private static final com.google.protobuf.Descriptors.Descriptor internal_static_OSMPBF_DenseInfo_descriptor;

    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_OSMPBF_DenseInfo_fieldAccessorTable;

    private static final com.google.protobuf.Descriptors.Descriptor internal_static_OSMPBF_ChangeSet_descriptor;

    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_OSMPBF_ChangeSet_fieldAccessorTable;

    private static final com.google.protobuf.Descriptors.Descriptor internal_static_OSMPBF_Node_descriptor;

    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_OSMPBF_Node_fieldAccessorTable;

    private static final com.google.protobuf.Descriptors.Descriptor internal_static_OSMPBF_DenseNodes_descriptor;

    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_OSMPBF_DenseNodes_fieldAccessorTable;

    private static final com.google.protobuf.Descriptors.Descriptor internal_static_OSMPBF_Way_descriptor;

    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_OSMPBF_Way_fieldAccessorTable;

    private static final com.google.protobuf.Descriptors.Descriptor internal_static_OSMPBF_Relation_descriptor;

    private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_OSMPBF_Relation_fieldAccessorTable;

    public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor()
    {
        return descriptor;
    }

    private static com.google.protobuf.Descriptors.FileDescriptor descriptor;
    static
    {
        java.lang.String[] descriptorData = {"\n\017osmformat.proto\022\006OSMPBF\"\207\002\n\013HeaderBloc"
                + "k\022 \n\004bbox\030\001 \001(\0132\022.OSMPBF.HeaderBBox\022\031\n\021r"
                + "equired_features\030\004 \003(\t\022\031\n\021optional_featu"
                + "res\030\005 \003(\t\022\026\n\016writingprogram\030\020 \001(\t\022\016\n\006sou"
                + "rce\030\021 \001(\t\022%\n\035osmosis_replication_timesta"
                + "mp\030  \001(\003\022+\n#osmosis_replication_sequence"
                + "_number\030! \001(\003\022$\n\034osmosis_replication_bas"
                + "e_url\030\" \001(\t\"F\n\nHeaderBBox\022\014\n\004left\030\001 \002(\022\022"
                + "\r\n\005right\030\002 \002(\022\022\013\n\003top\030\003 \002(\022\022\016\n\006bottom\030\004 "
                + "\002(\022\"\322\001\n\016PrimitiveBlock\022(\n\013stringtable\030\001 "
                + "\002(\0132\023.OSMPBF.StringTable\022.\n\016primitivegro"
                + "up\030\002 \003(\0132\026.OSMPBF.PrimitiveGroup\022\030\n\013gran"
                + "ularity\030\021 \001(\005:\003100\022\025\n\nlat_offset\030\023 \001(\003:\001"
                + "0\022\025\n\nlon_offset\030\024 \001(\003:\0010\022\036\n\020date_granula"
                + "rity\030\022 \001(\005:\0041000\"\267\001\n\016PrimitiveGroup\022\033\n\005n"
                + "odes\030\001 \003(\0132\014.OSMPBF.Node\022!\n\005dense\030\002 \001(\0132"
                + "\022.OSMPBF.DenseNodes\022\031\n\004ways\030\003 \003(\0132\013.OSMP"
                + "BF.Way\022#\n\trelations\030\004 \003(\0132\020.OSMPBF.Relat"
                + "ion\022%\n\nchangesets\030\005 \003(\0132\021.OSMPBF.ChangeS"
                + "et\"\030\n\013StringTable\022\t\n\001s\030\001 \003(\014\"q\n\004Info\022\023\n\007"
                + "version\030\001 \001(\005:\002-1\022\021\n\ttimestamp\030\002 \001(\003\022\021\n\t"
                + "changeset\030\003 \001(\003\022\013\n\003uid\030\004 \001(\005\022\020\n\010user_sid"
                + "\030\005 \001(\r\022\017\n\007visible\030\006 \001(\010\"\212\001\n\tDenseInfo\022\023\n"
                + "\007version\030\001 \003(\005B\002\020\001\022\025\n\ttimestamp\030\002 \003(\022B\002\020"
                + "\001\022\025\n\tchangeset\030\003 \003(\022B\002\020\001\022\017\n\003uid\030\004 \003(\021B\002\020"
                + "\001\022\024\n\010user_sid\030\005 \003(\021B\002\020\001\022\023\n\007visible\030\006 \003(\010"
                + "B\002\020\001\"\027\n\tChangeSet\022\n\n\002id\030\001 \002(\003\"l\n\004Node\022\n\n"
                + "\002id\030\001 \002(\022\022\020\n\004keys\030\002 \003(\rB\002\020\001\022\020\n\004vals\030\003 \003("
                + "\rB\002\020\001\022\032\n\004info\030\004 \001(\0132\014.OSMPBF.Info\022\013\n\003lat"
                + "\030\010 \002(\022\022\013\n\003lon\030\t \002(\022\"{\n\nDenseNodes\022\016\n\002id\030"
                + "\001 \003(\022B\002\020\001\022$\n\tdenseinfo\030\005 \001(\0132\021.OSMPBF.De"
                + "nseInfo\022\017\n\003lat\030\010 \003(\022B\002\020\001\022\017\n\003lon\030\t \003(\022B\002\020"
                + "\001\022\025\n\tkeys_vals\030\n \003(\005B\002\020\001\"\205\001\n\003Way\022\n\n\002id\030\001"
                + " \002(\003\022\020\n\004keys\030\002 \003(\rB\002\020\001\022\020\n\004vals\030\003 \003(\rB\002\020\001"
                + "\022\032\n\004info\030\004 \001(\0132\014.OSMPBF.Info\022\020\n\004refs\030\010 \003"
                + "(\022B\002\020\001\022\017\n\003lat\030\t \003(\022B\002\020\001\022\017\n\003lon\030\n \003(\022B\002\020\001"
                + "\"\340\001\n\010Relation\022\n\n\002id\030\001 \002(\003\022\020\n\004keys\030\002 \003(\rB"
                + "\002\020\001\022\020\n\004vals\030\003 \003(\rB\002\020\001\022\032\n\004info\030\004 \001(\0132\014.OS"
                + "MPBF.Info\022\025\n\troles_sid\030\010 \003(\005B\002\020\001\022\022\n\006memi"
                + "ds\030\t \003(\022B\002\020\001\022.\n\005types\030\n \003(\0162\033.OSMPBF.Rel"
                + "ation.MemberTypeB\002\020\001\"-\n\nMemberType\022\010\n\004NO"
                + "DE\020\000\022\007\n\003WAY\020\001\022\014\n\010RELATION\020\002B\031\n\027io.github" + ".osmreader.pbf"};
        descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData,
                new com.google.protobuf.Descriptors.FileDescriptor[] {});
        internal_static_OSMPBF_HeaderBlock_descriptor = getDescriptor().getMessageTypes().get(0);
        internal_static_OSMPBF_HeaderBlock_fieldAccessorTable =
                new com.google.protobuf.GeneratedMessage.FieldAccessorTable(internal_static_OSMPBF_HeaderBlock_descriptor,
                        new java.lang.String[] {"Bbox", "RequiredFeatures", "OptionalFeatures", "Writingprogram", "Source",
                                "OsmosisReplicationTimestamp", "OsmosisReplicationSequenceNumber",
                                "OsmosisReplicationBaseUrl",});
        internal_static_OSMPBF_HeaderBBox_descriptor = getDescriptor().getMessageTypes().get(1);
        internal_static_OSMPBF_HeaderBBox_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_OSMPBF_HeaderBBox_descriptor, new java.lang.String[] {"Left", "Right", "Top", "Bottom",});
        internal_static_OSMPBF_PrimitiveBlock_descriptor = getDescriptor().getMessageTypes().get(2);
        internal_static_OSMPBF_PrimitiveBlock_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_OSMPBF_PrimitiveBlock_descriptor, new java.lang.String[] {"Stringtable", "Primitivegroup",
                        "Granularity", "LatOffset", "LonOffset", "DateGranularity",});
        internal_static_OSMPBF_PrimitiveGroup_descriptor = getDescriptor().getMessageTypes().get(3);
        internal_static_OSMPBF_PrimitiveGroup_fieldAccessorTable =
                new com.google.protobuf.GeneratedMessage.FieldAccessorTable(internal_static_OSMPBF_PrimitiveGroup_descriptor,
                        new java.lang.String[] {"Nodes", "Dense", "Ways", "Relations", "Changesets",});
        internal_static_OSMPBF_StringTable_descriptor = getDescriptor().getMessageTypes().get(4);
        internal_static_OSMPBF_StringTable_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_OSMPBF_StringTable_descriptor, new java.lang.String[] {"S",});
        internal_static_OSMPBF_Info_descriptor = getDescriptor().getMessageTypes().get(5);
        internal_static_OSMPBF_Info_fieldAccessorTable =
                new com.google.protobuf.GeneratedMessage.FieldAccessorTable(internal_static_OSMPBF_Info_descriptor,
                        new java.lang.String[] {"Version", "Timestamp", "Changeset", "Uid", "UserSid", "Visible",});
        internal_static_OSMPBF_DenseInfo_descriptor = getDescriptor().getMessageTypes().get(6);
        internal_static_OSMPBF_DenseInfo_fieldAccessorTable =
                new com.google.protobuf.GeneratedMessage.FieldAccessorTable(internal_static_OSMPBF_DenseInfo_descriptor,
                        new java.lang.String[] {"Version", "Timestamp", "Changeset", "Uid", "UserSid", "Visible",});
        internal_static_OSMPBF_ChangeSet_descriptor = getDescriptor().getMessageTypes().get(7);
        internal_static_OSMPBF_ChangeSet_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_OSMPBF_ChangeSet_descriptor, new java.lang.String[] {"Id",});
        internal_static_OSMPBF_Node_descriptor = getDescriptor().getMessageTypes().get(8);
        internal_static_OSMPBF_Node_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(
                internal_static_OSMPBF_Node_descriptor, new java.lang.String[] {"Id", "Keys", "Vals", "Info", "Lat", "Lon",});
        internal_static_OSMPBF_DenseNodes_descriptor = getDescriptor().getMessageTypes().get(9);
        internal_static_OSMPBF_DenseNodes_fieldAccessorTable =
                new com.google.protobuf.GeneratedMessage.FieldAccessorTable(internal_static_OSMPBF_DenseNodes_descriptor,
                        new java.lang.String[] {"Id", "Denseinfo", "Lat", "Lon", "KeysVals",});
        internal_static_OSMPBF_Way_descriptor = getDescriptor().getMessageTypes().get(10);
        internal_static_OSMPBF_Way_fieldAccessorTable =
                new com.google.protobuf.GeneratedMessage.FieldAccessorTable(internal_static_OSMPBF_Way_descriptor,
                        new java.lang.String[] {"Id", "Keys", "Vals", "Info", "Refs", "Lat", "Lon",});
        internal_static_OSMPBF_Relation_descriptor = getDescriptor().getMessageTypes().get(11);
        internal_static_OSMPBF_Relation_fieldAccessorTable =
                new com.google.protobuf.GeneratedMessage.FieldAccessorTable(internal_static_OSMPBF_Relation_descriptor,
                        new java.lang.String[] {"Id", "Keys", "Vals", "Info", "RolesSid", "Memids", "Types",});
        descriptor.resolveAllFeaturesImmutable();
    }

    // @@protoc_insertion_point(outer_class_scope)
    // CHECKSTYLE:ON
}