Index: /applications/editors/josm/plugins/pbf/.classpath
===================================================================
--- /applications/editors/josm/plugins/pbf/.classpath	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/.classpath	(revision 26961)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="gen"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6.0_29"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/JOSM"/>
+	<classpathentry kind="output" path="build"/>
+</classpath>
Index: /applications/editors/josm/plugins/pbf/.project
===================================================================
--- /applications/editors/josm/plugins/pbf/.project	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/.project	(revision 26961)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>JOSM-PBF</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
Index: /applications/editors/josm/plugins/pbf/README
===================================================================
--- /applications/editors/josm/plugins/pbf/README	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/README	(revision 26961)
@@ -0,0 +1,14 @@
+README 
+======
+
+Readme for JOSM PBF plugin
+
+    * Author: Don-vip
+    * License: GPL v3 (see gpl-3.0.txt) (all sources, except ones under crosby.binary package)
+    * License: LGPL v3 (see lgpl-3.0.txt) (only sources under crosby.binary package)
+    
+This plugin allows to import OSM data in PBF format.
+
+See http://wiki.openstreetmap.org/wiki/PBF
+
+The source code in package crosby.binary has been copied from https://github.com/scrosby/OSM-binary.
Index: /applications/editors/josm/plugins/pbf/build.xml
===================================================================
--- /applications/editors/josm/plugins/pbf/build.xml	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/build.xml	(revision 26961)
@@ -0,0 +1,237 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<!--
+** This is a template build file for the PBF plugin.
+**
+** Maintaining versions
+** ====================
+** see README.template
+**
+** Usage
+** =====
+** To build it run
+**
+**    > ant  dist
+**
+** To install the generated plugin locally (in you default plugin directory) run
+**
+**    > ant  install
+**
+** The generated plugin jar is not automatically available in JOSMs plugin configuration
+** dialog. You have to check it in first.
+**
+** Use the ant target 'publish' to check in the plugin and make it available to other
+** JOSM users:
+**    set the properties commit.message and plugin.main.version
+** and run
+**    > ant  publish
+**
+**
+-->
+<project name="pbf" default="dist" basedir=".">
+    <!-- enter the SVN commit message -->
+    <property name="commit.message" value="Commit message"/>
+    <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
+    <property name="plugin.main.version" value="4541"/>
+    <!-- should not be necessary to change the following properties -->
+    <property name="josm" location="../../core/dist/josm-custom.jar"/>
+    <property name="plugin.build.dir" value="build"/>
+    <property name="plugin.src.dir" value="src"/>
+    <!-- this is the directory where the plugin jar is copied to -->
+    <property name="plugin.dist.dir" value="../../dist"/>
+    <property name="ant.build.javac.source" value="1.6"/>
+    <property name="ant.build.javac.target" value="1.6"/>
+    <property name="plugin.dist.dir" value="../../dist"/>
+    <property name="plugin.jar" value="${plugin.dist.dir}/${ant.project.name}.jar"/>
+    <!--
+    **********************************************************
+    ** init - initializes the build
+    **********************************************************
+    -->
+    <target name="init">
+        <mkdir dir="${plugin.build.dir}"/>
+    </target>
+    <!--
+    **********************************************************
+    ** compile - complies the source tree
+    **********************************************************
+    -->
+    <target name="compile" depends="init">
+        <echo message="compiling sources for  ${plugin.jar} ... "/>
+        <javac classpath="${josm}" debug="true" destdir="${plugin.build.dir}" includeAntRuntime="false">
+            <compilerarg value="-Xlint:deprecation"/>
+            <compilerarg value="-Xlint:unchecked"/>
+        	<src path="src" />
+            <src path="gen" />
+        </javac>
+    </target>
+    <!--
+    **********************************************************
+    ** dist - creates the plugin jar
+    **********************************************************
+    -->
+    <target name="dist" depends="compile,revision">
+        <echo message="creating ${ant.project.name}.jar ... "/>
+        <copy todir="${plugin.build.dir}/resources">
+            <fileset dir="resources"/>
+        </copy>
+        <copy todir="${plugin.build.dir}/images">
+            <fileset dir="images"/>
+        </copy>
+        <copy todir="${plugin.build.dir}/data">
+            <fileset dir="data"/>
+        </copy>
+        <copy todir="${plugin.build.dir}">
+            <fileset dir=".">
+                <include name="README"/>
+                <include name="gpl-3.0.txt"/>
+            </fileset>
+        </copy>
+        <jar destfile="${plugin.jar}" basedir="${plugin.build.dir}">
+            <!--
+            ************************************************
+            ** configure these properties. Most of them will be copied to the plugins
+            ** manifest file. Property values will also show up in the list available
+            ** plugins: http://josm.openstreetmap.de/wiki/Plugins.
+            **
+            ************************************************
+            -->
+            <manifest>
+                <attribute name="Author" value="Don-vip"/>
+                <attribute name="Plugin-Class" value="org.openstreetmap.josm.plugins.pbf.PbfPlugin"/>
+                <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
+                <attribute name="Plugin-Description" value="Import OSM data in PBF format"/>
+                <attribute name="Plugin-Early" value="false"/>
+                <!--<attribute name="Plugin-Icon" value="images/pbf_24.png"/>-->
+                <attribute name="Plugin-Link" value="http://wiki.openstreetmap.org/wiki/JOSM/Plugins/PBF"/>
+                <attribute name="Plugin-Mainversion" value="${plugin.main.version}"/>
+                <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
+            </manifest>
+        </jar>
+    </target>
+    <!--
+    **********************************************************
+    ** revision - extracts the current revision number for the
+    **    file build.number and stores it in the XML property
+    **    version.*
+    **********************************************************
+    -->
+    <target name="revision">
+        <exec append="false" output="REVISION" executable="svn" failifexecutionfails="false">
+            <env key="LANG" value="C"/>
+            <arg value="info"/>
+            <arg value="--xml"/>
+            <arg value="."/>
+        </exec>
+        <xmlproperty file="REVISION" prefix="version" keepRoot="false" collapseAttributes="true"/>
+        <delete file="REVISION"/>
+    </target>
+    <!--
+    **********************************************************
+    ** clean - clean up the build environment
+    **********************************************************
+    -->
+    <target name="clean">
+        <delete dir="${plugin.build.dir}"/>
+        <delete file="${plugin.jar}"/>
+    </target>
+    <!--
+    **********************************************************
+    ** install - install the plugin in your local JOSM installation
+    **********************************************************
+    -->
+    <target name="install" depends="dist">
+        <property environment="env"/>
+        <condition property="josm.plugins.dir" value="${env.APPDATA}/JOSM/plugins" else="${user.home}/.josm/plugins">
+            <and>
+                <os family="windows"/>
+            </and>
+        </condition>
+        <copy file="${plugin.jar}" todir="${josm.plugins.dir}"/>
+    </target>
+    <!--
+    ************************** Publishing the plugin *********************************** 
+    -->
+    <!--
+    ** extracts the JOSM release for the JOSM version in ../core and saves it in the 
+    ** property ${coreversion.info.entry.revision}
+    -->
+    <target name="core-info">
+        <exec append="false" output="core.info.xml" executable="svn" failifexecutionfails="false">
+            <env key="LANG" value="C"/>
+            <arg value="info"/>
+            <arg value="--xml"/>
+            <arg value="../../core"/>
+        </exec>
+        <xmlproperty file="core.info.xml" prefix="coreversion" keepRoot="true" collapseAttributes="true"/>
+        <echo>Building against core revision ${coreversion.info.entry.revision}.</echo>
+        <echo>Plugin-Mainversion is set to ${plugin.main.version}.</echo>
+        <delete file="core.info.xml"/>
+    </target>
+    <!-- commits the source tree for this plugin -->
+    <target name="commit-current">
+        <echo>Commiting the plugin source with message '${commit.message}' ...</echo>
+        <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
+            <env key="LANG" value="C"/>
+            <arg value="commit"/>
+            <arg value="-m '${commit.message}'"/>
+            <arg value="."/>
+        </exec>
+    </target>
+    <!-- updates (svn up) the source tree for this plugin -->
+    <target name="update-current">
+        <echo>Updating plugin source ...</echo>
+        <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
+            <env key="LANG" value="C"/>
+            <arg value="up"/>
+            <arg value="."/>
+        </exec>
+        <echo>Updating ${plugin.jar} ...</echo>
+        <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
+            <env key="LANG" value="C"/>
+            <arg value="up"/>
+            <arg value="../dist/${plugin.jar}"/>
+        </exec>
+    </target>
+    <!-- commits the plugin.jar -->
+    <target name="commit-dist">
+        <echo>
+    ***** Properties of published ${plugin.jar} *****
+    Commit message    : '${commit.message}'                    
+    Plugin-Mainversion: ${plugin.main.version}
+    JOSM build version: ${coreversion.info.entry.revision}
+    Plugin-Version    : ${version.entry.commit.revision}
+    ***** / Properties of published ${plugin.jar} *****                    
+                        
+    Now commiting ${plugin.jar} ...
+    </echo>
+        <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false">
+            <env key="LANG" value="C"/>
+            <arg value="-m '${commit.message}'"/>
+            <arg value="commit"/>
+            <arg value="${plugin.jar}"/>
+        </exec>
+    </target>
+    <!-- make sure svn is present as a command line tool -->
+    <target name="ensure-svn-present">
+        <exec append="true" output="svn.log" executable="svn" failifexecutionfails="false" failonerror="false" resultproperty="svn.exit.code">
+            <env key="LANG" value="C"/>
+            <arg value="--version"/>
+        </exec>
+        <fail message="Fatal: command 'svn --version' failed. Please make sure svn is installed on your system.">
+            <!-- return code not set at all? Most likely svn isn't installed -->
+            <condition>
+                <not>
+                    <isset property="svn.exit.code"/>
+                </not>
+            </condition>
+        </fail>
+        <fail message="Fatal: command 'svn --version' failed. Please make sure a working copy of svn is installed on your system.">
+            <!-- error code from SVN? Most likely svn is not what we are looking on this system -->
+            <condition>
+                <isfailure code="${svn.exit.code}"/>
+            </condition>
+        </fail>
+    </target>
+    <target name="publish" depends="ensure-svn-present,core-info,commit-current,update-current,clean,dist,commit-dist">
+    </target>
+</project>
Index: /applications/editors/josm/plugins/pbf/gen/com/google/protobuf/DescriptorProtos.java
===================================================================
--- /applications/editors/josm/plugins/pbf/gen/com/google/protobuf/DescriptorProtos.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/gen/com/google/protobuf/DescriptorProtos.java	(revision 26961)
@@ -0,0 +1,17063 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/protobuf/descriptor.proto
+
+package com.google.protobuf;
+
+public final class DescriptorProtos {
+  private DescriptorProtos() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+  }
+  public interface FileDescriptorSetOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // repeated .google.protobuf.FileDescriptorProto file = 1;
+    java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> 
+        getFileList();
+    com.google.protobuf.DescriptorProtos.FileDescriptorProto getFile(int index);
+    int getFileCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder> 
+        getFileOrBuilderList();
+    com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder getFileOrBuilder(
+        int index);
+  }
+  public static final class FileDescriptorSet extends
+      com.google.protobuf.GeneratedMessage
+      implements FileDescriptorSetOrBuilder {
+    // Use FileDescriptorSet.newBuilder() to construct.
+    private FileDescriptorSet(Builder builder) {
+      super(builder);
+    }
+    private FileDescriptorSet(boolean noInit) {}
+    
+    private static final FileDescriptorSet defaultInstance;
+    public static FileDescriptorSet getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public FileDescriptorSet getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable;
+    }
+    
+    // repeated .google.protobuf.FileDescriptorProto file = 1;
+    public static final int FILE_FIELD_NUMBER = 1;
+    private java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> file_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> getFileList() {
+      return file_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder> 
+        getFileOrBuilderList() {
+      return file_;
+    }
+    public int getFileCount() {
+      return file_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.FileDescriptorProto getFile(int index) {
+      return file_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder getFileOrBuilder(
+        int index) {
+      return file_.get(index);
+    }
+    
+    private void initFields() {
+      file_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      for (int i = 0; i < getFileCount(); i++) {
+        if (!getFile(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      for (int i = 0; i < file_.size(); i++) {
+        output.writeMessage(1, file_.get(i));
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      for (int i = 0; i < file_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, file_.get(i));
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorSet parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FileDescriptorSet prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.google.protobuf.DescriptorProtos.FileDescriptorSetOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.FileDescriptorSet.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getFileFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        if (fileBuilder_ == null) {
+          file_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          fileBuilder_.clear();
+        }
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.FileDescriptorSet.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FileDescriptorSet getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.FileDescriptorSet.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FileDescriptorSet build() {
+        com.google.protobuf.DescriptorProtos.FileDescriptorSet result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.FileDescriptorSet buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.FileDescriptorSet result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FileDescriptorSet buildPartial() {
+        com.google.protobuf.DescriptorProtos.FileDescriptorSet result = new com.google.protobuf.DescriptorProtos.FileDescriptorSet(this);
+        //int from_bitField0_ = bitField0_;
+        if (fileBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001)) {
+            file_ = java.util.Collections.unmodifiableList(file_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.file_ = file_;
+        } else {
+          result.file_ = fileBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.FileDescriptorSet) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.FileDescriptorSet)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FileDescriptorSet other) {
+        if (other == com.google.protobuf.DescriptorProtos.FileDescriptorSet.getDefaultInstance()) return this;
+        if (fileBuilder_ == null) {
+          if (!other.file_.isEmpty()) {
+            if (file_.isEmpty()) {
+              file_ = other.file_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureFileIsMutable();
+              file_.addAll(other.file_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.file_.isEmpty()) {
+            if (fileBuilder_.isEmpty()) {
+              fileBuilder_.dispose();
+              fileBuilder_ = null;
+              file_ = other.file_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              fileBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getFileFieldBuilder() : null;
+            } else {
+              fileBuilder_.addAllMessages(other.file_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        for (int i = 0; i < getFileCount(); i++) {
+          if (!getFile(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.FileDescriptorProto.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addFile(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // repeated .google.protobuf.FileDescriptorProto file = 1;
+      private java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> file_ =
+        java.util.Collections.emptyList();
+      private void ensureFileIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          file_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.FileDescriptorProto>(file_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.FileDescriptorProto, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder> fileBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto> getFileList() {
+        if (fileBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(file_);
+        } else {
+          return fileBuilder_.getMessageList();
+        }
+      }
+      public int getFileCount() {
+        if (fileBuilder_ == null) {
+          return file_.size();
+        } else {
+          return fileBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.FileDescriptorProto getFile(int index) {
+        if (fileBuilder_ == null) {
+          return file_.get(index);
+        } else {
+          return fileBuilder_.getMessage(index);
+        }
+      }
+      public Builder setFile(
+          int index, com.google.protobuf.DescriptorProtos.FileDescriptorProto value) {
+        if (fileBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFileIsMutable();
+          file_.set(index, value);
+          onChanged();
+        } else {
+          fileBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setFile(
+          int index, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {
+        if (fileBuilder_ == null) {
+          ensureFileIsMutable();
+          file_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          fileBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addFile(com.google.protobuf.DescriptorProtos.FileDescriptorProto value) {
+        if (fileBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFileIsMutable();
+          file_.add(value);
+          onChanged();
+        } else {
+          fileBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addFile(
+          int index, com.google.protobuf.DescriptorProtos.FileDescriptorProto value) {
+        if (fileBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFileIsMutable();
+          file_.add(index, value);
+          onChanged();
+        } else {
+          fileBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addFile(
+          com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {
+        if (fileBuilder_ == null) {
+          ensureFileIsMutable();
+          file_.add(builderForValue.build());
+          onChanged();
+        } else {
+          fileBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addFile(
+          int index, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {
+        if (fileBuilder_ == null) {
+          ensureFileIsMutable();
+          file_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          fileBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllFile(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.FileDescriptorProto> values) {
+        if (fileBuilder_ == null) {
+          ensureFileIsMutable();
+          super.addAll(values, file_);
+          onChanged();
+        } else {
+          fileBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearFile() {
+        if (fileBuilder_ == null) {
+          file_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          fileBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeFile(int index) {
+        if (fileBuilder_ == null) {
+          ensureFileIsMutable();
+          file_.remove(index);
+          onChanged();
+        } else {
+          fileBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder getFileBuilder(
+          int index) {
+        return getFileFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder getFileOrBuilder(
+          int index) {
+        if (fileBuilder_ == null) {
+          return file_.get(index);  } else {
+          return fileBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder> 
+           getFileOrBuilderList() {
+        if (fileBuilder_ != null) {
+          return fileBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(file_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder addFileBuilder() {
+        return getFileFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder addFileBuilder(
+          int index) {
+        return getFileFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder> 
+           getFileBuilderList() {
+        return getFileFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.FileDescriptorProto, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder> 
+          getFileFieldBuilder() {
+        if (fileBuilder_ == null) {
+          fileBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.FileDescriptorProto, com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder>(
+                  file_,
+                  ((bitField0_ & 0x00000001) == 0x00000001),
+                  getParentForChildren(),
+                  isClean());
+          file_ = null;
+        }
+        return fileBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.FileDescriptorSet)
+    }
+    
+    static {
+      defaultInstance = new FileDescriptorSet(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorSet)
+  }
+  
+  public interface FileDescriptorProtoOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional string name = 1;
+    boolean hasName();
+    String getName();
+    
+    // optional string package = 2;
+    boolean hasPackage();
+    String getPackage();
+    
+    // repeated string dependency = 3;
+    java.util.List<String> getDependencyList();
+    int getDependencyCount();
+    String getDependency(int index);
+    
+    // repeated .google.protobuf.DescriptorProto message_type = 4;
+    java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> 
+        getMessageTypeList();
+    com.google.protobuf.DescriptorProtos.DescriptorProto getMessageType(int index);
+    int getMessageTypeCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
+        getMessageTypeOrBuilderList();
+    com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getMessageTypeOrBuilder(
+        int index);
+    
+    // repeated .google.protobuf.EnumDescriptorProto enum_type = 5;
+    java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> 
+        getEnumTypeList();
+    com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index);
+    int getEnumTypeCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
+        getEnumTypeOrBuilderList();
+    com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
+        int index);
+    
+    // repeated .google.protobuf.ServiceDescriptorProto service = 6;
+    java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> 
+        getServiceList();
+    com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getService(int index);
+    int getServiceCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> 
+        getServiceOrBuilderList();
+    com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder getServiceOrBuilder(
+        int index);
+    
+    // repeated .google.protobuf.FieldDescriptorProto extension = 7;
+    java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> 
+        getExtensionList();
+    com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index);
+    int getExtensionCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
+        getExtensionOrBuilderList();
+    com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
+        int index);
+    
+    // optional .google.protobuf.FileOptions options = 8;
+    boolean hasOptions();
+    com.google.protobuf.DescriptorProtos.FileOptions getOptions();
+    com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder getOptionsOrBuilder();
+    
+    // optional .google.protobuf.SourceCodeInfo source_code_info = 9;
+    boolean hasSourceCodeInfo();
+    com.google.protobuf.DescriptorProtos.SourceCodeInfo getSourceCodeInfo();
+    com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder();
+  }
+  public static final class FileDescriptorProto extends
+      com.google.protobuf.GeneratedMessage
+      implements FileDescriptorProtoOrBuilder {
+    // Use FileDescriptorProto.newBuilder() to construct.
+    private FileDescriptorProto(Builder builder) {
+      super(builder);
+    }
+    private FileDescriptorProto(boolean noInit) {}
+    
+    private static final FileDescriptorProto defaultInstance;
+    public static FileDescriptorProto getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public FileDescriptorProto getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional string name = 1;
+    public static final int NAME_FIELD_NUMBER = 1;
+    private java.lang.Object name_;
+    public boolean hasName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          name_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional string package = 2;
+    public static final int PACKAGE_FIELD_NUMBER = 2;
+    private java.lang.Object package_;
+    public boolean hasPackage() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public String getPackage() {
+      java.lang.Object ref = package_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          package_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getPackageBytes() {
+      java.lang.Object ref = package_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        package_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // repeated string dependency = 3;
+    public static final int DEPENDENCY_FIELD_NUMBER = 3;
+    private com.google.protobuf.LazyStringList dependency_;
+    public java.util.List<String>
+        getDependencyList() {
+      return dependency_;
+    }
+    public int getDependencyCount() {
+      return dependency_.size();
+    }
+    public String getDependency(int index) {
+      return dependency_.get(index);
+    }
+    
+    // repeated .google.protobuf.DescriptorProto message_type = 4;
+    public static final int MESSAGE_TYPE_FIELD_NUMBER = 4;
+    private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> messageType_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> getMessageTypeList() {
+      return messageType_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
+        getMessageTypeOrBuilderList() {
+      return messageType_;
+    }
+    public int getMessageTypeCount() {
+      return messageType_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.DescriptorProto getMessageType(int index) {
+      return messageType_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getMessageTypeOrBuilder(
+        int index) {
+      return messageType_.get(index);
+    }
+    
+    // repeated .google.protobuf.EnumDescriptorProto enum_type = 5;
+    public static final int ENUM_TYPE_FIELD_NUMBER = 5;
+    private java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> enumType_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> getEnumTypeList() {
+      return enumType_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
+        getEnumTypeOrBuilderList() {
+      return enumType_;
+    }
+    public int getEnumTypeCount() {
+      return enumType_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) {
+      return enumType_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
+        int index) {
+      return enumType_.get(index);
+    }
+    
+    // repeated .google.protobuf.ServiceDescriptorProto service = 6;
+    public static final int SERVICE_FIELD_NUMBER = 6;
+    private java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> service_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> getServiceList() {
+      return service_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> 
+        getServiceOrBuilderList() {
+      return service_;
+    }
+    public int getServiceCount() {
+      return service_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getService(int index) {
+      return service_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder getServiceOrBuilder(
+        int index) {
+      return service_.get(index);
+    }
+    
+    // repeated .google.protobuf.FieldDescriptorProto extension = 7;
+    public static final int EXTENSION_FIELD_NUMBER = 7;
+    private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> extension_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getExtensionList() {
+      return extension_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
+        getExtensionOrBuilderList() {
+      return extension_;
+    }
+    public int getExtensionCount() {
+      return extension_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) {
+      return extension_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
+        int index) {
+      return extension_.get(index);
+    }
+    
+    // optional .google.protobuf.FileOptions options = 8;
+    public static final int OPTIONS_FIELD_NUMBER = 8;
+    private com.google.protobuf.DescriptorProtos.FileOptions options_;
+    public boolean hasOptions() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public com.google.protobuf.DescriptorProtos.FileOptions getOptions() {
+      return options_;
+    }
+    public com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder getOptionsOrBuilder() {
+      return options_;
+    }
+    
+    // optional .google.protobuf.SourceCodeInfo source_code_info = 9;
+    public static final int SOURCE_CODE_INFO_FIELD_NUMBER = 9;
+    private com.google.protobuf.DescriptorProtos.SourceCodeInfo sourceCodeInfo_;
+    public boolean hasSourceCodeInfo() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public com.google.protobuf.DescriptorProtos.SourceCodeInfo getSourceCodeInfo() {
+      return sourceCodeInfo_;
+    }
+    public com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder() {
+      return sourceCodeInfo_;
+    }
+    
+    private void initFields() {
+      name_ = "";
+      package_ = "";
+      dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      messageType_ = java.util.Collections.emptyList();
+      enumType_ = java.util.Collections.emptyList();
+      service_ = java.util.Collections.emptyList();
+      extension_ = java.util.Collections.emptyList();
+      options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
+      sourceCodeInfo_ = com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      for (int i = 0; i < getMessageTypeCount(); i++) {
+        if (!getMessageType(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      for (int i = 0; i < getEnumTypeCount(); i++) {
+        if (!getEnumType(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      for (int i = 0; i < getServiceCount(); i++) {
+        if (!getService(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      for (int i = 0; i < getExtensionCount(); i++) {
+        if (!getExtension(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (hasOptions()) {
+        if (!getOptions().isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBytes(2, getPackageBytes());
+      }
+      for (int i = 0; i < dependency_.size(); i++) {
+        output.writeBytes(3, dependency_.getByteString(i));
+      }
+      for (int i = 0; i < messageType_.size(); i++) {
+        output.writeMessage(4, messageType_.get(i));
+      }
+      for (int i = 0; i < enumType_.size(); i++) {
+        output.writeMessage(5, enumType_.get(i));
+      }
+      for (int i = 0; i < service_.size(); i++) {
+        output.writeMessage(6, service_.get(i));
+      }
+      for (int i = 0; i < extension_.size(); i++) {
+        output.writeMessage(7, extension_.get(i));
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeMessage(8, options_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeMessage(9, sourceCodeInfo_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(2, getPackageBytes());
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < dependency_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(dependency_.getByteString(i));
+        }
+        size += dataSize;
+        size += 1 * getDependencyList().size();
+      }
+      for (int i = 0; i < messageType_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, messageType_.get(i));
+      }
+      for (int i = 0; i < enumType_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, enumType_.get(i));
+      }
+      for (int i = 0; i < service_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, service_.get(i));
+      }
+      for (int i = 0; i < extension_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, extension_.get(i));
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, options_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(9, sourceCodeInfo_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FileDescriptorProto prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.google.protobuf.DescriptorProtos.FileDescriptorProtoOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.FileDescriptorProto.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getMessageTypeFieldBuilder();
+          getEnumTypeFieldBuilder();
+          getServiceFieldBuilder();
+          getExtensionFieldBuilder();
+          getOptionsFieldBuilder();
+          getSourceCodeInfoFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        package_ = "";
+        bitField0_ = (bitField0_ & ~0x00000002);
+        dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        if (messageTypeBuilder_ == null) {
+          messageType_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+        } else {
+          messageTypeBuilder_.clear();
+        }
+        if (enumTypeBuilder_ == null) {
+          enumType_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000010);
+        } else {
+          enumTypeBuilder_.clear();
+        }
+        if (serviceBuilder_ == null) {
+          service_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000020);
+        } else {
+          serviceBuilder_.clear();
+        }
+        if (extensionBuilder_ == null) {
+          extension_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000040);
+        } else {
+          extensionBuilder_.clear();
+        }
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000080);
+        if (sourceCodeInfoBuilder_ == null) {
+          sourceCodeInfo_ = com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
+        } else {
+          sourceCodeInfoBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000100);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FileDescriptorProto getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FileDescriptorProto build() {
+        com.google.protobuf.DescriptorProtos.FileDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.FileDescriptorProto buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.FileDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FileDescriptorProto buildPartial() {
+        com.google.protobuf.DescriptorProtos.FileDescriptorProto result = new com.google.protobuf.DescriptorProtos.FileDescriptorProto(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.name_ = name_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.package_ = package_;
+        if (((bitField0_ & 0x00000004) == 0x00000004)) {
+          dependency_ = new com.google.protobuf.UnmodifiableLazyStringList(
+              dependency_);
+          bitField0_ = (bitField0_ & ~0x00000004);
+        }
+        result.dependency_ = dependency_;
+        if (messageTypeBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) == 0x00000008)) {
+            messageType_ = java.util.Collections.unmodifiableList(messageType_);
+            bitField0_ = (bitField0_ & ~0x00000008);
+          }
+          result.messageType_ = messageType_;
+        } else {
+          result.messageType_ = messageTypeBuilder_.build();
+        }
+        if (enumTypeBuilder_ == null) {
+          if (((bitField0_ & 0x00000010) == 0x00000010)) {
+            enumType_ = java.util.Collections.unmodifiableList(enumType_);
+            bitField0_ = (bitField0_ & ~0x00000010);
+          }
+          result.enumType_ = enumType_;
+        } else {
+          result.enumType_ = enumTypeBuilder_.build();
+        }
+        if (serviceBuilder_ == null) {
+          if (((bitField0_ & 0x00000020) == 0x00000020)) {
+            service_ = java.util.Collections.unmodifiableList(service_);
+            bitField0_ = (bitField0_ & ~0x00000020);
+          }
+          result.service_ = service_;
+        } else {
+          result.service_ = serviceBuilder_.build();
+        }
+        if (extensionBuilder_ == null) {
+          if (((bitField0_ & 0x00000040) == 0x00000040)) {
+            extension_ = java.util.Collections.unmodifiableList(extension_);
+            bitField0_ = (bitField0_ & ~0x00000040);
+          }
+          result.extension_ = extension_;
+        } else {
+          result.extension_ = extensionBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        if (optionsBuilder_ == null) {
+          result.options_ = options_;
+        } else {
+          result.options_ = optionsBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        if (sourceCodeInfoBuilder_ == null) {
+          result.sourceCodeInfo_ = sourceCodeInfo_;
+        } else {
+          result.sourceCodeInfo_ = sourceCodeInfoBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.FileDescriptorProto) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.FileDescriptorProto)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FileDescriptorProto other) {
+        if (other == com.google.protobuf.DescriptorProtos.FileDescriptorProto.getDefaultInstance()) return this;
+        if (other.hasName()) {
+          setName(other.getName());
+        }
+        if (other.hasPackage()) {
+          setPackage(other.getPackage());
+        }
+        if (!other.dependency_.isEmpty()) {
+          if (dependency_.isEmpty()) {
+            dependency_ = other.dependency_;
+            bitField0_ = (bitField0_ & ~0x00000004);
+          } else {
+            ensureDependencyIsMutable();
+            dependency_.addAll(other.dependency_);
+          }
+          onChanged();
+        }
+        if (messageTypeBuilder_ == null) {
+          if (!other.messageType_.isEmpty()) {
+            if (messageType_.isEmpty()) {
+              messageType_ = other.messageType_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+            } else {
+              ensureMessageTypeIsMutable();
+              messageType_.addAll(other.messageType_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.messageType_.isEmpty()) {
+            if (messageTypeBuilder_.isEmpty()) {
+              messageTypeBuilder_.dispose();
+              messageTypeBuilder_ = null;
+              messageType_ = other.messageType_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+              messageTypeBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getMessageTypeFieldBuilder() : null;
+            } else {
+              messageTypeBuilder_.addAllMessages(other.messageType_);
+            }
+          }
+        }
+        if (enumTypeBuilder_ == null) {
+          if (!other.enumType_.isEmpty()) {
+            if (enumType_.isEmpty()) {
+              enumType_ = other.enumType_;
+              bitField0_ = (bitField0_ & ~0x00000010);
+            } else {
+              ensureEnumTypeIsMutable();
+              enumType_.addAll(other.enumType_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.enumType_.isEmpty()) {
+            if (enumTypeBuilder_.isEmpty()) {
+              enumTypeBuilder_.dispose();
+              enumTypeBuilder_ = null;
+              enumType_ = other.enumType_;
+              bitField0_ = (bitField0_ & ~0x00000010);
+              enumTypeBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getEnumTypeFieldBuilder() : null;
+            } else {
+              enumTypeBuilder_.addAllMessages(other.enumType_);
+            }
+          }
+        }
+        if (serviceBuilder_ == null) {
+          if (!other.service_.isEmpty()) {
+            if (service_.isEmpty()) {
+              service_ = other.service_;
+              bitField0_ = (bitField0_ & ~0x00000020);
+            } else {
+              ensureServiceIsMutable();
+              service_.addAll(other.service_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.service_.isEmpty()) {
+            if (serviceBuilder_.isEmpty()) {
+              serviceBuilder_.dispose();
+              serviceBuilder_ = null;
+              service_ = other.service_;
+              bitField0_ = (bitField0_ & ~0x00000020);
+              serviceBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getServiceFieldBuilder() : null;
+            } else {
+              serviceBuilder_.addAllMessages(other.service_);
+            }
+          }
+        }
+        if (extensionBuilder_ == null) {
+          if (!other.extension_.isEmpty()) {
+            if (extension_.isEmpty()) {
+              extension_ = other.extension_;
+              bitField0_ = (bitField0_ & ~0x00000040);
+            } else {
+              ensureExtensionIsMutable();
+              extension_.addAll(other.extension_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.extension_.isEmpty()) {
+            if (extensionBuilder_.isEmpty()) {
+              extensionBuilder_.dispose();
+              extensionBuilder_ = null;
+              extension_ = other.extension_;
+              bitField0_ = (bitField0_ & ~0x00000040);
+              extensionBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getExtensionFieldBuilder() : null;
+            } else {
+              extensionBuilder_.addAllMessages(other.extension_);
+            }
+          }
+        }
+        if (other.hasOptions()) {
+          mergeOptions(other.getOptions());
+        }
+        if (other.hasSourceCodeInfo()) {
+          mergeSourceCodeInfo(other.getSourceCodeInfo());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        for (int i = 0; i < getMessageTypeCount(); i++) {
+          if (!getMessageType(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        for (int i = 0; i < getEnumTypeCount(); i++) {
+          if (!getEnumType(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        for (int i = 0; i < getServiceCount(); i++) {
+          if (!getService(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        for (int i = 0; i < getExtensionCount(); i++) {
+          if (!getExtension(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (hasOptions()) {
+          if (!getOptions().isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              name_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              bitField0_ |= 0x00000002;
+              package_ = input.readBytes();
+              break;
+            }
+            case 26: {
+              ensureDependencyIsMutable();
+              dependency_.add(input.readBytes());
+              break;
+            }
+            case 34: {
+              com.google.protobuf.DescriptorProtos.DescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.DescriptorProto.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addMessageType(subBuilder.buildPartial());
+              break;
+            }
+            case 42: {
+              com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.EnumDescriptorProto.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addEnumType(subBuilder.buildPartial());
+              break;
+            }
+            case 50: {
+              com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addService(subBuilder.buildPartial());
+              break;
+            }
+            case 58: {
+              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addExtension(subBuilder.buildPartial());
+              break;
+            }
+            case 66: {
+              com.google.protobuf.DescriptorProtos.FileOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.FileOptions.newBuilder();
+              if (hasOptions()) {
+                subBuilder.mergeFrom(getOptions());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setOptions(subBuilder.buildPartial());
+              break;
+            }
+            case 74: {
+              com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder subBuilder = com.google.protobuf.DescriptorProtos.SourceCodeInfo.newBuilder();
+              if (hasSourceCodeInfo()) {
+                subBuilder.mergeFrom(getSourceCodeInfo());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setSourceCodeInfo(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional string name = 1;
+      private java.lang.Object name_ = "";
+      public boolean hasName() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearName() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      void setName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+      }
+      
+      // optional string package = 2;
+      private java.lang.Object package_ = "";
+      public boolean hasPackage() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public String getPackage() {
+        java.lang.Object ref = package_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          package_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setPackage(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
+        package_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearPackage() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        package_ = getDefaultInstance().getPackage();
+        onChanged();
+        return this;
+      }
+      void setPackage(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000002;
+        package_ = value;
+        onChanged();
+      }
+      
+      // repeated string dependency = 3;
+      private com.google.protobuf.LazyStringList dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureDependencyIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          dependency_ = new com.google.protobuf.LazyStringArrayList(dependency_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      public java.util.List<String>
+          getDependencyList() {
+        return java.util.Collections.unmodifiableList(dependency_);
+      }
+      public int getDependencyCount() {
+        return dependency_.size();
+      }
+      public String getDependency(int index) {
+        return dependency_.get(index);
+      }
+      public Builder setDependency(
+          int index, String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureDependencyIsMutable();
+        dependency_.set(index, value);
+        onChanged();
+        return this;
+      }
+      public Builder addDependency(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureDependencyIsMutable();
+        dependency_.add(value);
+        onChanged();
+        return this;
+      }
+      public Builder addAllDependency(
+          java.lang.Iterable<String> values) {
+        ensureDependencyIsMutable();
+        super.addAll(values, dependency_);
+        onChanged();
+        return this;
+      }
+      public Builder clearDependency() {
+        dependency_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        onChanged();
+        return this;
+      }
+      void addDependency(com.google.protobuf.ByteString value) {
+        ensureDependencyIsMutable();
+        dependency_.add(value);
+        onChanged();
+      }
+      
+      // repeated .google.protobuf.DescriptorProto message_type = 4;
+      private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> messageType_ =
+        java.util.Collections.emptyList();
+      private void ensureMessageTypeIsMutable() {
+        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
+          messageType_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.DescriptorProto>(messageType_);
+          bitField0_ |= 0x00000008;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.DescriptorProto, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder, com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> messageTypeBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> getMessageTypeList() {
+        if (messageTypeBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(messageType_);
+        } else {
+          return messageTypeBuilder_.getMessageList();
+        }
+      }
+      public int getMessageTypeCount() {
+        if (messageTypeBuilder_ == null) {
+          return messageType_.size();
+        } else {
+          return messageTypeBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProto getMessageType(int index) {
+        if (messageTypeBuilder_ == null) {
+          return messageType_.get(index);
+        } else {
+          return messageTypeBuilder_.getMessage(index);
+        }
+      }
+      public Builder setMessageType(
+          int index, com.google.protobuf.DescriptorProtos.DescriptorProto value) {
+        if (messageTypeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureMessageTypeIsMutable();
+          messageType_.set(index, value);
+          onChanged();
+        } else {
+          messageTypeBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setMessageType(
+          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
+        if (messageTypeBuilder_ == null) {
+          ensureMessageTypeIsMutable();
+          messageType_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          messageTypeBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addMessageType(com.google.protobuf.DescriptorProtos.DescriptorProto value) {
+        if (messageTypeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureMessageTypeIsMutable();
+          messageType_.add(value);
+          onChanged();
+        } else {
+          messageTypeBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addMessageType(
+          int index, com.google.protobuf.DescriptorProtos.DescriptorProto value) {
+        if (messageTypeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureMessageTypeIsMutable();
+          messageType_.add(index, value);
+          onChanged();
+        } else {
+          messageTypeBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addMessageType(
+          com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
+        if (messageTypeBuilder_ == null) {
+          ensureMessageTypeIsMutable();
+          messageType_.add(builderForValue.build());
+          onChanged();
+        } else {
+          messageTypeBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addMessageType(
+          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
+        if (messageTypeBuilder_ == null) {
+          ensureMessageTypeIsMutable();
+          messageType_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          messageTypeBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllMessageType(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.DescriptorProto> values) {
+        if (messageTypeBuilder_ == null) {
+          ensureMessageTypeIsMutable();
+          super.addAll(values, messageType_);
+          onChanged();
+        } else {
+          messageTypeBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearMessageType() {
+        if (messageTypeBuilder_ == null) {
+          messageType_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+          onChanged();
+        } else {
+          messageTypeBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeMessageType(int index) {
+        if (messageTypeBuilder_ == null) {
+          ensureMessageTypeIsMutable();
+          messageType_.remove(index);
+          onChanged();
+        } else {
+          messageTypeBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder getMessageTypeBuilder(
+          int index) {
+        return getMessageTypeFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getMessageTypeOrBuilder(
+          int index) {
+        if (messageTypeBuilder_ == null) {
+          return messageType_.get(index);  } else {
+          return messageTypeBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
+           getMessageTypeOrBuilderList() {
+        if (messageTypeBuilder_ != null) {
+          return messageTypeBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(messageType_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder addMessageTypeBuilder() {
+        return getMessageTypeFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder addMessageTypeBuilder(
+          int index) {
+        return getMessageTypeFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.Builder> 
+           getMessageTypeBuilderList() {
+        return getMessageTypeFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.DescriptorProto, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder, com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
+          getMessageTypeFieldBuilder() {
+        if (messageTypeBuilder_ == null) {
+          messageTypeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.DescriptorProto, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder, com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder>(
+                  messageType_,
+                  ((bitField0_ & 0x00000008) == 0x00000008),
+                  getParentForChildren(),
+                  isClean());
+          messageType_ = null;
+        }
+        return messageTypeBuilder_;
+      }
+      
+      // repeated .google.protobuf.EnumDescriptorProto enum_type = 5;
+      private java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> enumType_ =
+        java.util.Collections.emptyList();
+      private void ensureEnumTypeIsMutable() {
+        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
+          enumType_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.EnumDescriptorProto>(enumType_);
+          bitField0_ |= 0x00000010;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.EnumDescriptorProto, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> enumTypeBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> getEnumTypeList() {
+        if (enumTypeBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(enumType_);
+        } else {
+          return enumTypeBuilder_.getMessageList();
+        }
+      }
+      public int getEnumTypeCount() {
+        if (enumTypeBuilder_ == null) {
+          return enumType_.size();
+        } else {
+          return enumTypeBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) {
+        if (enumTypeBuilder_ == null) {
+          return enumType_.get(index);
+        } else {
+          return enumTypeBuilder_.getMessage(index);
+        }
+      }
+      public Builder setEnumType(
+          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
+        if (enumTypeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEnumTypeIsMutable();
+          enumType_.set(index, value);
+          onChanged();
+        } else {
+          enumTypeBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setEnumType(
+          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
+        if (enumTypeBuilder_ == null) {
+          ensureEnumTypeIsMutable();
+          enumType_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          enumTypeBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addEnumType(com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
+        if (enumTypeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEnumTypeIsMutable();
+          enumType_.add(value);
+          onChanged();
+        } else {
+          enumTypeBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addEnumType(
+          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
+        if (enumTypeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEnumTypeIsMutable();
+          enumType_.add(index, value);
+          onChanged();
+        } else {
+          enumTypeBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addEnumType(
+          com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
+        if (enumTypeBuilder_ == null) {
+          ensureEnumTypeIsMutable();
+          enumType_.add(builderForValue.build());
+          onChanged();
+        } else {
+          enumTypeBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addEnumType(
+          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
+        if (enumTypeBuilder_ == null) {
+          ensureEnumTypeIsMutable();
+          enumType_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          enumTypeBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllEnumType(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProto> values) {
+        if (enumTypeBuilder_ == null) {
+          ensureEnumTypeIsMutable();
+          super.addAll(values, enumType_);
+          onChanged();
+        } else {
+          enumTypeBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearEnumType() {
+        if (enumTypeBuilder_ == null) {
+          enumType_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000010);
+          onChanged();
+        } else {
+          enumTypeBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeEnumType(int index) {
+        if (enumTypeBuilder_ == null) {
+          ensureEnumTypeIsMutable();
+          enumType_.remove(index);
+          onChanged();
+        } else {
+          enumTypeBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder getEnumTypeBuilder(
+          int index) {
+        return getEnumTypeFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
+          int index) {
+        if (enumTypeBuilder_ == null) {
+          return enumType_.get(index);  } else {
+          return enumTypeBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
+           getEnumTypeOrBuilderList() {
+        if (enumTypeBuilder_ != null) {
+          return enumTypeBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(enumType_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder() {
+        return getEnumTypeFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder(
+          int index) {
+        return getEnumTypeFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder> 
+           getEnumTypeBuilderList() {
+        return getEnumTypeFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.EnumDescriptorProto, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
+          getEnumTypeFieldBuilder() {
+        if (enumTypeBuilder_ == null) {
+          enumTypeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.EnumDescriptorProto, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder>(
+                  enumType_,
+                  ((bitField0_ & 0x00000010) == 0x00000010),
+                  getParentForChildren(),
+                  isClean());
+          enumType_ = null;
+        }
+        return enumTypeBuilder_;
+      }
+      
+      // repeated .google.protobuf.ServiceDescriptorProto service = 6;
+      private java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> service_ =
+        java.util.Collections.emptyList();
+      private void ensureServiceIsMutable() {
+        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
+          service_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto>(service_);
+          bitField0_ |= 0x00000020;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.ServiceDescriptorProto, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> serviceBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> getServiceList() {
+        if (serviceBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(service_);
+        } else {
+          return serviceBuilder_.getMessageList();
+        }
+      }
+      public int getServiceCount() {
+        if (serviceBuilder_ == null) {
+          return service_.size();
+        } else {
+          return serviceBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getService(int index) {
+        if (serviceBuilder_ == null) {
+          return service_.get(index);
+        } else {
+          return serviceBuilder_.getMessage(index);
+        }
+      }
+      public Builder setService(
+          int index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto value) {
+        if (serviceBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIsMutable();
+          service_.set(index, value);
+          onChanged();
+        } else {
+          serviceBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setService(
+          int index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {
+        if (serviceBuilder_ == null) {
+          ensureServiceIsMutable();
+          service_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addService(com.google.protobuf.DescriptorProtos.ServiceDescriptorProto value) {
+        if (serviceBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIsMutable();
+          service_.add(value);
+          onChanged();
+        } else {
+          serviceBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addService(
+          int index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto value) {
+        if (serviceBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIsMutable();
+          service_.add(index, value);
+          onChanged();
+        } else {
+          serviceBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addService(
+          com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {
+        if (serviceBuilder_ == null) {
+          ensureServiceIsMutable();
+          service_.add(builderForValue.build());
+          onChanged();
+        } else {
+          serviceBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addService(
+          int index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {
+        if (serviceBuilder_ == null) {
+          ensureServiceIsMutable();
+          service_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllService(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.ServiceDescriptorProto> values) {
+        if (serviceBuilder_ == null) {
+          ensureServiceIsMutable();
+          super.addAll(values, service_);
+          onChanged();
+        } else {
+          serviceBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearService() {
+        if (serviceBuilder_ == null) {
+          service_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000020);
+          onChanged();
+        } else {
+          serviceBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeService(int index) {
+        if (serviceBuilder_ == null) {
+          ensureServiceIsMutable();
+          service_.remove(index);
+          onChanged();
+        } else {
+          serviceBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder getServiceBuilder(
+          int index) {
+        return getServiceFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder getServiceOrBuilder(
+          int index) {
+        if (serviceBuilder_ == null) {
+          return service_.get(index);  } else {
+          return serviceBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> 
+           getServiceOrBuilderList() {
+        if (serviceBuilder_ != null) {
+          return serviceBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(service_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder addServiceBuilder() {
+        return getServiceFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder addServiceBuilder(
+          int index) {
+        return getServiceFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder> 
+           getServiceBuilderList() {
+        return getServiceFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.ServiceDescriptorProto, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder> 
+          getServiceFieldBuilder() {
+        if (serviceBuilder_ == null) {
+          serviceBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.ServiceDescriptorProto, com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder>(
+                  service_,
+                  ((bitField0_ & 0x00000020) == 0x00000020),
+                  getParentForChildren(),
+                  isClean());
+          service_ = null;
+        }
+        return serviceBuilder_;
+      }
+      
+      // repeated .google.protobuf.FieldDescriptorProto extension = 7;
+      private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> extension_ =
+        java.util.Collections.emptyList();
+      private void ensureExtensionIsMutable() {
+        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
+          extension_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.FieldDescriptorProto>(extension_);
+          bitField0_ |= 0x00000040;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> extensionBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getExtensionList() {
+        if (extensionBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(extension_);
+        } else {
+          return extensionBuilder_.getMessageList();
+        }
+      }
+      public int getExtensionCount() {
+        if (extensionBuilder_ == null) {
+          return extension_.size();
+        } else {
+          return extensionBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) {
+        if (extensionBuilder_ == null) {
+          return extension_.get(index);
+        } else {
+          return extensionBuilder_.getMessage(index);
+        }
+      }
+      public Builder setExtension(
+          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
+        if (extensionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureExtensionIsMutable();
+          extension_.set(index, value);
+          onChanged();
+        } else {
+          extensionBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setExtension(
+          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        if (extensionBuilder_ == null) {
+          ensureExtensionIsMutable();
+          extension_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          extensionBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addExtension(com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
+        if (extensionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureExtensionIsMutable();
+          extension_.add(value);
+          onChanged();
+        } else {
+          extensionBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addExtension(
+          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
+        if (extensionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureExtensionIsMutable();
+          extension_.add(index, value);
+          onChanged();
+        } else {
+          extensionBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addExtension(
+          com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        if (extensionBuilder_ == null) {
+          ensureExtensionIsMutable();
+          extension_.add(builderForValue.build());
+          onChanged();
+        } else {
+          extensionBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addExtension(
+          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        if (extensionBuilder_ == null) {
+          ensureExtensionIsMutable();
+          extension_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          extensionBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllExtension(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProto> values) {
+        if (extensionBuilder_ == null) {
+          ensureExtensionIsMutable();
+          super.addAll(values, extension_);
+          onChanged();
+        } else {
+          extensionBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearExtension() {
+        if (extensionBuilder_ == null) {
+          extension_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000040);
+          onChanged();
+        } else {
+          extensionBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeExtension(int index) {
+        if (extensionBuilder_ == null) {
+          ensureExtensionIsMutable();
+          extension_.remove(index);
+          onChanged();
+        } else {
+          extensionBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder getExtensionBuilder(
+          int index) {
+        return getExtensionFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
+          int index) {
+        if (extensionBuilder_ == null) {
+          return extension_.get(index);  } else {
+          return extensionBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
+           getExtensionOrBuilderList() {
+        if (extensionBuilder_ != null) {
+          return extensionBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(extension_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder() {
+        return getExtensionFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder(
+          int index) {
+        return getExtensionFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder> 
+           getExtensionBuilderList() {
+        return getExtensionFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
+          getExtensionFieldBuilder() {
+        if (extensionBuilder_ == null) {
+          extensionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder>(
+                  extension_,
+                  ((bitField0_ & 0x00000040) == 0x00000040),
+                  getParentForChildren(),
+                  isClean());
+          extension_ = null;
+        }
+        return extensionBuilder_;
+      }
+      
+      // optional .google.protobuf.FileOptions options = 8;
+      private com.google.protobuf.DescriptorProtos.FileOptions options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.FileOptions, com.google.protobuf.DescriptorProtos.FileOptions.Builder, com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder> optionsBuilder_;
+      public boolean hasOptions() {
+        return ((bitField0_ & 0x00000080) == 0x00000080);
+      }
+      public com.google.protobuf.DescriptorProtos.FileOptions getOptions() {
+        if (optionsBuilder_ == null) {
+          return options_;
+        } else {
+          return optionsBuilder_.getMessage();
+        }
+      }
+      public Builder setOptions(com.google.protobuf.DescriptorProtos.FileOptions value) {
+        if (optionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          options_ = value;
+          onChanged();
+        } else {
+          optionsBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder setOptions(
+          com.google.protobuf.DescriptorProtos.FileOptions.Builder builderForValue) {
+        if (optionsBuilder_ == null) {
+          options_ = builderForValue.build();
+          onChanged();
+        } else {
+          optionsBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder mergeOptions(com.google.protobuf.DescriptorProtos.FileOptions value) {
+        if (optionsBuilder_ == null) {
+          if (((bitField0_ & 0x00000080) == 0x00000080) &&
+              options_ != com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance()) {
+            options_ =
+              com.google.protobuf.DescriptorProtos.FileOptions.newBuilder(options_).mergeFrom(value).buildPartial();
+          } else {
+            options_ = value;
+          }
+          onChanged();
+        } else {
+          optionsBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder clearOptions() {
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
+          onChanged();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000080);
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.FileOptions.Builder getOptionsBuilder() {
+        bitField0_ |= 0x00000080;
+        onChanged();
+        return getOptionsFieldBuilder().getBuilder();
+      }
+      public com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder getOptionsOrBuilder() {
+        if (optionsBuilder_ != null) {
+          return optionsBuilder_.getMessageOrBuilder();
+        } else {
+          return options_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.FileOptions, com.google.protobuf.DescriptorProtos.FileOptions.Builder, com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder> 
+          getOptionsFieldBuilder() {
+        if (optionsBuilder_ == null) {
+          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.google.protobuf.DescriptorProtos.FileOptions, com.google.protobuf.DescriptorProtos.FileOptions.Builder, com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder>(
+                  options_,
+                  getParentForChildren(),
+                  isClean());
+          options_ = null;
+        }
+        return optionsBuilder_;
+      }
+      
+      // optional .google.protobuf.SourceCodeInfo source_code_info = 9;
+      private com.google.protobuf.DescriptorProtos.SourceCodeInfo sourceCodeInfo_ = com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.SourceCodeInfo, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder> sourceCodeInfoBuilder_;
+      public boolean hasSourceCodeInfo() {
+        return ((bitField0_ & 0x00000100) == 0x00000100);
+      }
+      public com.google.protobuf.DescriptorProtos.SourceCodeInfo getSourceCodeInfo() {
+        if (sourceCodeInfoBuilder_ == null) {
+          return sourceCodeInfo_;
+        } else {
+          return sourceCodeInfoBuilder_.getMessage();
+        }
+      }
+      public Builder setSourceCodeInfo(com.google.protobuf.DescriptorProtos.SourceCodeInfo value) {
+        if (sourceCodeInfoBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sourceCodeInfo_ = value;
+          onChanged();
+        } else {
+          sourceCodeInfoBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000100;
+        return this;
+      }
+      public Builder setSourceCodeInfo(
+          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder builderForValue) {
+        if (sourceCodeInfoBuilder_ == null) {
+          sourceCodeInfo_ = builderForValue.build();
+          onChanged();
+        } else {
+          sourceCodeInfoBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000100;
+        return this;
+      }
+      public Builder mergeSourceCodeInfo(com.google.protobuf.DescriptorProtos.SourceCodeInfo value) {
+        if (sourceCodeInfoBuilder_ == null) {
+          if (((bitField0_ & 0x00000100) == 0x00000100) &&
+              sourceCodeInfo_ != com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance()) {
+            sourceCodeInfo_ =
+              com.google.protobuf.DescriptorProtos.SourceCodeInfo.newBuilder(sourceCodeInfo_).mergeFrom(value).buildPartial();
+          } else {
+            sourceCodeInfo_ = value;
+          }
+          onChanged();
+        } else {
+          sourceCodeInfoBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000100;
+        return this;
+      }
+      public Builder clearSourceCodeInfo() {
+        if (sourceCodeInfoBuilder_ == null) {
+          sourceCodeInfo_ = com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
+          onChanged();
+        } else {
+          sourceCodeInfoBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000100);
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder getSourceCodeInfoBuilder() {
+        bitField0_ |= 0x00000100;
+        onChanged();
+        return getSourceCodeInfoFieldBuilder().getBuilder();
+      }
+      public com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder getSourceCodeInfoOrBuilder() {
+        if (sourceCodeInfoBuilder_ != null) {
+          return sourceCodeInfoBuilder_.getMessageOrBuilder();
+        } else {
+          return sourceCodeInfo_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.SourceCodeInfo, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder> 
+          getSourceCodeInfoFieldBuilder() {
+        if (sourceCodeInfoBuilder_ == null) {
+          sourceCodeInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.google.protobuf.DescriptorProtos.SourceCodeInfo, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder>(
+                  sourceCodeInfo_,
+                  getParentForChildren(),
+                  isClean());
+          sourceCodeInfo_ = null;
+        }
+        return sourceCodeInfoBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.FileDescriptorProto)
+    }
+    
+    static {
+      defaultInstance = new FileDescriptorProto(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorProto)
+  }
+  
+  public interface DescriptorProtoOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional string name = 1;
+    boolean hasName();
+    String getName();
+    
+    // repeated .google.protobuf.FieldDescriptorProto field = 2;
+    java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> 
+        getFieldList();
+    com.google.protobuf.DescriptorProtos.FieldDescriptorProto getField(int index);
+    int getFieldCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
+        getFieldOrBuilderList();
+    com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getFieldOrBuilder(
+        int index);
+    
+    // repeated .google.protobuf.FieldDescriptorProto extension = 6;
+    java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> 
+        getExtensionList();
+    com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index);
+    int getExtensionCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
+        getExtensionOrBuilderList();
+    com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
+        int index);
+    
+    // repeated .google.protobuf.DescriptorProto nested_type = 3;
+    java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> 
+        getNestedTypeList();
+    com.google.protobuf.DescriptorProtos.DescriptorProto getNestedType(int index);
+    int getNestedTypeCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
+        getNestedTypeOrBuilderList();
+    com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getNestedTypeOrBuilder(
+        int index);
+    
+    // repeated .google.protobuf.EnumDescriptorProto enum_type = 4;
+    java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> 
+        getEnumTypeList();
+    com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index);
+    int getEnumTypeCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
+        getEnumTypeOrBuilderList();
+    com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
+        int index);
+    
+    // repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;
+    java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> 
+        getExtensionRangeList();
+    com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getExtensionRange(int index);
+    int getExtensionRangeCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> 
+        getExtensionRangeOrBuilderList();
+    com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder getExtensionRangeOrBuilder(
+        int index);
+    
+    // optional .google.protobuf.MessageOptions options = 7;
+    boolean hasOptions();
+    com.google.protobuf.DescriptorProtos.MessageOptions getOptions();
+    com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder getOptionsOrBuilder();
+  }
+  public static final class DescriptorProto extends
+      com.google.protobuf.GeneratedMessage
+      implements DescriptorProtoOrBuilder {
+    // Use DescriptorProto.newBuilder() to construct.
+    private DescriptorProto(Builder builder) {
+      super(builder);
+    }
+    private DescriptorProto(boolean noInit) {}
+    
+    private static final DescriptorProto defaultInstance;
+    public static DescriptorProto getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public DescriptorProto getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_fieldAccessorTable;
+    }
+    
+    public interface ExtensionRangeOrBuilder
+        extends com.google.protobuf.MessageOrBuilder {
+      
+      // optional int32 start = 1;
+      boolean hasStart();
+      int getStart();
+      
+      // optional int32 end = 2;
+      boolean hasEnd();
+      int getEnd();
+    }
+    public static final class ExtensionRange extends
+        com.google.protobuf.GeneratedMessage
+        implements ExtensionRangeOrBuilder {
+      // Use ExtensionRange.newBuilder() to construct.
+      private ExtensionRange(Builder builder) {
+        super(builder);
+      }
+      private ExtensionRange(boolean noInit) {}
+      
+      private static final ExtensionRange defaultInstance;
+      public static ExtensionRange getDefaultInstance() {
+        return defaultInstance;
+      }
+      
+      public ExtensionRange getDefaultInstanceForType() {
+        return defaultInstance;
+      }
+      
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable;
+      }
+      
+      private int bitField0_;
+      // optional int32 start = 1;
+      public static final int START_FIELD_NUMBER = 1;
+      private int start_;
+      public boolean hasStart() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public int getStart() {
+        return start_;
+      }
+      
+      // optional int32 end = 2;
+      public static final int END_FIELD_NUMBER = 2;
+      private int end_;
+      public boolean hasEnd() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public int getEnd() {
+        return end_;
+      }
+      
+      private void initFields() {
+        start_ = 0;
+        end_ = 0;
+      }
+      private byte memoizedIsInitialized = -1;
+      public final boolean isInitialized() {
+        byte isInitialized = memoizedIsInitialized;
+        if (isInitialized != -1) return isInitialized == 1;
+        
+        memoizedIsInitialized = 1;
+        return true;
+      }
+      
+      public void writeTo(com.google.protobuf.CodedOutputStream output)
+                          throws java.io.IOException {
+        getSerializedSize();
+        if (((bitField0_ & 0x00000001) == 0x00000001)) {
+          output.writeInt32(1, start_);
+        }
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          output.writeInt32(2, end_);
+        }
+        getUnknownFields().writeTo(output);
+      }
+      
+      private int memoizedSerializedSize = -1;
+      public int getSerializedSize() {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+      
+        size = 0;
+        if (((bitField0_ & 0x00000001) == 0x00000001)) {
+          size += com.google.protobuf.CodedOutputStream
+            .computeInt32Size(1, start_);
+        }
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          size += com.google.protobuf.CodedOutputStream
+            .computeInt32Size(2, end_);
+        }
+        size += getUnknownFields().getSerializedSize();
+        memoizedSerializedSize = size;
+        return size;
+      }
+      
+      private static final long serialVersionUID = 0L;
+      @java.lang.Override
+      protected java.lang.Object writeReplace()
+          throws java.io.ObjectStreamException {
+        return super.writeReplace();
+      }
+      
+      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
+          com.google.protobuf.ByteString data)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data).buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
+          com.google.protobuf.ByteString data,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data, extensionRegistry)
+                 .buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(byte[] data)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data).buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
+          byte[] data,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data, extensionRegistry)
+                 .buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(java.io.InputStream input)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input).buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
+          java.io.InputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input, extensionRegistry)
+                 .buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseDelimitedFrom(java.io.InputStream input)
+          throws java.io.IOException {
+        Builder builder = newBuilder();
+        if (builder.mergeDelimitedFrom(input)) {
+          return builder.buildParsed();
+        } else {
+          return null;
+        }
+      }
+      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseDelimitedFrom(
+          java.io.InputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        Builder builder = newBuilder();
+        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+          return builder.buildParsed();
+        } else {
+          return null;
+        }
+      }
+      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
+          com.google.protobuf.CodedInputStream input)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input).buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange parseFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input, extensionRegistry)
+                 .buildParsed();
+      }
+      
+      public static Builder newBuilder() { return Builder.create(); }
+      public Builder newBuilderForType() { return newBuilder(); }
+      public static Builder newBuilder(com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange prototype) {
+        return newBuilder().mergeFrom(prototype);
+      }
+      public Builder toBuilder() { return newBuilder(this); }
+      
+      @java.lang.Override
+      protected Builder newBuilderForType(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        Builder builder = new Builder(parent);
+        return builder;
+      }
+      public static final class Builder extends
+          com.google.protobuf.GeneratedMessage.Builder<Builder>
+         implements com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder {
+        public static final com.google.protobuf.Descriptors.Descriptor
+            getDescriptor() {
+          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
+        }
+        
+        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+            internalGetFieldAccessorTable() {
+          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable;
+        }
+        
+        // Construct using com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.newBuilder()
+        private Builder() {
+          maybeForceBuilderInitialization();
+        }
+        
+        private Builder(BuilderParent parent) {
+          super(parent);
+          maybeForceBuilderInitialization();
+        }
+        private void maybeForceBuilderInitialization() {
+          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          }
+        }
+        private static Builder create() {
+          return new Builder();
+        }
+        
+        public Builder clear() {
+          super.clear();
+          start_ = 0;
+          bitField0_ = (bitField0_ & ~0x00000001);
+          end_ = 0;
+          bitField0_ = (bitField0_ & ~0x00000002);
+          return this;
+        }
+        
+        public Builder clone() {
+          return create().mergeFrom(buildPartial());
+        }
+        
+        public com.google.protobuf.Descriptors.Descriptor
+            getDescriptorForType() {
+          return com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDescriptor();
+        }
+        
+        public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getDefaultInstanceForType() {
+          return com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance();
+        }
+        
+        public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange build() {
+          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange result = buildPartial();
+          if (!result.isInitialized()) {
+            throw newUninitializedMessageException(result);
+          }
+          return result;
+        }
+        
+        private com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange buildParsed()
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange result = buildPartial();
+          if (!result.isInitialized()) {
+            throw newUninitializedMessageException(
+              result).asInvalidProtocolBufferException();
+          }
+          return result;
+        }
+        
+        public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange buildPartial() {
+          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange result = new com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange(this);
+          int from_bitField0_ = bitField0_;
+          int to_bitField0_ = 0;
+          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+            to_bitField0_ |= 0x00000001;
+          }
+          result.start_ = start_;
+          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+            to_bitField0_ |= 0x00000002;
+          }
+          result.end_ = end_;
+          result.bitField0_ = to_bitField0_;
+          onBuilt();
+          return result;
+        }
+        
+        public Builder mergeFrom(com.google.protobuf.Message other) {
+          if (other instanceof com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange) {
+            return mergeFrom((com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange)other);
+          } else {
+            super.mergeFrom(other);
+            return this;
+          }
+        }
+        
+        public Builder mergeFrom(com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange other) {
+          if (other == com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance()) return this;
+          if (other.hasStart()) {
+            setStart(other.getStart());
+          }
+          if (other.hasEnd()) {
+            setEnd(other.getEnd());
+          }
+          this.mergeUnknownFields(other.getUnknownFields());
+          return this;
+        }
+        
+        public final boolean isInitialized() {
+          return true;
+        }
+        
+        public Builder mergeFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws java.io.IOException {
+          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+            com.google.protobuf.UnknownFieldSet.newBuilder(
+              this.getUnknownFields());
+          while (true) {
+            int tag = input.readTag();
+            switch (tag) {
+              case 0:
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              default: {
+                if (!parseUnknownField(input, unknownFields,
+                                       extensionRegistry, tag)) {
+                  this.setUnknownFields(unknownFields.build());
+                  onChanged();
+                  return this;
+                }
+                break;
+              }
+              case 8: {
+                bitField0_ |= 0x00000001;
+                start_ = input.readInt32();
+                break;
+              }
+              case 16: {
+                bitField0_ |= 0x00000002;
+                end_ = input.readInt32();
+                break;
+              }
+            }
+          }
+        }
+        
+        private int bitField0_;
+        
+        // optional int32 start = 1;
+        private int start_ ;
+        public boolean hasStart() {
+          return ((bitField0_ & 0x00000001) == 0x00000001);
+        }
+        public int getStart() {
+          return start_;
+        }
+        public Builder setStart(int value) {
+          bitField0_ |= 0x00000001;
+          start_ = value;
+          onChanged();
+          return this;
+        }
+        public Builder clearStart() {
+          bitField0_ = (bitField0_ & ~0x00000001);
+          start_ = 0;
+          onChanged();
+          return this;
+        }
+        
+        // optional int32 end = 2;
+        private int end_ ;
+        public boolean hasEnd() {
+          return ((bitField0_ & 0x00000002) == 0x00000002);
+        }
+        public int getEnd() {
+          return end_;
+        }
+        public Builder setEnd(int value) {
+          bitField0_ |= 0x00000002;
+          end_ = value;
+          onChanged();
+          return this;
+        }
+        public Builder clearEnd() {
+          bitField0_ = (bitField0_ & ~0x00000002);
+          end_ = 0;
+          onChanged();
+          return this;
+        }
+        
+        // @@protoc_insertion_point(builder_scope:google.protobuf.DescriptorProto.ExtensionRange)
+      }
+      
+      static {
+        defaultInstance = new ExtensionRange(true);
+        defaultInstance.initFields();
+      }
+      
+      // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto.ExtensionRange)
+    }
+    
+    private int bitField0_;
+    // optional string name = 1;
+    public static final int NAME_FIELD_NUMBER = 1;
+    private java.lang.Object name_;
+    public boolean hasName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          name_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // repeated .google.protobuf.FieldDescriptorProto field = 2;
+    public static final int FIELD_FIELD_NUMBER = 2;
+    private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> field_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getFieldList() {
+      return field_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
+        getFieldOrBuilderList() {
+      return field_;
+    }
+    public int getFieldCount() {
+      return field_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getField(int index) {
+      return field_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getFieldOrBuilder(
+        int index) {
+      return field_.get(index);
+    }
+    
+    // repeated .google.protobuf.FieldDescriptorProto extension = 6;
+    public static final int EXTENSION_FIELD_NUMBER = 6;
+    private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> extension_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getExtensionList() {
+      return extension_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
+        getExtensionOrBuilderList() {
+      return extension_;
+    }
+    public int getExtensionCount() {
+      return extension_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) {
+      return extension_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
+        int index) {
+      return extension_.get(index);
+    }
+    
+    // repeated .google.protobuf.DescriptorProto nested_type = 3;
+    public static final int NESTED_TYPE_FIELD_NUMBER = 3;
+    private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> nestedType_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> getNestedTypeList() {
+      return nestedType_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
+        getNestedTypeOrBuilderList() {
+      return nestedType_;
+    }
+    public int getNestedTypeCount() {
+      return nestedType_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.DescriptorProto getNestedType(int index) {
+      return nestedType_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getNestedTypeOrBuilder(
+        int index) {
+      return nestedType_.get(index);
+    }
+    
+    // repeated .google.protobuf.EnumDescriptorProto enum_type = 4;
+    public static final int ENUM_TYPE_FIELD_NUMBER = 4;
+    private java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> enumType_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> getEnumTypeList() {
+      return enumType_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
+        getEnumTypeOrBuilderList() {
+      return enumType_;
+    }
+    public int getEnumTypeCount() {
+      return enumType_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) {
+      return enumType_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
+        int index) {
+      return enumType_.get(index);
+    }
+    
+    // repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;
+    public static final int EXTENSION_RANGE_FIELD_NUMBER = 5;
+    private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> extensionRange_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> getExtensionRangeList() {
+      return extensionRange_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> 
+        getExtensionRangeOrBuilderList() {
+      return extensionRange_;
+    }
+    public int getExtensionRangeCount() {
+      return extensionRange_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getExtensionRange(int index) {
+      return extensionRange_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder getExtensionRangeOrBuilder(
+        int index) {
+      return extensionRange_.get(index);
+    }
+    
+    // optional .google.protobuf.MessageOptions options = 7;
+    public static final int OPTIONS_FIELD_NUMBER = 7;
+    private com.google.protobuf.DescriptorProtos.MessageOptions options_;
+    public boolean hasOptions() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public com.google.protobuf.DescriptorProtos.MessageOptions getOptions() {
+      return options_;
+    }
+    public com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder getOptionsOrBuilder() {
+      return options_;
+    }
+    
+    private void initFields() {
+      name_ = "";
+      field_ = java.util.Collections.emptyList();
+      extension_ = java.util.Collections.emptyList();
+      nestedType_ = java.util.Collections.emptyList();
+      enumType_ = java.util.Collections.emptyList();
+      extensionRange_ = java.util.Collections.emptyList();
+      options_ = com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      for (int i = 0; i < getFieldCount(); i++) {
+        if (!getField(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      for (int i = 0; i < getExtensionCount(); i++) {
+        if (!getExtension(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      for (int i = 0; i < getNestedTypeCount(); i++) {
+        if (!getNestedType(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      for (int i = 0; i < getEnumTypeCount(); i++) {
+        if (!getEnumType(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (hasOptions()) {
+        if (!getOptions().isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getNameBytes());
+      }
+      for (int i = 0; i < field_.size(); i++) {
+        output.writeMessage(2, field_.get(i));
+      }
+      for (int i = 0; i < nestedType_.size(); i++) {
+        output.writeMessage(3, nestedType_.get(i));
+      }
+      for (int i = 0; i < enumType_.size(); i++) {
+        output.writeMessage(4, enumType_.get(i));
+      }
+      for (int i = 0; i < extensionRange_.size(); i++) {
+        output.writeMessage(5, extensionRange_.get(i));
+      }
+      for (int i = 0; i < extension_.size(); i++) {
+        output.writeMessage(6, extension_.get(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeMessage(7, options_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getNameBytes());
+      }
+      for (int i = 0; i < field_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, field_.get(i));
+      }
+      for (int i = 0; i < nestedType_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, nestedType_.get(i));
+      }
+      for (int i = 0; i < enumType_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, enumType_.get(i));
+      }
+      for (int i = 0; i < extensionRange_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, extensionRange_.get(i));
+      }
+      for (int i = 0; i < extension_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, extension_.get(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, options_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.DescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.DescriptorProto prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_DescriptorProto_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.DescriptorProto.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getFieldFieldBuilder();
+          getExtensionFieldBuilder();
+          getNestedTypeFieldBuilder();
+          getEnumTypeFieldBuilder();
+          getExtensionRangeFieldBuilder();
+          getOptionsFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (fieldBuilder_ == null) {
+          field_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          fieldBuilder_.clear();
+        }
+        if (extensionBuilder_ == null) {
+          extension_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          extensionBuilder_.clear();
+        }
+        if (nestedTypeBuilder_ == null) {
+          nestedType_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+        } else {
+          nestedTypeBuilder_.clear();
+        }
+        if (enumTypeBuilder_ == null) {
+          enumType_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000010);
+        } else {
+          enumTypeBuilder_.clear();
+        }
+        if (extensionRangeBuilder_ == null) {
+          extensionRange_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000020);
+        } else {
+          extensionRangeBuilder_.clear();
+        }
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000040);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.DescriptorProto.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.DescriptorProto getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.DescriptorProto build() {
+        com.google.protobuf.DescriptorProtos.DescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.DescriptorProto buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.DescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.DescriptorProto buildPartial() {
+        com.google.protobuf.DescriptorProtos.DescriptorProto result = new com.google.protobuf.DescriptorProtos.DescriptorProto(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.name_ = name_;
+        if (fieldBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) == 0x00000002)) {
+            field_ = java.util.Collections.unmodifiableList(field_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.field_ = field_;
+        } else {
+          result.field_ = fieldBuilder_.build();
+        }
+        if (extensionBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) == 0x00000004)) {
+            extension_ = java.util.Collections.unmodifiableList(extension_);
+            bitField0_ = (bitField0_ & ~0x00000004);
+          }
+          result.extension_ = extension_;
+        } else {
+          result.extension_ = extensionBuilder_.build();
+        }
+        if (nestedTypeBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) == 0x00000008)) {
+            nestedType_ = java.util.Collections.unmodifiableList(nestedType_);
+            bitField0_ = (bitField0_ & ~0x00000008);
+          }
+          result.nestedType_ = nestedType_;
+        } else {
+          result.nestedType_ = nestedTypeBuilder_.build();
+        }
+        if (enumTypeBuilder_ == null) {
+          if (((bitField0_ & 0x00000010) == 0x00000010)) {
+            enumType_ = java.util.Collections.unmodifiableList(enumType_);
+            bitField0_ = (bitField0_ & ~0x00000010);
+          }
+          result.enumType_ = enumType_;
+        } else {
+          result.enumType_ = enumTypeBuilder_.build();
+        }
+        if (extensionRangeBuilder_ == null) {
+          if (((bitField0_ & 0x00000020) == 0x00000020)) {
+            extensionRange_ = java.util.Collections.unmodifiableList(extensionRange_);
+            bitField0_ = (bitField0_ & ~0x00000020);
+          }
+          result.extensionRange_ = extensionRange_;
+        } else {
+          result.extensionRange_ = extensionRangeBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        if (optionsBuilder_ == null) {
+          result.options_ = options_;
+        } else {
+          result.options_ = optionsBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.DescriptorProto) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.DescriptorProto)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.DescriptorProto other) {
+        if (other == com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance()) return this;
+        if (other.hasName()) {
+          setName(other.getName());
+        }
+        if (fieldBuilder_ == null) {
+          if (!other.field_.isEmpty()) {
+            if (field_.isEmpty()) {
+              field_ = other.field_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureFieldIsMutable();
+              field_.addAll(other.field_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.field_.isEmpty()) {
+            if (fieldBuilder_.isEmpty()) {
+              fieldBuilder_.dispose();
+              fieldBuilder_ = null;
+              field_ = other.field_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              fieldBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getFieldFieldBuilder() : null;
+            } else {
+              fieldBuilder_.addAllMessages(other.field_);
+            }
+          }
+        }
+        if (extensionBuilder_ == null) {
+          if (!other.extension_.isEmpty()) {
+            if (extension_.isEmpty()) {
+              extension_ = other.extension_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+            } else {
+              ensureExtensionIsMutable();
+              extension_.addAll(other.extension_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.extension_.isEmpty()) {
+            if (extensionBuilder_.isEmpty()) {
+              extensionBuilder_.dispose();
+              extensionBuilder_ = null;
+              extension_ = other.extension_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+              extensionBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getExtensionFieldBuilder() : null;
+            } else {
+              extensionBuilder_.addAllMessages(other.extension_);
+            }
+          }
+        }
+        if (nestedTypeBuilder_ == null) {
+          if (!other.nestedType_.isEmpty()) {
+            if (nestedType_.isEmpty()) {
+              nestedType_ = other.nestedType_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+            } else {
+              ensureNestedTypeIsMutable();
+              nestedType_.addAll(other.nestedType_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.nestedType_.isEmpty()) {
+            if (nestedTypeBuilder_.isEmpty()) {
+              nestedTypeBuilder_.dispose();
+              nestedTypeBuilder_ = null;
+              nestedType_ = other.nestedType_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+              nestedTypeBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getNestedTypeFieldBuilder() : null;
+            } else {
+              nestedTypeBuilder_.addAllMessages(other.nestedType_);
+            }
+          }
+        }
+        if (enumTypeBuilder_ == null) {
+          if (!other.enumType_.isEmpty()) {
+            if (enumType_.isEmpty()) {
+              enumType_ = other.enumType_;
+              bitField0_ = (bitField0_ & ~0x00000010);
+            } else {
+              ensureEnumTypeIsMutable();
+              enumType_.addAll(other.enumType_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.enumType_.isEmpty()) {
+            if (enumTypeBuilder_.isEmpty()) {
+              enumTypeBuilder_.dispose();
+              enumTypeBuilder_ = null;
+              enumType_ = other.enumType_;
+              bitField0_ = (bitField0_ & ~0x00000010);
+              enumTypeBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getEnumTypeFieldBuilder() : null;
+            } else {
+              enumTypeBuilder_.addAllMessages(other.enumType_);
+            }
+          }
+        }
+        if (extensionRangeBuilder_ == null) {
+          if (!other.extensionRange_.isEmpty()) {
+            if (extensionRange_.isEmpty()) {
+              extensionRange_ = other.extensionRange_;
+              bitField0_ = (bitField0_ & ~0x00000020);
+            } else {
+              ensureExtensionRangeIsMutable();
+              extensionRange_.addAll(other.extensionRange_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.extensionRange_.isEmpty()) {
+            if (extensionRangeBuilder_.isEmpty()) {
+              extensionRangeBuilder_.dispose();
+              extensionRangeBuilder_ = null;
+              extensionRange_ = other.extensionRange_;
+              bitField0_ = (bitField0_ & ~0x00000020);
+              extensionRangeBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getExtensionRangeFieldBuilder() : null;
+            } else {
+              extensionRangeBuilder_.addAllMessages(other.extensionRange_);
+            }
+          }
+        }
+        if (other.hasOptions()) {
+          mergeOptions(other.getOptions());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        for (int i = 0; i < getFieldCount(); i++) {
+          if (!getField(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        for (int i = 0; i < getExtensionCount(); i++) {
+          if (!getExtension(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        for (int i = 0; i < getNestedTypeCount(); i++) {
+          if (!getNestedType(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        for (int i = 0; i < getEnumTypeCount(); i++) {
+          if (!getEnumType(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (hasOptions()) {
+          if (!getOptions().isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              name_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addField(subBuilder.buildPartial());
+              break;
+            }
+            case 26: {
+              com.google.protobuf.DescriptorProtos.DescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.DescriptorProto.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addNestedType(subBuilder.buildPartial());
+              break;
+            }
+            case 34: {
+              com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.EnumDescriptorProto.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addEnumType(subBuilder.buildPartial());
+              break;
+            }
+            case 42: {
+              com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder subBuilder = com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addExtensionRange(subBuilder.buildPartial());
+              break;
+            }
+            case 50: {
+              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addExtension(subBuilder.buildPartial());
+              break;
+            }
+            case 58: {
+              com.google.protobuf.DescriptorProtos.MessageOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.MessageOptions.newBuilder();
+              if (hasOptions()) {
+                subBuilder.mergeFrom(getOptions());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setOptions(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional string name = 1;
+      private java.lang.Object name_ = "";
+      public boolean hasName() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearName() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      void setName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+      }
+      
+      // repeated .google.protobuf.FieldDescriptorProto field = 2;
+      private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> field_ =
+        java.util.Collections.emptyList();
+      private void ensureFieldIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          field_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.FieldDescriptorProto>(field_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> fieldBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getFieldList() {
+        if (fieldBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(field_);
+        } else {
+          return fieldBuilder_.getMessageList();
+        }
+      }
+      public int getFieldCount() {
+        if (fieldBuilder_ == null) {
+          return field_.size();
+        } else {
+          return fieldBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getField(int index) {
+        if (fieldBuilder_ == null) {
+          return field_.get(index);
+        } else {
+          return fieldBuilder_.getMessage(index);
+        }
+      }
+      public Builder setField(
+          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
+        if (fieldBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFieldIsMutable();
+          field_.set(index, value);
+          onChanged();
+        } else {
+          fieldBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setField(
+          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        if (fieldBuilder_ == null) {
+          ensureFieldIsMutable();
+          field_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          fieldBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addField(com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
+        if (fieldBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFieldIsMutable();
+          field_.add(value);
+          onChanged();
+        } else {
+          fieldBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addField(
+          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
+        if (fieldBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureFieldIsMutable();
+          field_.add(index, value);
+          onChanged();
+        } else {
+          fieldBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addField(
+          com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        if (fieldBuilder_ == null) {
+          ensureFieldIsMutable();
+          field_.add(builderForValue.build());
+          onChanged();
+        } else {
+          fieldBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addField(
+          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        if (fieldBuilder_ == null) {
+          ensureFieldIsMutable();
+          field_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          fieldBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllField(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProto> values) {
+        if (fieldBuilder_ == null) {
+          ensureFieldIsMutable();
+          super.addAll(values, field_);
+          onChanged();
+        } else {
+          fieldBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearField() {
+        if (fieldBuilder_ == null) {
+          field_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          fieldBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeField(int index) {
+        if (fieldBuilder_ == null) {
+          ensureFieldIsMutable();
+          field_.remove(index);
+          onChanged();
+        } else {
+          fieldBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder getFieldBuilder(
+          int index) {
+        return getFieldFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getFieldOrBuilder(
+          int index) {
+        if (fieldBuilder_ == null) {
+          return field_.get(index);  } else {
+          return fieldBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
+           getFieldOrBuilderList() {
+        if (fieldBuilder_ != null) {
+          return fieldBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(field_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addFieldBuilder() {
+        return getFieldFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addFieldBuilder(
+          int index) {
+        return getFieldFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder> 
+           getFieldBuilderList() {
+        return getFieldFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
+          getFieldFieldBuilder() {
+        if (fieldBuilder_ == null) {
+          fieldBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder>(
+                  field_,
+                  ((bitField0_ & 0x00000002) == 0x00000002),
+                  getParentForChildren(),
+                  isClean());
+          field_ = null;
+        }
+        return fieldBuilder_;
+      }
+      
+      // repeated .google.protobuf.FieldDescriptorProto extension = 6;
+      private java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> extension_ =
+        java.util.Collections.emptyList();
+      private void ensureExtensionIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          extension_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.FieldDescriptorProto>(extension_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> extensionBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto> getExtensionList() {
+        if (extensionBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(extension_);
+        } else {
+          return extensionBuilder_.getMessageList();
+        }
+      }
+      public int getExtensionCount() {
+        if (extensionBuilder_ == null) {
+          return extension_.size();
+        } else {
+          return extensionBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getExtension(int index) {
+        if (extensionBuilder_ == null) {
+          return extension_.get(index);
+        } else {
+          return extensionBuilder_.getMessage(index);
+        }
+      }
+      public Builder setExtension(
+          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
+        if (extensionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureExtensionIsMutable();
+          extension_.set(index, value);
+          onChanged();
+        } else {
+          extensionBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setExtension(
+          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        if (extensionBuilder_ == null) {
+          ensureExtensionIsMutable();
+          extension_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          extensionBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addExtension(com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
+        if (extensionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureExtensionIsMutable();
+          extension_.add(value);
+          onChanged();
+        } else {
+          extensionBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addExtension(
+          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto value) {
+        if (extensionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureExtensionIsMutable();
+          extension_.add(index, value);
+          onChanged();
+        } else {
+          extensionBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addExtension(
+          com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        if (extensionBuilder_ == null) {
+          ensureExtensionIsMutable();
+          extension_.add(builderForValue.build());
+          onChanged();
+        } else {
+          extensionBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addExtension(
+          int index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {
+        if (extensionBuilder_ == null) {
+          ensureExtensionIsMutable();
+          extension_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          extensionBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllExtension(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProto> values) {
+        if (extensionBuilder_ == null) {
+          ensureExtensionIsMutable();
+          super.addAll(values, extension_);
+          onChanged();
+        } else {
+          extensionBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearExtension() {
+        if (extensionBuilder_ == null) {
+          extension_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+          onChanged();
+        } else {
+          extensionBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeExtension(int index) {
+        if (extensionBuilder_ == null) {
+          ensureExtensionIsMutable();
+          extension_.remove(index);
+          onChanged();
+        } else {
+          extensionBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder getExtensionBuilder(
+          int index) {
+        return getExtensionFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder getExtensionOrBuilder(
+          int index) {
+        if (extensionBuilder_ == null) {
+          return extension_.get(index);  } else {
+          return extensionBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
+           getExtensionOrBuilderList() {
+        if (extensionBuilder_ != null) {
+          return extensionBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(extension_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder() {
+        return getExtensionFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder addExtensionBuilder(
+          int index) {
+        return getExtensionFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder> 
+           getExtensionBuilderList() {
+        return getExtensionFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder> 
+          getExtensionFieldBuilder() {
+        if (extensionBuilder_ == null) {
+          extensionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.FieldDescriptorProto, com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder>(
+                  extension_,
+                  ((bitField0_ & 0x00000004) == 0x00000004),
+                  getParentForChildren(),
+                  isClean());
+          extension_ = null;
+        }
+        return extensionBuilder_;
+      }
+      
+      // repeated .google.protobuf.DescriptorProto nested_type = 3;
+      private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> nestedType_ =
+        java.util.Collections.emptyList();
+      private void ensureNestedTypeIsMutable() {
+        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
+          nestedType_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.DescriptorProto>(nestedType_);
+          bitField0_ |= 0x00000008;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.DescriptorProto, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder, com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> nestedTypeBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto> getNestedTypeList() {
+        if (nestedTypeBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(nestedType_);
+        } else {
+          return nestedTypeBuilder_.getMessageList();
+        }
+      }
+      public int getNestedTypeCount() {
+        if (nestedTypeBuilder_ == null) {
+          return nestedType_.size();
+        } else {
+          return nestedTypeBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProto getNestedType(int index) {
+        if (nestedTypeBuilder_ == null) {
+          return nestedType_.get(index);
+        } else {
+          return nestedTypeBuilder_.getMessage(index);
+        }
+      }
+      public Builder setNestedType(
+          int index, com.google.protobuf.DescriptorProtos.DescriptorProto value) {
+        if (nestedTypeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureNestedTypeIsMutable();
+          nestedType_.set(index, value);
+          onChanged();
+        } else {
+          nestedTypeBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setNestedType(
+          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
+        if (nestedTypeBuilder_ == null) {
+          ensureNestedTypeIsMutable();
+          nestedType_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          nestedTypeBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addNestedType(com.google.protobuf.DescriptorProtos.DescriptorProto value) {
+        if (nestedTypeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureNestedTypeIsMutable();
+          nestedType_.add(value);
+          onChanged();
+        } else {
+          nestedTypeBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addNestedType(
+          int index, com.google.protobuf.DescriptorProtos.DescriptorProto value) {
+        if (nestedTypeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureNestedTypeIsMutable();
+          nestedType_.add(index, value);
+          onChanged();
+        } else {
+          nestedTypeBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addNestedType(
+          com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
+        if (nestedTypeBuilder_ == null) {
+          ensureNestedTypeIsMutable();
+          nestedType_.add(builderForValue.build());
+          onChanged();
+        } else {
+          nestedTypeBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addNestedType(
+          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder builderForValue) {
+        if (nestedTypeBuilder_ == null) {
+          ensureNestedTypeIsMutable();
+          nestedType_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          nestedTypeBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllNestedType(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.DescriptorProto> values) {
+        if (nestedTypeBuilder_ == null) {
+          ensureNestedTypeIsMutable();
+          super.addAll(values, nestedType_);
+          onChanged();
+        } else {
+          nestedTypeBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearNestedType() {
+        if (nestedTypeBuilder_ == null) {
+          nestedType_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+          onChanged();
+        } else {
+          nestedTypeBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeNestedType(int index) {
+        if (nestedTypeBuilder_ == null) {
+          ensureNestedTypeIsMutable();
+          nestedType_.remove(index);
+          onChanged();
+        } else {
+          nestedTypeBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder getNestedTypeBuilder(
+          int index) {
+        return getNestedTypeFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder getNestedTypeOrBuilder(
+          int index) {
+        if (nestedTypeBuilder_ == null) {
+          return nestedType_.get(index);  } else {
+          return nestedTypeBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
+           getNestedTypeOrBuilderList() {
+        if (nestedTypeBuilder_ != null) {
+          return nestedTypeBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(nestedType_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder addNestedTypeBuilder() {
+        return getNestedTypeFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProto.Builder addNestedTypeBuilder(
+          int index) {
+        return getNestedTypeFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.DescriptorProto.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.Builder> 
+           getNestedTypeBuilderList() {
+        return getNestedTypeFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.DescriptorProto, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder, com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder> 
+          getNestedTypeFieldBuilder() {
+        if (nestedTypeBuilder_ == null) {
+          nestedTypeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.DescriptorProto, com.google.protobuf.DescriptorProtos.DescriptorProto.Builder, com.google.protobuf.DescriptorProtos.DescriptorProtoOrBuilder>(
+                  nestedType_,
+                  ((bitField0_ & 0x00000008) == 0x00000008),
+                  getParentForChildren(),
+                  isClean());
+          nestedType_ = null;
+        }
+        return nestedTypeBuilder_;
+      }
+      
+      // repeated .google.protobuf.EnumDescriptorProto enum_type = 4;
+      private java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> enumType_ =
+        java.util.Collections.emptyList();
+      private void ensureEnumTypeIsMutable() {
+        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
+          enumType_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.EnumDescriptorProto>(enumType_);
+          bitField0_ |= 0x00000010;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.EnumDescriptorProto, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> enumTypeBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto> getEnumTypeList() {
+        if (enumTypeBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(enumType_);
+        } else {
+          return enumTypeBuilder_.getMessageList();
+        }
+      }
+      public int getEnumTypeCount() {
+        if (enumTypeBuilder_ == null) {
+          return enumType_.size();
+        } else {
+          return enumTypeBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getEnumType(int index) {
+        if (enumTypeBuilder_ == null) {
+          return enumType_.get(index);
+        } else {
+          return enumTypeBuilder_.getMessage(index);
+        }
+      }
+      public Builder setEnumType(
+          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
+        if (enumTypeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEnumTypeIsMutable();
+          enumType_.set(index, value);
+          onChanged();
+        } else {
+          enumTypeBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setEnumType(
+          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
+        if (enumTypeBuilder_ == null) {
+          ensureEnumTypeIsMutable();
+          enumType_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          enumTypeBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addEnumType(com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
+        if (enumTypeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEnumTypeIsMutable();
+          enumType_.add(value);
+          onChanged();
+        } else {
+          enumTypeBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addEnumType(
+          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto value) {
+        if (enumTypeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEnumTypeIsMutable();
+          enumType_.add(index, value);
+          onChanged();
+        } else {
+          enumTypeBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addEnumType(
+          com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
+        if (enumTypeBuilder_ == null) {
+          ensureEnumTypeIsMutable();
+          enumType_.add(builderForValue.build());
+          onChanged();
+        } else {
+          enumTypeBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addEnumType(
+          int index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {
+        if (enumTypeBuilder_ == null) {
+          ensureEnumTypeIsMutable();
+          enumType_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          enumTypeBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllEnumType(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProto> values) {
+        if (enumTypeBuilder_ == null) {
+          ensureEnumTypeIsMutable();
+          super.addAll(values, enumType_);
+          onChanged();
+        } else {
+          enumTypeBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearEnumType() {
+        if (enumTypeBuilder_ == null) {
+          enumType_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000010);
+          onChanged();
+        } else {
+          enumTypeBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeEnumType(int index) {
+        if (enumTypeBuilder_ == null) {
+          ensureEnumTypeIsMutable();
+          enumType_.remove(index);
+          onChanged();
+        } else {
+          enumTypeBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder getEnumTypeBuilder(
+          int index) {
+        return getEnumTypeFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder getEnumTypeOrBuilder(
+          int index) {
+        if (enumTypeBuilder_ == null) {
+          return enumType_.get(index);  } else {
+          return enumTypeBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
+           getEnumTypeOrBuilderList() {
+        if (enumTypeBuilder_ != null) {
+          return enumTypeBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(enumType_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder() {
+        return getEnumTypeFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder addEnumTypeBuilder(
+          int index) {
+        return getEnumTypeFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder> 
+           getEnumTypeBuilderList() {
+        return getEnumTypeFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.EnumDescriptorProto, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder> 
+          getEnumTypeFieldBuilder() {
+        if (enumTypeBuilder_ == null) {
+          enumTypeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.EnumDescriptorProto, com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder>(
+                  enumType_,
+                  ((bitField0_ & 0x00000010) == 0x00000010),
+                  getParentForChildren(),
+                  isClean());
+          enumType_ = null;
+        }
+        return enumTypeBuilder_;
+      }
+      
+      // repeated .google.protobuf.DescriptorProto.ExtensionRange extension_range = 5;
+      private java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> extensionRange_ =
+        java.util.Collections.emptyList();
+      private void ensureExtensionRangeIsMutable() {
+        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
+          extensionRange_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange>(extensionRange_);
+          bitField0_ |= 0x00000020;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> extensionRangeBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> getExtensionRangeList() {
+        if (extensionRangeBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(extensionRange_);
+        } else {
+          return extensionRangeBuilder_.getMessageList();
+        }
+      }
+      public int getExtensionRangeCount() {
+        if (extensionRangeBuilder_ == null) {
+          return extensionRange_.size();
+        } else {
+          return extensionRangeBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange getExtensionRange(int index) {
+        if (extensionRangeBuilder_ == null) {
+          return extensionRange_.get(index);
+        } else {
+          return extensionRangeBuilder_.getMessage(index);
+        }
+      }
+      public Builder setExtensionRange(
+          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange value) {
+        if (extensionRangeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureExtensionRangeIsMutable();
+          extensionRange_.set(index, value);
+          onChanged();
+        } else {
+          extensionRangeBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setExtensionRange(
+          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder builderForValue) {
+        if (extensionRangeBuilder_ == null) {
+          ensureExtensionRangeIsMutable();
+          extensionRange_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          extensionRangeBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addExtensionRange(com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange value) {
+        if (extensionRangeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureExtensionRangeIsMutable();
+          extensionRange_.add(value);
+          onChanged();
+        } else {
+          extensionRangeBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addExtensionRange(
+          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange value) {
+        if (extensionRangeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureExtensionRangeIsMutable();
+          extensionRange_.add(index, value);
+          onChanged();
+        } else {
+          extensionRangeBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addExtensionRange(
+          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder builderForValue) {
+        if (extensionRangeBuilder_ == null) {
+          ensureExtensionRangeIsMutable();
+          extensionRange_.add(builderForValue.build());
+          onChanged();
+        } else {
+          extensionRangeBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addExtensionRange(
+          int index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder builderForValue) {
+        if (extensionRangeBuilder_ == null) {
+          ensureExtensionRangeIsMutable();
+          extensionRange_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          extensionRangeBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllExtensionRange(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange> values) {
+        if (extensionRangeBuilder_ == null) {
+          ensureExtensionRangeIsMutable();
+          super.addAll(values, extensionRange_);
+          onChanged();
+        } else {
+          extensionRangeBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearExtensionRange() {
+        if (extensionRangeBuilder_ == null) {
+          extensionRange_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000020);
+          onChanged();
+        } else {
+          extensionRangeBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeExtensionRange(int index) {
+        if (extensionRangeBuilder_ == null) {
+          ensureExtensionRangeIsMutable();
+          extensionRange_.remove(index);
+          onChanged();
+        } else {
+          extensionRangeBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder getExtensionRangeBuilder(
+          int index) {
+        return getExtensionRangeFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder getExtensionRangeOrBuilder(
+          int index) {
+        if (extensionRangeBuilder_ == null) {
+          return extensionRange_.get(index);  } else {
+          return extensionRangeBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> 
+           getExtensionRangeOrBuilderList() {
+        if (extensionRangeBuilder_ != null) {
+          return extensionRangeBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(extensionRange_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder addExtensionRangeBuilder() {
+        return getExtensionRangeFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder addExtensionRangeBuilder(
+          int index) {
+        return getExtensionRangeFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder> 
+           getExtensionRangeBuilderList() {
+        return getExtensionRangeFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder> 
+          getExtensionRangeFieldBuilder() {
+        if (extensionRangeBuilder_ == null) {
+          extensionRangeBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder, com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRangeOrBuilder>(
+                  extensionRange_,
+                  ((bitField0_ & 0x00000020) == 0x00000020),
+                  getParentForChildren(),
+                  isClean());
+          extensionRange_ = null;
+        }
+        return extensionRangeBuilder_;
+      }
+      
+      // optional .google.protobuf.MessageOptions options = 7;
+      private com.google.protobuf.DescriptorProtos.MessageOptions options_ = com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.MessageOptions, com.google.protobuf.DescriptorProtos.MessageOptions.Builder, com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder> optionsBuilder_;
+      public boolean hasOptions() {
+        return ((bitField0_ & 0x00000040) == 0x00000040);
+      }
+      public com.google.protobuf.DescriptorProtos.MessageOptions getOptions() {
+        if (optionsBuilder_ == null) {
+          return options_;
+        } else {
+          return optionsBuilder_.getMessage();
+        }
+      }
+      public Builder setOptions(com.google.protobuf.DescriptorProtos.MessageOptions value) {
+        if (optionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          options_ = value;
+          onChanged();
+        } else {
+          optionsBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000040;
+        return this;
+      }
+      public Builder setOptions(
+          com.google.protobuf.DescriptorProtos.MessageOptions.Builder builderForValue) {
+        if (optionsBuilder_ == null) {
+          options_ = builderForValue.build();
+          onChanged();
+        } else {
+          optionsBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000040;
+        return this;
+      }
+      public Builder mergeOptions(com.google.protobuf.DescriptorProtos.MessageOptions value) {
+        if (optionsBuilder_ == null) {
+          if (((bitField0_ & 0x00000040) == 0x00000040) &&
+              options_ != com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance()) {
+            options_ =
+              com.google.protobuf.DescriptorProtos.MessageOptions.newBuilder(options_).mergeFrom(value).buildPartial();
+          } else {
+            options_ = value;
+          }
+          onChanged();
+        } else {
+          optionsBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000040;
+        return this;
+      }
+      public Builder clearOptions() {
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance();
+          onChanged();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000040);
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.MessageOptions.Builder getOptionsBuilder() {
+        bitField0_ |= 0x00000040;
+        onChanged();
+        return getOptionsFieldBuilder().getBuilder();
+      }
+      public com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder getOptionsOrBuilder() {
+        if (optionsBuilder_ != null) {
+          return optionsBuilder_.getMessageOrBuilder();
+        } else {
+          return options_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.MessageOptions, com.google.protobuf.DescriptorProtos.MessageOptions.Builder, com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder> 
+          getOptionsFieldBuilder() {
+        if (optionsBuilder_ == null) {
+          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.google.protobuf.DescriptorProtos.MessageOptions, com.google.protobuf.DescriptorProtos.MessageOptions.Builder, com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder>(
+                  options_,
+                  getParentForChildren(),
+                  isClean());
+          options_ = null;
+        }
+        return optionsBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.DescriptorProto)
+    }
+    
+    static {
+      defaultInstance = new DescriptorProto(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto)
+  }
+  
+  public interface FieldDescriptorProtoOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional string name = 1;
+    boolean hasName();
+    String getName();
+    
+    // optional int32 number = 3;
+    boolean hasNumber();
+    int getNumber();
+    
+    // optional .google.protobuf.FieldDescriptorProto.Label label = 4;
+    boolean hasLabel();
+    com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label getLabel();
+    
+    // optional .google.protobuf.FieldDescriptorProto.Type type = 5;
+    boolean hasType();
+    com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type getType();
+    
+    // optional string type_name = 6;
+    boolean hasTypeName();
+    String getTypeName();
+    
+    // optional string extendee = 2;
+    boolean hasExtendee();
+    String getExtendee();
+    
+    // optional string default_value = 7;
+    boolean hasDefaultValue();
+    String getDefaultValue();
+    
+    // optional .google.protobuf.FieldOptions options = 8;
+    boolean hasOptions();
+    com.google.protobuf.DescriptorProtos.FieldOptions getOptions();
+    com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder getOptionsOrBuilder();
+  }
+  public static final class FieldDescriptorProto extends
+      com.google.protobuf.GeneratedMessage
+      implements FieldDescriptorProtoOrBuilder {
+    // Use FieldDescriptorProto.newBuilder() to construct.
+    private FieldDescriptorProto(Builder builder) {
+      super(builder);
+    }
+    private FieldDescriptorProto(boolean noInit) {}
+    
+    private static final FieldDescriptorProto defaultInstance;
+    public static FieldDescriptorProto getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public FieldDescriptorProto getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable;
+    }
+    
+    public enum Type
+        implements com.google.protobuf.ProtocolMessageEnum {
+      TYPE_DOUBLE(0, 1),
+      TYPE_FLOAT(1, 2),
+      TYPE_INT64(2, 3),
+      TYPE_UINT64(3, 4),
+      TYPE_INT32(4, 5),
+      TYPE_FIXED64(5, 6),
+      TYPE_FIXED32(6, 7),
+      TYPE_BOOL(7, 8),
+      TYPE_STRING(8, 9),
+      TYPE_GROUP(9, 10),
+      TYPE_MESSAGE(10, 11),
+      TYPE_BYTES(11, 12),
+      TYPE_UINT32(12, 13),
+      TYPE_ENUM(13, 14),
+      TYPE_SFIXED32(14, 15),
+      TYPE_SFIXED64(15, 16),
+      TYPE_SINT32(16, 17),
+      TYPE_SINT64(17, 18),
+      ;
+      
+      public static final int TYPE_DOUBLE_VALUE = 1;
+      public static final int TYPE_FLOAT_VALUE = 2;
+      public static final int TYPE_INT64_VALUE = 3;
+      public static final int TYPE_UINT64_VALUE = 4;
+      public static final int TYPE_INT32_VALUE = 5;
+      public static final int TYPE_FIXED64_VALUE = 6;
+      public static final int TYPE_FIXED32_VALUE = 7;
+      public static final int TYPE_BOOL_VALUE = 8;
+      public static final int TYPE_STRING_VALUE = 9;
+      public static final int TYPE_GROUP_VALUE = 10;
+      public static final int TYPE_MESSAGE_VALUE = 11;
+      public static final int TYPE_BYTES_VALUE = 12;
+      public static final int TYPE_UINT32_VALUE = 13;
+      public static final int TYPE_ENUM_VALUE = 14;
+      public static final int TYPE_SFIXED32_VALUE = 15;
+      public static final int TYPE_SFIXED64_VALUE = 16;
+      public static final int TYPE_SINT32_VALUE = 17;
+      public static final int TYPE_SINT64_VALUE = 18;
+      
+      
+      public final int getNumber() { return value; }
+      
+      public static Type valueOf(int value) {
+        switch (value) {
+          case 1: return TYPE_DOUBLE;
+          case 2: return TYPE_FLOAT;
+          case 3: return TYPE_INT64;
+          case 4: return TYPE_UINT64;
+          case 5: return TYPE_INT32;
+          case 6: return TYPE_FIXED64;
+          case 7: return TYPE_FIXED32;
+          case 8: return TYPE_BOOL;
+          case 9: return TYPE_STRING;
+          case 10: return TYPE_GROUP;
+          case 11: return TYPE_MESSAGE;
+          case 12: return TYPE_BYTES;
+          case 13: return TYPE_UINT32;
+          case 14: return TYPE_ENUM;
+          case 15: return TYPE_SFIXED32;
+          case 16: return TYPE_SFIXED64;
+          case 17: return TYPE_SINT32;
+          case 18: return TYPE_SINT64;
+          default: return null;
+        }
+      }
+      
+      public static com.google.protobuf.Internal.EnumLiteMap<Type>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static com.google.protobuf.Internal.EnumLiteMap<Type>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<Type>() {
+              public Type findValueByNumber(int number) {
+                return Type.valueOf(number);
+              }
+            };
+      
+      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+          getValueDescriptor() {
+        return getDescriptor().getValues().get(index);
+      }
+      public final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptorForType() {
+        return getDescriptor();
+      }
+      public static final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDescriptor().getEnumTypes().get(0);
+      }
+      
+      private static final Type[] VALUES = {
+        TYPE_DOUBLE, TYPE_FLOAT, TYPE_INT64, TYPE_UINT64, TYPE_INT32, TYPE_FIXED64, TYPE_FIXED32, TYPE_BOOL, TYPE_STRING, TYPE_GROUP, TYPE_MESSAGE, TYPE_BYTES, TYPE_UINT32, TYPE_ENUM, TYPE_SFIXED32, TYPE_SFIXED64, TYPE_SINT32, TYPE_SINT64, 
+      };
+      
+      public static Type valueOf(
+          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 index;
+      private final int value;
+      
+      private Type(int index, int value) {
+        this.index = index;
+        this.value = value;
+      }
+      
+      // @@protoc_insertion_point(enum_scope:google.protobuf.FieldDescriptorProto.Type)
+    }
+    
+    public enum Label
+        implements com.google.protobuf.ProtocolMessageEnum {
+      LABEL_OPTIONAL(0, 1),
+      LABEL_REQUIRED(1, 2),
+      LABEL_REPEATED(2, 3),
+      ;
+      
+      public static final int LABEL_OPTIONAL_VALUE = 1;
+      public static final int LABEL_REQUIRED_VALUE = 2;
+      public static final int LABEL_REPEATED_VALUE = 3;
+      
+      
+      public final int getNumber() { return value; }
+      
+      public static Label valueOf(int value) {
+        switch (value) {
+          case 1: return LABEL_OPTIONAL;
+          case 2: return LABEL_REQUIRED;
+          case 3: return LABEL_REPEATED;
+          default: return null;
+        }
+      }
+      
+      public static com.google.protobuf.Internal.EnumLiteMap<Label>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static com.google.protobuf.Internal.EnumLiteMap<Label>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<Label>() {
+              public Label findValueByNumber(int number) {
+                return Label.valueOf(number);
+              }
+            };
+      
+      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+          getValueDescriptor() {
+        return getDescriptor().getValues().get(index);
+      }
+      public final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptorForType() {
+        return getDescriptor();
+      }
+      public static final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDescriptor().getEnumTypes().get(1);
+      }
+      
+      private static final Label[] VALUES = {
+        LABEL_OPTIONAL, LABEL_REQUIRED, LABEL_REPEATED, 
+      };
+      
+      public static Label valueOf(
+          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 index;
+      private final int value;
+      
+      private Label(int index, int value) {
+        this.index = index;
+        this.value = value;
+      }
+      
+      // @@protoc_insertion_point(enum_scope:google.protobuf.FieldDescriptorProto.Label)
+    }
+    
+    private int bitField0_;
+    // optional string name = 1;
+    public static final int NAME_FIELD_NUMBER = 1;
+    private java.lang.Object name_;
+    public boolean hasName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          name_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional int32 number = 3;
+    public static final int NUMBER_FIELD_NUMBER = 3;
+    private int number_;
+    public boolean hasNumber() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public int getNumber() {
+      return number_;
+    }
+    
+    // optional .google.protobuf.FieldDescriptorProto.Label label = 4;
+    public static final int LABEL_FIELD_NUMBER = 4;
+    private com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label label_;
+    public boolean hasLabel() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label getLabel() {
+      return label_;
+    }
+    
+    // optional .google.protobuf.FieldDescriptorProto.Type type = 5;
+    public static final int TYPE_FIELD_NUMBER = 5;
+    private com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type type_;
+    public boolean hasType() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type getType() {
+      return type_;
+    }
+    
+    // optional string type_name = 6;
+    public static final int TYPE_NAME_FIELD_NUMBER = 6;
+    private java.lang.Object typeName_;
+    public boolean hasTypeName() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    public String getTypeName() {
+      java.lang.Object ref = typeName_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          typeName_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getTypeNameBytes() {
+      java.lang.Object ref = typeName_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        typeName_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional string extendee = 2;
+    public static final int EXTENDEE_FIELD_NUMBER = 2;
+    private java.lang.Object extendee_;
+    public boolean hasExtendee() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    public String getExtendee() {
+      java.lang.Object ref = extendee_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          extendee_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getExtendeeBytes() {
+      java.lang.Object ref = extendee_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        extendee_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional string default_value = 7;
+    public static final int DEFAULT_VALUE_FIELD_NUMBER = 7;
+    private java.lang.Object defaultValue_;
+    public boolean hasDefaultValue() {
+      return ((bitField0_ & 0x00000040) == 0x00000040);
+    }
+    public String getDefaultValue() {
+      java.lang.Object ref = defaultValue_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          defaultValue_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getDefaultValueBytes() {
+      java.lang.Object ref = defaultValue_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        defaultValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional .google.protobuf.FieldOptions options = 8;
+    public static final int OPTIONS_FIELD_NUMBER = 8;
+    private com.google.protobuf.DescriptorProtos.FieldOptions options_;
+    public boolean hasOptions() {
+      return ((bitField0_ & 0x00000080) == 0x00000080);
+    }
+    public com.google.protobuf.DescriptorProtos.FieldOptions getOptions() {
+      return options_;
+    }
+    public com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder getOptionsOrBuilder() {
+      return options_;
+    }
+    
+    private void initFields() {
+      name_ = "";
+      number_ = 0;
+      label_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL;
+      type_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.TYPE_DOUBLE;
+      typeName_ = "";
+      extendee_ = "";
+      defaultValue_ = "";
+      options_ = com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (hasOptions()) {
+        if (!getOptions().isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeBytes(2, getExtendeeBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt32(3, number_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeEnum(4, label_.getNumber());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeEnum(5, type_.getNumber());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBytes(6, getTypeNameBytes());
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        output.writeBytes(7, getDefaultValueBytes());
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        output.writeMessage(8, options_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(2, getExtendeeBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(3, number_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(4, label_.getNumber());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(5, type_.getNumber());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(6, getTypeNameBytes());
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(7, getDefaultValueBytes());
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, options_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FieldDescriptorProto prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.google.protobuf.DescriptorProtos.FieldDescriptorProtoOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.FieldDescriptorProto.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getOptionsFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        number_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        label_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        type_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.TYPE_DOUBLE;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        typeName_ = "";
+        bitField0_ = (bitField0_ & ~0x00000010);
+        extendee_ = "";
+        bitField0_ = (bitField0_ & ~0x00000020);
+        defaultValue_ = "";
+        bitField0_ = (bitField0_ & ~0x00000040);
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000080);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto build() {
+        com.google.protobuf.DescriptorProtos.FieldDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.FieldDescriptorProto buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.FieldDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto buildPartial() {
+        com.google.protobuf.DescriptorProtos.FieldDescriptorProto result = new com.google.protobuf.DescriptorProtos.FieldDescriptorProto(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.name_ = name_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.number_ = number_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.label_ = label_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.type_ = type_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.typeName_ = typeName_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.extendee_ = extendee_;
+        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
+          to_bitField0_ |= 0x00000040;
+        }
+        result.defaultValue_ = defaultValue_;
+        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
+          to_bitField0_ |= 0x00000080;
+        }
+        if (optionsBuilder_ == null) {
+          result.options_ = options_;
+        } else {
+          result.options_ = optionsBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.FieldDescriptorProto) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.FieldDescriptorProto)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FieldDescriptorProto other) {
+        if (other == com.google.protobuf.DescriptorProtos.FieldDescriptorProto.getDefaultInstance()) return this;
+        if (other.hasName()) {
+          setName(other.getName());
+        }
+        if (other.hasNumber()) {
+          setNumber(other.getNumber());
+        }
+        if (other.hasLabel()) {
+          setLabel(other.getLabel());
+        }
+        if (other.hasType()) {
+          setType(other.getType());
+        }
+        if (other.hasTypeName()) {
+          setTypeName(other.getTypeName());
+        }
+        if (other.hasExtendee()) {
+          setExtendee(other.getExtendee());
+        }
+        if (other.hasDefaultValue()) {
+          setDefaultValue(other.getDefaultValue());
+        }
+        if (other.hasOptions()) {
+          mergeOptions(other.getOptions());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (hasOptions()) {
+          if (!getOptions().isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              name_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              bitField0_ |= 0x00000020;
+              extendee_ = input.readBytes();
+              break;
+            }
+            case 24: {
+              bitField0_ |= 0x00000002;
+              number_ = input.readInt32();
+              break;
+            }
+            case 32: {
+              int rawValue = input.readEnum();
+              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label value = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(4, rawValue);
+              } else {
+                bitField0_ |= 0x00000004;
+                label_ = value;
+              }
+              break;
+            }
+            case 40: {
+              int rawValue = input.readEnum();
+              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type value = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(5, rawValue);
+              } else {
+                bitField0_ |= 0x00000008;
+                type_ = value;
+              }
+              break;
+            }
+            case 50: {
+              bitField0_ |= 0x00000010;
+              typeName_ = input.readBytes();
+              break;
+            }
+            case 58: {
+              bitField0_ |= 0x00000040;
+              defaultValue_ = input.readBytes();
+              break;
+            }
+            case 66: {
+              com.google.protobuf.DescriptorProtos.FieldOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.FieldOptions.newBuilder();
+              if (hasOptions()) {
+                subBuilder.mergeFrom(getOptions());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setOptions(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional string name = 1;
+      private java.lang.Object name_ = "";
+      public boolean hasName() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearName() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      void setName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+      }
+      
+      // optional int32 number = 3;
+      private int number_ ;
+      public boolean hasNumber() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public int getNumber() {
+        return number_;
+      }
+      public Builder setNumber(int value) {
+        bitField0_ |= 0x00000002;
+        number_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearNumber() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        number_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // optional .google.protobuf.FieldDescriptorProto.Label label = 4;
+      private com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label label_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL;
+      public boolean hasLabel() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label getLabel() {
+        return label_;
+      }
+      public Builder setLabel(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000004;
+        label_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearLabel() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        label_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Label.LABEL_OPTIONAL;
+        onChanged();
+        return this;
+      }
+      
+      // optional .google.protobuf.FieldDescriptorProto.Type type = 5;
+      private com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type type_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.TYPE_DOUBLE;
+      public boolean hasType() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type getType() {
+        return type_;
+      }
+      public Builder setType(com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000008;
+        type_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearType() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        type_ = com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Type.TYPE_DOUBLE;
+        onChanged();
+        return this;
+      }
+      
+      // optional string type_name = 6;
+      private java.lang.Object typeName_ = "";
+      public boolean hasTypeName() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public String getTypeName() {
+        java.lang.Object ref = typeName_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          typeName_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setTypeName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000010;
+        typeName_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearTypeName() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        typeName_ = getDefaultInstance().getTypeName();
+        onChanged();
+        return this;
+      }
+      void setTypeName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000010;
+        typeName_ = value;
+        onChanged();
+      }
+      
+      // optional string extendee = 2;
+      private java.lang.Object extendee_ = "";
+      public boolean hasExtendee() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public String getExtendee() {
+        java.lang.Object ref = extendee_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          extendee_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setExtendee(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000020;
+        extendee_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearExtendee() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        extendee_ = getDefaultInstance().getExtendee();
+        onChanged();
+        return this;
+      }
+      void setExtendee(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000020;
+        extendee_ = value;
+        onChanged();
+      }
+      
+      // optional string default_value = 7;
+      private java.lang.Object defaultValue_ = "";
+      public boolean hasDefaultValue() {
+        return ((bitField0_ & 0x00000040) == 0x00000040);
+      }
+      public String getDefaultValue() {
+        java.lang.Object ref = defaultValue_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          defaultValue_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setDefaultValue(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000040;
+        defaultValue_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearDefaultValue() {
+        bitField0_ = (bitField0_ & ~0x00000040);
+        defaultValue_ = getDefaultInstance().getDefaultValue();
+        onChanged();
+        return this;
+      }
+      void setDefaultValue(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000040;
+        defaultValue_ = value;
+        onChanged();
+      }
+      
+      // optional .google.protobuf.FieldOptions options = 8;
+      private com.google.protobuf.DescriptorProtos.FieldOptions options_ = com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.FieldOptions, com.google.protobuf.DescriptorProtos.FieldOptions.Builder, com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder> optionsBuilder_;
+      public boolean hasOptions() {
+        return ((bitField0_ & 0x00000080) == 0x00000080);
+      }
+      public com.google.protobuf.DescriptorProtos.FieldOptions getOptions() {
+        if (optionsBuilder_ == null) {
+          return options_;
+        } else {
+          return optionsBuilder_.getMessage();
+        }
+      }
+      public Builder setOptions(com.google.protobuf.DescriptorProtos.FieldOptions value) {
+        if (optionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          options_ = value;
+          onChanged();
+        } else {
+          optionsBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder setOptions(
+          com.google.protobuf.DescriptorProtos.FieldOptions.Builder builderForValue) {
+        if (optionsBuilder_ == null) {
+          options_ = builderForValue.build();
+          onChanged();
+        } else {
+          optionsBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder mergeOptions(com.google.protobuf.DescriptorProtos.FieldOptions value) {
+        if (optionsBuilder_ == null) {
+          if (((bitField0_ & 0x00000080) == 0x00000080) &&
+              options_ != com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance()) {
+            options_ =
+              com.google.protobuf.DescriptorProtos.FieldOptions.newBuilder(options_).mergeFrom(value).buildPartial();
+          } else {
+            options_ = value;
+          }
+          onChanged();
+        } else {
+          optionsBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000080;
+        return this;
+      }
+      public Builder clearOptions() {
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
+          onChanged();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000080);
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.FieldOptions.Builder getOptionsBuilder() {
+        bitField0_ |= 0x00000080;
+        onChanged();
+        return getOptionsFieldBuilder().getBuilder();
+      }
+      public com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder getOptionsOrBuilder() {
+        if (optionsBuilder_ != null) {
+          return optionsBuilder_.getMessageOrBuilder();
+        } else {
+          return options_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.FieldOptions, com.google.protobuf.DescriptorProtos.FieldOptions.Builder, com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder> 
+          getOptionsFieldBuilder() {
+        if (optionsBuilder_ == null) {
+          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.google.protobuf.DescriptorProtos.FieldOptions, com.google.protobuf.DescriptorProtos.FieldOptions.Builder, com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder>(
+                  options_,
+                  getParentForChildren(),
+                  isClean());
+          options_ = null;
+        }
+        return optionsBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.FieldDescriptorProto)
+    }
+    
+    static {
+      defaultInstance = new FieldDescriptorProto(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.FieldDescriptorProto)
+  }
+  
+  public interface EnumDescriptorProtoOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional string name = 1;
+    boolean hasName();
+    String getName();
+    
+    // repeated .google.protobuf.EnumValueDescriptorProto value = 2;
+    java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> 
+        getValueList();
+    com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto getValue(int index);
+    int getValueCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder> 
+        getValueOrBuilderList();
+    com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder getValueOrBuilder(
+        int index);
+    
+    // optional .google.protobuf.EnumOptions options = 3;
+    boolean hasOptions();
+    com.google.protobuf.DescriptorProtos.EnumOptions getOptions();
+    com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder getOptionsOrBuilder();
+  }
+  public static final class EnumDescriptorProto extends
+      com.google.protobuf.GeneratedMessage
+      implements EnumDescriptorProtoOrBuilder {
+    // Use EnumDescriptorProto.newBuilder() to construct.
+    private EnumDescriptorProto(Builder builder) {
+      super(builder);
+    }
+    private EnumDescriptorProto(boolean noInit) {}
+    
+    private static final EnumDescriptorProto defaultInstance;
+    public static EnumDescriptorProto getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public EnumDescriptorProto getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional string name = 1;
+    public static final int NAME_FIELD_NUMBER = 1;
+    private java.lang.Object name_;
+    public boolean hasName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          name_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // repeated .google.protobuf.EnumValueDescriptorProto value = 2;
+    public static final int VALUE_FIELD_NUMBER = 2;
+    private java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> value_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> getValueList() {
+      return value_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder> 
+        getValueOrBuilderList() {
+      return value_;
+    }
+    public int getValueCount() {
+      return value_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto getValue(int index) {
+      return value_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder getValueOrBuilder(
+        int index) {
+      return value_.get(index);
+    }
+    
+    // optional .google.protobuf.EnumOptions options = 3;
+    public static final int OPTIONS_FIELD_NUMBER = 3;
+    private com.google.protobuf.DescriptorProtos.EnumOptions options_;
+    public boolean hasOptions() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public com.google.protobuf.DescriptorProtos.EnumOptions getOptions() {
+      return options_;
+    }
+    public com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder getOptionsOrBuilder() {
+      return options_;
+    }
+    
+    private void initFields() {
+      name_ = "";
+      value_ = java.util.Collections.emptyList();
+      options_ = com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      for (int i = 0; i < getValueCount(); i++) {
+        if (!getValue(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (hasOptions()) {
+        if (!getOptions().isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getNameBytes());
+      }
+      for (int i = 0; i < value_.size(); i++) {
+        output.writeMessage(2, value_.get(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeMessage(3, options_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getNameBytes());
+      }
+      for (int i = 0; i < value_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, value_.get(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, options_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.EnumDescriptorProto prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.google.protobuf.DescriptorProtos.EnumDescriptorProtoOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.EnumDescriptorProto.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getValueFieldBuilder();
+          getOptionsFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (valueBuilder_ == null) {
+          value_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          valueBuilder_.clear();
+        }
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000004);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto build() {
+        com.google.protobuf.DescriptorProtos.EnumDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.EnumDescriptorProto buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.EnumDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.EnumDescriptorProto buildPartial() {
+        com.google.protobuf.DescriptorProtos.EnumDescriptorProto result = new com.google.protobuf.DescriptorProtos.EnumDescriptorProto(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.name_ = name_;
+        if (valueBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) == 0x00000002)) {
+            value_ = java.util.Collections.unmodifiableList(value_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.value_ = value_;
+        } else {
+          result.value_ = valueBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        if (optionsBuilder_ == null) {
+          result.options_ = options_;
+        } else {
+          result.options_ = optionsBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.EnumDescriptorProto) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.EnumDescriptorProto)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumDescriptorProto other) {
+        if (other == com.google.protobuf.DescriptorProtos.EnumDescriptorProto.getDefaultInstance()) return this;
+        if (other.hasName()) {
+          setName(other.getName());
+        }
+        if (valueBuilder_ == null) {
+          if (!other.value_.isEmpty()) {
+            if (value_.isEmpty()) {
+              value_ = other.value_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureValueIsMutable();
+              value_.addAll(other.value_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.value_.isEmpty()) {
+            if (valueBuilder_.isEmpty()) {
+              valueBuilder_.dispose();
+              valueBuilder_ = null;
+              value_ = other.value_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              valueBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getValueFieldBuilder() : null;
+            } else {
+              valueBuilder_.addAllMessages(other.value_);
+            }
+          }
+        }
+        if (other.hasOptions()) {
+          mergeOptions(other.getOptions());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        for (int i = 0; i < getValueCount(); i++) {
+          if (!getValue(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (hasOptions()) {
+          if (!getOptions().isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              name_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addValue(subBuilder.buildPartial());
+              break;
+            }
+            case 26: {
+              com.google.protobuf.DescriptorProtos.EnumOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.EnumOptions.newBuilder();
+              if (hasOptions()) {
+                subBuilder.mergeFrom(getOptions());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setOptions(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional string name = 1;
+      private java.lang.Object name_ = "";
+      public boolean hasName() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearName() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      void setName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+      }
+      
+      // repeated .google.protobuf.EnumValueDescriptorProto value = 2;
+      private java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> value_ =
+        java.util.Collections.emptyList();
+      private void ensureValueIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          value_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto>(value_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder> valueBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> getValueList() {
+        if (valueBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(value_);
+        } else {
+          return valueBuilder_.getMessageList();
+        }
+      }
+      public int getValueCount() {
+        if (valueBuilder_ == null) {
+          return value_.size();
+        } else {
+          return valueBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto getValue(int index) {
+        if (valueBuilder_ == null) {
+          return value_.get(index);
+        } else {
+          return valueBuilder_.getMessage(index);
+        }
+      }
+      public Builder setValue(
+          int index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto value) {
+        if (valueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureValueIsMutable();
+          value_.set(index, value);
+          onChanged();
+        } else {
+          valueBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setValue(
+          int index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {
+        if (valueBuilder_ == null) {
+          ensureValueIsMutable();
+          value_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          valueBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addValue(com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto value) {
+        if (valueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureValueIsMutable();
+          value_.add(value);
+          onChanged();
+        } else {
+          valueBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addValue(
+          int index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto value) {
+        if (valueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureValueIsMutable();
+          value_.add(index, value);
+          onChanged();
+        } else {
+          valueBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addValue(
+          com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {
+        if (valueBuilder_ == null) {
+          ensureValueIsMutable();
+          value_.add(builderForValue.build());
+          onChanged();
+        } else {
+          valueBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addValue(
+          int index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {
+        if (valueBuilder_ == null) {
+          ensureValueIsMutable();
+          value_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          valueBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllValue(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto> values) {
+        if (valueBuilder_ == null) {
+          ensureValueIsMutable();
+          super.addAll(values, value_);
+          onChanged();
+        } else {
+          valueBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearValue() {
+        if (valueBuilder_ == null) {
+          value_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          valueBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeValue(int index) {
+        if (valueBuilder_ == null) {
+          ensureValueIsMutable();
+          value_.remove(index);
+          onChanged();
+        } else {
+          valueBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder getValueBuilder(
+          int index) {
+        return getValueFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder getValueOrBuilder(
+          int index) {
+        if (valueBuilder_ == null) {
+          return value_.get(index);  } else {
+          return valueBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder> 
+           getValueOrBuilderList() {
+        if (valueBuilder_ != null) {
+          return valueBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(value_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder addValueBuilder() {
+        return getValueFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder addValueBuilder(
+          int index) {
+        return getValueFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder> 
+           getValueBuilderList() {
+        return getValueFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder> 
+          getValueFieldBuilder() {
+        if (valueBuilder_ == null) {
+          valueBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder>(
+                  value_,
+                  ((bitField0_ & 0x00000002) == 0x00000002),
+                  getParentForChildren(),
+                  isClean());
+          value_ = null;
+        }
+        return valueBuilder_;
+      }
+      
+      // optional .google.protobuf.EnumOptions options = 3;
+      private com.google.protobuf.DescriptorProtos.EnumOptions options_ = com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.EnumOptions, com.google.protobuf.DescriptorProtos.EnumOptions.Builder, com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder> optionsBuilder_;
+      public boolean hasOptions() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public com.google.protobuf.DescriptorProtos.EnumOptions getOptions() {
+        if (optionsBuilder_ == null) {
+          return options_;
+        } else {
+          return optionsBuilder_.getMessage();
+        }
+      }
+      public Builder setOptions(com.google.protobuf.DescriptorProtos.EnumOptions value) {
+        if (optionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          options_ = value;
+          onChanged();
+        } else {
+          optionsBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000004;
+        return this;
+      }
+      public Builder setOptions(
+          com.google.protobuf.DescriptorProtos.EnumOptions.Builder builderForValue) {
+        if (optionsBuilder_ == null) {
+          options_ = builderForValue.build();
+          onChanged();
+        } else {
+          optionsBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000004;
+        return this;
+      }
+      public Builder mergeOptions(com.google.protobuf.DescriptorProtos.EnumOptions value) {
+        if (optionsBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) == 0x00000004) &&
+              options_ != com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance()) {
+            options_ =
+              com.google.protobuf.DescriptorProtos.EnumOptions.newBuilder(options_).mergeFrom(value).buildPartial();
+          } else {
+            options_ = value;
+          }
+          onChanged();
+        } else {
+          optionsBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000004;
+        return this;
+      }
+      public Builder clearOptions() {
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance();
+          onChanged();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000004);
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.EnumOptions.Builder getOptionsBuilder() {
+        bitField0_ |= 0x00000004;
+        onChanged();
+        return getOptionsFieldBuilder().getBuilder();
+      }
+      public com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder getOptionsOrBuilder() {
+        if (optionsBuilder_ != null) {
+          return optionsBuilder_.getMessageOrBuilder();
+        } else {
+          return options_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.EnumOptions, com.google.protobuf.DescriptorProtos.EnumOptions.Builder, com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder> 
+          getOptionsFieldBuilder() {
+        if (optionsBuilder_ == null) {
+          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.google.protobuf.DescriptorProtos.EnumOptions, com.google.protobuf.DescriptorProtos.EnumOptions.Builder, com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder>(
+                  options_,
+                  getParentForChildren(),
+                  isClean());
+          options_ = null;
+        }
+        return optionsBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.EnumDescriptorProto)
+    }
+    
+    static {
+      defaultInstance = new EnumDescriptorProto(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.EnumDescriptorProto)
+  }
+  
+  public interface EnumValueDescriptorProtoOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional string name = 1;
+    boolean hasName();
+    String getName();
+    
+    // optional int32 number = 2;
+    boolean hasNumber();
+    int getNumber();
+    
+    // optional .google.protobuf.EnumValueOptions options = 3;
+    boolean hasOptions();
+    com.google.protobuf.DescriptorProtos.EnumValueOptions getOptions();
+    com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder getOptionsOrBuilder();
+  }
+  public static final class EnumValueDescriptorProto extends
+      com.google.protobuf.GeneratedMessage
+      implements EnumValueDescriptorProtoOrBuilder {
+    // Use EnumValueDescriptorProto.newBuilder() to construct.
+    private EnumValueDescriptorProto(Builder builder) {
+      super(builder);
+    }
+    private EnumValueDescriptorProto(boolean noInit) {}
+    
+    private static final EnumValueDescriptorProto defaultInstance;
+    public static EnumValueDescriptorProto getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public EnumValueDescriptorProto getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional string name = 1;
+    public static final int NAME_FIELD_NUMBER = 1;
+    private java.lang.Object name_;
+    public boolean hasName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          name_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional int32 number = 2;
+    public static final int NUMBER_FIELD_NUMBER = 2;
+    private int number_;
+    public boolean hasNumber() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public int getNumber() {
+      return number_;
+    }
+    
+    // optional .google.protobuf.EnumValueOptions options = 3;
+    public static final int OPTIONS_FIELD_NUMBER = 3;
+    private com.google.protobuf.DescriptorProtos.EnumValueOptions options_;
+    public boolean hasOptions() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public com.google.protobuf.DescriptorProtos.EnumValueOptions getOptions() {
+      return options_;
+    }
+    public com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder getOptionsOrBuilder() {
+      return options_;
+    }
+    
+    private void initFields() {
+      name_ = "";
+      number_ = 0;
+      options_ = com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (hasOptions()) {
+        if (!getOptions().isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt32(2, number_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeMessage(3, options_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(2, number_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, options_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.google.protobuf.DescriptorProtos.EnumValueDescriptorProtoOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getOptionsFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        number_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000004);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto build() {
+        com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto buildPartial() {
+        com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto result = new com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.name_ = name_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.number_ = number_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        if (optionsBuilder_ == null) {
+          result.options_ = options_;
+        } else {
+          result.options_ = optionsBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto other) {
+        if (other == com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.getDefaultInstance()) return this;
+        if (other.hasName()) {
+          setName(other.getName());
+        }
+        if (other.hasNumber()) {
+          setNumber(other.getNumber());
+        }
+        if (other.hasOptions()) {
+          mergeOptions(other.getOptions());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (hasOptions()) {
+          if (!getOptions().isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              name_ = input.readBytes();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              number_ = input.readInt32();
+              break;
+            }
+            case 26: {
+              com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.EnumValueOptions.newBuilder();
+              if (hasOptions()) {
+                subBuilder.mergeFrom(getOptions());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setOptions(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional string name = 1;
+      private java.lang.Object name_ = "";
+      public boolean hasName() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearName() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      void setName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+      }
+      
+      // optional int32 number = 2;
+      private int number_ ;
+      public boolean hasNumber() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public int getNumber() {
+        return number_;
+      }
+      public Builder setNumber(int value) {
+        bitField0_ |= 0x00000002;
+        number_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearNumber() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        number_ = 0;
+        onChanged();
+        return this;
+      }
+      
+      // optional .google.protobuf.EnumValueOptions options = 3;
+      private com.google.protobuf.DescriptorProtos.EnumValueOptions options_ = com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.EnumValueOptions, com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder, com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder> optionsBuilder_;
+      public boolean hasOptions() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public com.google.protobuf.DescriptorProtos.EnumValueOptions getOptions() {
+        if (optionsBuilder_ == null) {
+          return options_;
+        } else {
+          return optionsBuilder_.getMessage();
+        }
+      }
+      public Builder setOptions(com.google.protobuf.DescriptorProtos.EnumValueOptions value) {
+        if (optionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          options_ = value;
+          onChanged();
+        } else {
+          optionsBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000004;
+        return this;
+      }
+      public Builder setOptions(
+          com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder builderForValue) {
+        if (optionsBuilder_ == null) {
+          options_ = builderForValue.build();
+          onChanged();
+        } else {
+          optionsBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000004;
+        return this;
+      }
+      public Builder mergeOptions(com.google.protobuf.DescriptorProtos.EnumValueOptions value) {
+        if (optionsBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) == 0x00000004) &&
+              options_ != com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance()) {
+            options_ =
+              com.google.protobuf.DescriptorProtos.EnumValueOptions.newBuilder(options_).mergeFrom(value).buildPartial();
+          } else {
+            options_ = value;
+          }
+          onChanged();
+        } else {
+          optionsBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000004;
+        return this;
+      }
+      public Builder clearOptions() {
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
+          onChanged();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000004);
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder getOptionsBuilder() {
+        bitField0_ |= 0x00000004;
+        onChanged();
+        return getOptionsFieldBuilder().getBuilder();
+      }
+      public com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder getOptionsOrBuilder() {
+        if (optionsBuilder_ != null) {
+          return optionsBuilder_.getMessageOrBuilder();
+        } else {
+          return options_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.EnumValueOptions, com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder, com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder> 
+          getOptionsFieldBuilder() {
+        if (optionsBuilder_ == null) {
+          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.google.protobuf.DescriptorProtos.EnumValueOptions, com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder, com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder>(
+                  options_,
+                  getParentForChildren(),
+                  isClean());
+          options_ = null;
+        }
+        return optionsBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.EnumValueDescriptorProto)
+    }
+    
+    static {
+      defaultInstance = new EnumValueDescriptorProto(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.EnumValueDescriptorProto)
+  }
+  
+  public interface ServiceDescriptorProtoOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional string name = 1;
+    boolean hasName();
+    String getName();
+    
+    // repeated .google.protobuf.MethodDescriptorProto method = 2;
+    java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> 
+        getMethodList();
+    com.google.protobuf.DescriptorProtos.MethodDescriptorProto getMethod(int index);
+    int getMethodCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder> 
+        getMethodOrBuilderList();
+    com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder getMethodOrBuilder(
+        int index);
+    
+    // optional .google.protobuf.ServiceOptions options = 3;
+    boolean hasOptions();
+    com.google.protobuf.DescriptorProtos.ServiceOptions getOptions();
+    com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder getOptionsOrBuilder();
+  }
+  public static final class ServiceDescriptorProto extends
+      com.google.protobuf.GeneratedMessage
+      implements ServiceDescriptorProtoOrBuilder {
+    // Use ServiceDescriptorProto.newBuilder() to construct.
+    private ServiceDescriptorProto(Builder builder) {
+      super(builder);
+    }
+    private ServiceDescriptorProto(boolean noInit) {}
+    
+    private static final ServiceDescriptorProto defaultInstance;
+    public static ServiceDescriptorProto getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public ServiceDescriptorProto getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional string name = 1;
+    public static final int NAME_FIELD_NUMBER = 1;
+    private java.lang.Object name_;
+    public boolean hasName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          name_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // repeated .google.protobuf.MethodDescriptorProto method = 2;
+    public static final int METHOD_FIELD_NUMBER = 2;
+    private java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> method_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> getMethodList() {
+      return method_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder> 
+        getMethodOrBuilderList() {
+      return method_;
+    }
+    public int getMethodCount() {
+      return method_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.MethodDescriptorProto getMethod(int index) {
+      return method_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder getMethodOrBuilder(
+        int index) {
+      return method_.get(index);
+    }
+    
+    // optional .google.protobuf.ServiceOptions options = 3;
+    public static final int OPTIONS_FIELD_NUMBER = 3;
+    private com.google.protobuf.DescriptorProtos.ServiceOptions options_;
+    public boolean hasOptions() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public com.google.protobuf.DescriptorProtos.ServiceOptions getOptions() {
+      return options_;
+    }
+    public com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder getOptionsOrBuilder() {
+      return options_;
+    }
+    
+    private void initFields() {
+      name_ = "";
+      method_ = java.util.Collections.emptyList();
+      options_ = com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      for (int i = 0; i < getMethodCount(); i++) {
+        if (!getMethod(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (hasOptions()) {
+        if (!getOptions().isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getNameBytes());
+      }
+      for (int i = 0; i < method_.size(); i++) {
+        output.writeMessage(2, method_.get(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeMessage(3, options_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getNameBytes());
+      }
+      for (int i = 0; i < method_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, method_.get(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, options_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.ServiceDescriptorProto prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.google.protobuf.DescriptorProtos.ServiceDescriptorProtoOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getMethodFieldBuilder();
+          getOptionsFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (methodBuilder_ == null) {
+          method_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          methodBuilder_.clear();
+        }
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000004);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto build() {
+        com.google.protobuf.DescriptorProtos.ServiceDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.ServiceDescriptorProto buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.ServiceDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.ServiceDescriptorProto buildPartial() {
+        com.google.protobuf.DescriptorProtos.ServiceDescriptorProto result = new com.google.protobuf.DescriptorProtos.ServiceDescriptorProto(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.name_ = name_;
+        if (methodBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) == 0x00000002)) {
+            method_ = java.util.Collections.unmodifiableList(method_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.method_ = method_;
+        } else {
+          result.method_ = methodBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        if (optionsBuilder_ == null) {
+          result.options_ = options_;
+        } else {
+          result.options_ = optionsBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.ServiceDescriptorProto) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.ServiceDescriptorProto)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.ServiceDescriptorProto other) {
+        if (other == com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.getDefaultInstance()) return this;
+        if (other.hasName()) {
+          setName(other.getName());
+        }
+        if (methodBuilder_ == null) {
+          if (!other.method_.isEmpty()) {
+            if (method_.isEmpty()) {
+              method_ = other.method_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureMethodIsMutable();
+              method_.addAll(other.method_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.method_.isEmpty()) {
+            if (methodBuilder_.isEmpty()) {
+              methodBuilder_.dispose();
+              methodBuilder_ = null;
+              method_ = other.method_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              methodBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getMethodFieldBuilder() : null;
+            } else {
+              methodBuilder_.addAllMessages(other.method_);
+            }
+          }
+        }
+        if (other.hasOptions()) {
+          mergeOptions(other.getOptions());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        for (int i = 0; i < getMethodCount(); i++) {
+          if (!getMethod(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (hasOptions()) {
+          if (!getOptions().isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              name_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder subBuilder = com.google.protobuf.DescriptorProtos.MethodDescriptorProto.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addMethod(subBuilder.buildPartial());
+              break;
+            }
+            case 26: {
+              com.google.protobuf.DescriptorProtos.ServiceOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.ServiceOptions.newBuilder();
+              if (hasOptions()) {
+                subBuilder.mergeFrom(getOptions());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setOptions(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional string name = 1;
+      private java.lang.Object name_ = "";
+      public boolean hasName() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearName() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      void setName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+      }
+      
+      // repeated .google.protobuf.MethodDescriptorProto method = 2;
+      private java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> method_ =
+        java.util.Collections.emptyList();
+      private void ensureMethodIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          method_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.MethodDescriptorProto>(method_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.MethodDescriptorProto, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder> methodBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto> getMethodList() {
+        if (methodBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(method_);
+        } else {
+          return methodBuilder_.getMessageList();
+        }
+      }
+      public int getMethodCount() {
+        if (methodBuilder_ == null) {
+          return method_.size();
+        } else {
+          return methodBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto getMethod(int index) {
+        if (methodBuilder_ == null) {
+          return method_.get(index);
+        } else {
+          return methodBuilder_.getMessage(index);
+        }
+      }
+      public Builder setMethod(
+          int index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto value) {
+        if (methodBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureMethodIsMutable();
+          method_.set(index, value);
+          onChanged();
+        } else {
+          methodBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setMethod(
+          int index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {
+        if (methodBuilder_ == null) {
+          ensureMethodIsMutable();
+          method_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          methodBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addMethod(com.google.protobuf.DescriptorProtos.MethodDescriptorProto value) {
+        if (methodBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureMethodIsMutable();
+          method_.add(value);
+          onChanged();
+        } else {
+          methodBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addMethod(
+          int index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto value) {
+        if (methodBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureMethodIsMutable();
+          method_.add(index, value);
+          onChanged();
+        } else {
+          methodBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addMethod(
+          com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {
+        if (methodBuilder_ == null) {
+          ensureMethodIsMutable();
+          method_.add(builderForValue.build());
+          onChanged();
+        } else {
+          methodBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addMethod(
+          int index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {
+        if (methodBuilder_ == null) {
+          ensureMethodIsMutable();
+          method_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          methodBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllMethod(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.MethodDescriptorProto> values) {
+        if (methodBuilder_ == null) {
+          ensureMethodIsMutable();
+          super.addAll(values, method_);
+          onChanged();
+        } else {
+          methodBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearMethod() {
+        if (methodBuilder_ == null) {
+          method_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          methodBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeMethod(int index) {
+        if (methodBuilder_ == null) {
+          ensureMethodIsMutable();
+          method_.remove(index);
+          onChanged();
+        } else {
+          methodBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder getMethodBuilder(
+          int index) {
+        return getMethodFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder getMethodOrBuilder(
+          int index) {
+        if (methodBuilder_ == null) {
+          return method_.get(index);  } else {
+          return methodBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder> 
+           getMethodOrBuilderList() {
+        if (methodBuilder_ != null) {
+          return methodBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(method_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder addMethodBuilder() {
+        return getMethodFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder addMethodBuilder(
+          int index) {
+        return getMethodFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder> 
+           getMethodBuilderList() {
+        return getMethodFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.MethodDescriptorProto, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder> 
+          getMethodFieldBuilder() {
+        if (methodBuilder_ == null) {
+          methodBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.MethodDescriptorProto, com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder, com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder>(
+                  method_,
+                  ((bitField0_ & 0x00000002) == 0x00000002),
+                  getParentForChildren(),
+                  isClean());
+          method_ = null;
+        }
+        return methodBuilder_;
+      }
+      
+      // optional .google.protobuf.ServiceOptions options = 3;
+      private com.google.protobuf.DescriptorProtos.ServiceOptions options_ = com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.ServiceOptions, com.google.protobuf.DescriptorProtos.ServiceOptions.Builder, com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder> optionsBuilder_;
+      public boolean hasOptions() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public com.google.protobuf.DescriptorProtos.ServiceOptions getOptions() {
+        if (optionsBuilder_ == null) {
+          return options_;
+        } else {
+          return optionsBuilder_.getMessage();
+        }
+      }
+      public Builder setOptions(com.google.protobuf.DescriptorProtos.ServiceOptions value) {
+        if (optionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          options_ = value;
+          onChanged();
+        } else {
+          optionsBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000004;
+        return this;
+      }
+      public Builder setOptions(
+          com.google.protobuf.DescriptorProtos.ServiceOptions.Builder builderForValue) {
+        if (optionsBuilder_ == null) {
+          options_ = builderForValue.build();
+          onChanged();
+        } else {
+          optionsBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000004;
+        return this;
+      }
+      public Builder mergeOptions(com.google.protobuf.DescriptorProtos.ServiceOptions value) {
+        if (optionsBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) == 0x00000004) &&
+              options_ != com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance()) {
+            options_ =
+              com.google.protobuf.DescriptorProtos.ServiceOptions.newBuilder(options_).mergeFrom(value).buildPartial();
+          } else {
+            options_ = value;
+          }
+          onChanged();
+        } else {
+          optionsBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000004;
+        return this;
+      }
+      public Builder clearOptions() {
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance();
+          onChanged();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000004);
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.ServiceOptions.Builder getOptionsBuilder() {
+        bitField0_ |= 0x00000004;
+        onChanged();
+        return getOptionsFieldBuilder().getBuilder();
+      }
+      public com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder getOptionsOrBuilder() {
+        if (optionsBuilder_ != null) {
+          return optionsBuilder_.getMessageOrBuilder();
+        } else {
+          return options_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.ServiceOptions, com.google.protobuf.DescriptorProtos.ServiceOptions.Builder, com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder> 
+          getOptionsFieldBuilder() {
+        if (optionsBuilder_ == null) {
+          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.google.protobuf.DescriptorProtos.ServiceOptions, com.google.protobuf.DescriptorProtos.ServiceOptions.Builder, com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder>(
+                  options_,
+                  getParentForChildren(),
+                  isClean());
+          options_ = null;
+        }
+        return optionsBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.ServiceDescriptorProto)
+    }
+    
+    static {
+      defaultInstance = new ServiceDescriptorProto(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.ServiceDescriptorProto)
+  }
+  
+  public interface MethodDescriptorProtoOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // optional string name = 1;
+    boolean hasName();
+    String getName();
+    
+    // optional string input_type = 2;
+    boolean hasInputType();
+    String getInputType();
+    
+    // optional string output_type = 3;
+    boolean hasOutputType();
+    String getOutputType();
+    
+    // optional .google.protobuf.MethodOptions options = 4;
+    boolean hasOptions();
+    com.google.protobuf.DescriptorProtos.MethodOptions getOptions();
+    com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder getOptionsOrBuilder();
+  }
+  public static final class MethodDescriptorProto extends
+      com.google.protobuf.GeneratedMessage
+      implements MethodDescriptorProtoOrBuilder {
+    // Use MethodDescriptorProto.newBuilder() to construct.
+    private MethodDescriptorProto(Builder builder) {
+      super(builder);
+    }
+    private MethodDescriptorProto(boolean noInit) {}
+    
+    private static final MethodDescriptorProto defaultInstance;
+    public static MethodDescriptorProto getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public MethodDescriptorProto getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional string name = 1;
+    public static final int NAME_FIELD_NUMBER = 1;
+    private java.lang.Object name_;
+    public boolean hasName() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getName() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          name_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getNameBytes() {
+      java.lang.Object ref = name_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        name_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional string input_type = 2;
+    public static final int INPUT_TYPE_FIELD_NUMBER = 2;
+    private java.lang.Object inputType_;
+    public boolean hasInputType() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public String getInputType() {
+      java.lang.Object ref = inputType_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          inputType_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getInputTypeBytes() {
+      java.lang.Object ref = inputType_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        inputType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional string output_type = 3;
+    public static final int OUTPUT_TYPE_FIELD_NUMBER = 3;
+    private java.lang.Object outputType_;
+    public boolean hasOutputType() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public String getOutputType() {
+      java.lang.Object ref = outputType_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          outputType_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getOutputTypeBytes() {
+      java.lang.Object ref = outputType_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        outputType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional .google.protobuf.MethodOptions options = 4;
+    public static final int OPTIONS_FIELD_NUMBER = 4;
+    private com.google.protobuf.DescriptorProtos.MethodOptions options_;
+    public boolean hasOptions() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public com.google.protobuf.DescriptorProtos.MethodOptions getOptions() {
+      return options_;
+    }
+    public com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder getOptionsOrBuilder() {
+      return options_;
+    }
+    
+    private void initFields() {
+      name_ = "";
+      inputType_ = "";
+      outputType_ = "";
+      options_ = com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (hasOptions()) {
+        if (!getOptions().isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBytes(2, getInputTypeBytes());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBytes(3, getOutputTypeBytes());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeMessage(4, options_);
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getNameBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(2, getInputTypeBytes());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(3, getOutputTypeBytes());
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, options_);
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodDescriptorProto parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.MethodDescriptorProto prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.google.protobuf.DescriptorProtos.MethodDescriptorProtoOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.MethodDescriptorProto.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getOptionsFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        inputType_ = "";
+        bitField0_ = (bitField0_ & ~0x00000002);
+        outputType_ = "";
+        bitField0_ = (bitField0_ & ~0x00000004);
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000008);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto build() {
+        com.google.protobuf.DescriptorProtos.MethodDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.MethodDescriptorProto buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.MethodDescriptorProto result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.MethodDescriptorProto buildPartial() {
+        com.google.protobuf.DescriptorProtos.MethodDescriptorProto result = new com.google.protobuf.DescriptorProtos.MethodDescriptorProto(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.name_ = name_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.inputType_ = inputType_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.outputType_ = outputType_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        if (optionsBuilder_ == null) {
+          result.options_ = options_;
+        } else {
+          result.options_ = optionsBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.MethodDescriptorProto) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.MethodDescriptorProto)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.MethodDescriptorProto other) {
+        if (other == com.google.protobuf.DescriptorProtos.MethodDescriptorProto.getDefaultInstance()) return this;
+        if (other.hasName()) {
+          setName(other.getName());
+        }
+        if (other.hasInputType()) {
+          setInputType(other.getInputType());
+        }
+        if (other.hasOutputType()) {
+          setOutputType(other.getOutputType());
+        }
+        if (other.hasOptions()) {
+          mergeOptions(other.getOptions());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (hasOptions()) {
+          if (!getOptions().isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              name_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              bitField0_ |= 0x00000002;
+              inputType_ = input.readBytes();
+              break;
+            }
+            case 26: {
+              bitField0_ |= 0x00000004;
+              outputType_ = input.readBytes();
+              break;
+            }
+            case 34: {
+              com.google.protobuf.DescriptorProtos.MethodOptions.Builder subBuilder = com.google.protobuf.DescriptorProtos.MethodOptions.newBuilder();
+              if (hasOptions()) {
+                subBuilder.mergeFrom(getOptions());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setOptions(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional string name = 1;
+      private java.lang.Object name_ = "";
+      public boolean hasName() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getName() {
+        java.lang.Object ref = name_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          name_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setName(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearName() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      void setName(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        name_ = value;
+        onChanged();
+      }
+      
+      // optional string input_type = 2;
+      private java.lang.Object inputType_ = "";
+      public boolean hasInputType() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public String getInputType() {
+        java.lang.Object ref = inputType_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          inputType_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setInputType(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
+        inputType_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearInputType() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        inputType_ = getDefaultInstance().getInputType();
+        onChanged();
+        return this;
+      }
+      void setInputType(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000002;
+        inputType_ = value;
+        onChanged();
+      }
+      
+      // optional string output_type = 3;
+      private java.lang.Object outputType_ = "";
+      public boolean hasOutputType() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public String getOutputType() {
+        java.lang.Object ref = outputType_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          outputType_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setOutputType(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000004;
+        outputType_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearOutputType() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        outputType_ = getDefaultInstance().getOutputType();
+        onChanged();
+        return this;
+      }
+      void setOutputType(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000004;
+        outputType_ = value;
+        onChanged();
+      }
+      
+      // optional .google.protobuf.MethodOptions options = 4;
+      private com.google.protobuf.DescriptorProtos.MethodOptions options_ = com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.MethodOptions, com.google.protobuf.DescriptorProtos.MethodOptions.Builder, com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder> optionsBuilder_;
+      public boolean hasOptions() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public com.google.protobuf.DescriptorProtos.MethodOptions getOptions() {
+        if (optionsBuilder_ == null) {
+          return options_;
+        } else {
+          return optionsBuilder_.getMessage();
+        }
+      }
+      public Builder setOptions(com.google.protobuf.DescriptorProtos.MethodOptions value) {
+        if (optionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          options_ = value;
+          onChanged();
+        } else {
+          optionsBuilder_.setMessage(value);
+        }
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder setOptions(
+          com.google.protobuf.DescriptorProtos.MethodOptions.Builder builderForValue) {
+        if (optionsBuilder_ == null) {
+          options_ = builderForValue.build();
+          onChanged();
+        } else {
+          optionsBuilder_.setMessage(builderForValue.build());
+        }
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder mergeOptions(com.google.protobuf.DescriptorProtos.MethodOptions value) {
+        if (optionsBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) == 0x00000008) &&
+              options_ != com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance()) {
+            options_ =
+              com.google.protobuf.DescriptorProtos.MethodOptions.newBuilder(options_).mergeFrom(value).buildPartial();
+          } else {
+            options_ = value;
+          }
+          onChanged();
+        } else {
+          optionsBuilder_.mergeFrom(value);
+        }
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder clearOptions() {
+        if (optionsBuilder_ == null) {
+          options_ = com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
+          onChanged();
+        } else {
+          optionsBuilder_.clear();
+        }
+        bitField0_ = (bitField0_ & ~0x00000008);
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.MethodOptions.Builder getOptionsBuilder() {
+        bitField0_ |= 0x00000008;
+        onChanged();
+        return getOptionsFieldBuilder().getBuilder();
+      }
+      public com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder getOptionsOrBuilder() {
+        if (optionsBuilder_ != null) {
+          return optionsBuilder_.getMessageOrBuilder();
+        } else {
+          return options_;
+        }
+      }
+      private com.google.protobuf.SingleFieldBuilder<
+          com.google.protobuf.DescriptorProtos.MethodOptions, com.google.protobuf.DescriptorProtos.MethodOptions.Builder, com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder> 
+          getOptionsFieldBuilder() {
+        if (optionsBuilder_ == null) {
+          optionsBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+              com.google.protobuf.DescriptorProtos.MethodOptions, com.google.protobuf.DescriptorProtos.MethodOptions.Builder, com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder>(
+                  options_,
+                  getParentForChildren(),
+                  isClean());
+          options_ = null;
+        }
+        return optionsBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.MethodDescriptorProto)
+    }
+    
+    static {
+      defaultInstance = new MethodDescriptorProto(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.MethodDescriptorProto)
+  }
+  
+  public interface FileOptionsOrBuilder extends
+      com.google.protobuf.GeneratedMessage.
+          ExtendableMessageOrBuilder<FileOptions> {
+    
+    // optional string java_package = 1;
+    boolean hasJavaPackage();
+    String getJavaPackage();
+    
+    // optional string java_outer_classname = 8;
+    boolean hasJavaOuterClassname();
+    String getJavaOuterClassname();
+    
+    // optional bool java_multiple_files = 10 [default = false];
+    boolean hasJavaMultipleFiles();
+    boolean getJavaMultipleFiles();
+    
+    // optional bool java_generate_equals_and_hash = 20 [default = false];
+    boolean hasJavaGenerateEqualsAndHash();
+    boolean getJavaGenerateEqualsAndHash();
+    
+    // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
+    boolean hasOptimizeFor();
+    com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode getOptimizeFor();
+    
+    // optional bool cc_generic_services = 16 [default = false];
+    boolean hasCcGenericServices();
+    boolean getCcGenericServices();
+    
+    // optional bool java_generic_services = 17 [default = false];
+    boolean hasJavaGenericServices();
+    boolean getJavaGenericServices();
+    
+    // optional bool py_generic_services = 18 [default = false];
+    boolean hasPyGenericServices();
+    boolean getPyGenericServices();
+    
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
+        getUninterpretedOptionList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
+    int getUninterpretedOptionCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index);
+  }
+  public static final class FileOptions extends
+      com.google.protobuf.GeneratedMessage.ExtendableMessage<
+        FileOptions> implements FileOptionsOrBuilder {
+    // Use FileOptions.newBuilder() to construct.
+    private FileOptions(Builder builder) {
+      super(builder);
+    }
+    private FileOptions(boolean noInit) {}
+    
+    private static final FileOptions defaultInstance;
+    public static FileOptions getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public FileOptions getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_fieldAccessorTable;
+    }
+    
+    public enum OptimizeMode
+        implements com.google.protobuf.ProtocolMessageEnum {
+      SPEED(0, 1),
+      CODE_SIZE(1, 2),
+      LITE_RUNTIME(2, 3),
+      ;
+      
+      public static final int SPEED_VALUE = 1;
+      public static final int CODE_SIZE_VALUE = 2;
+      public static final int LITE_RUNTIME_VALUE = 3;
+      
+      
+      public final int getNumber() { return value; }
+      
+      public static OptimizeMode valueOf(int value) {
+        switch (value) {
+          case 1: return SPEED;
+          case 2: return CODE_SIZE;
+          case 3: return LITE_RUNTIME;
+          default: return null;
+        }
+      }
+      
+      public static com.google.protobuf.Internal.EnumLiteMap<OptimizeMode>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static com.google.protobuf.Internal.EnumLiteMap<OptimizeMode>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<OptimizeMode>() {
+              public OptimizeMode findValueByNumber(int number) {
+                return OptimizeMode.valueOf(number);
+              }
+            };
+      
+      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+          getValueDescriptor() {
+        return getDescriptor().getValues().get(index);
+      }
+      public final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptorForType() {
+        return getDescriptor();
+      }
+      public static final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.FileOptions.getDescriptor().getEnumTypes().get(0);
+      }
+      
+      private static final OptimizeMode[] VALUES = {
+        SPEED, CODE_SIZE, LITE_RUNTIME, 
+      };
+      
+      public static OptimizeMode valueOf(
+          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 index;
+      private final int value;
+      
+      private OptimizeMode(int index, int value) {
+        this.index = index;
+        this.value = value;
+      }
+      
+      // @@protoc_insertion_point(enum_scope:google.protobuf.FileOptions.OptimizeMode)
+    }
+    
+    private int bitField0_;
+    // optional string java_package = 1;
+    public static final int JAVA_PACKAGE_FIELD_NUMBER = 1;
+    private java.lang.Object javaPackage_;
+    public boolean hasJavaPackage() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getJavaPackage() {
+      java.lang.Object ref = javaPackage_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          javaPackage_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getJavaPackageBytes() {
+      java.lang.Object ref = javaPackage_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        javaPackage_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional string java_outer_classname = 8;
+    public static final int JAVA_OUTER_CLASSNAME_FIELD_NUMBER = 8;
+    private java.lang.Object javaOuterClassname_;
+    public boolean hasJavaOuterClassname() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public String getJavaOuterClassname() {
+      java.lang.Object ref = javaOuterClassname_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          javaOuterClassname_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getJavaOuterClassnameBytes() {
+      java.lang.Object ref = javaOuterClassname_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        javaOuterClassname_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional bool java_multiple_files = 10 [default = false];
+    public static final int JAVA_MULTIPLE_FILES_FIELD_NUMBER = 10;
+    private boolean javaMultipleFiles_;
+    public boolean hasJavaMultipleFiles() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public boolean getJavaMultipleFiles() {
+      return javaMultipleFiles_;
+    }
+    
+    // optional bool java_generate_equals_and_hash = 20 [default = false];
+    public static final int JAVA_GENERATE_EQUALS_AND_HASH_FIELD_NUMBER = 20;
+    private boolean javaGenerateEqualsAndHash_;
+    public boolean hasJavaGenerateEqualsAndHash() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public boolean getJavaGenerateEqualsAndHash() {
+      return javaGenerateEqualsAndHash_;
+    }
+    
+    // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
+    public static final int OPTIMIZE_FOR_FIELD_NUMBER = 9;
+    private com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode optimizeFor_;
+    public boolean hasOptimizeFor() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    public com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode getOptimizeFor() {
+      return optimizeFor_;
+    }
+    
+    // optional bool cc_generic_services = 16 [default = false];
+    public static final int CC_GENERIC_SERVICES_FIELD_NUMBER = 16;
+    private boolean ccGenericServices_;
+    public boolean hasCcGenericServices() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    public boolean getCcGenericServices() {
+      return ccGenericServices_;
+    }
+    
+    // optional bool java_generic_services = 17 [default = false];
+    public static final int JAVA_GENERIC_SERVICES_FIELD_NUMBER = 17;
+    private boolean javaGenericServices_;
+    public boolean hasJavaGenericServices() {
+      return ((bitField0_ & 0x00000040) == 0x00000040);
+    }
+    public boolean getJavaGenericServices() {
+      return javaGenericServices_;
+    }
+    
+    // optional bool py_generic_services = 18 [default = false];
+    public static final int PY_GENERIC_SERVICES_FIELD_NUMBER = 18;
+    private boolean pyGenericServices_;
+    public boolean hasPyGenericServices() {
+      return ((bitField0_ & 0x00000080) == 0x00000080);
+    }
+    public boolean getPyGenericServices() {
+      return pyGenericServices_;
+    }
+    
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
+    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+      return uninterpretedOption_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList() {
+      return uninterpretedOption_;
+    }
+    public int getUninterpretedOptionCount() {
+      return uninterpretedOption_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+      return uninterpretedOption_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index) {
+      return uninterpretedOption_.get(index);
+    }
+    
+    private void initFields() {
+      javaPackage_ = "";
+      javaOuterClassname_ = "";
+      javaMultipleFiles_ = false;
+      javaGenerateEqualsAndHash_ = false;
+      optimizeFor_ = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.SPEED;
+      ccGenericServices_ = false;
+      javaGenericServices_ = false;
+      pyGenericServices_ = false;
+      uninterpretedOption_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+        if (!getUninterpretedOption(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (!extensionsAreInitialized()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      com.google.protobuf.GeneratedMessage
+        .ExtendableMessage<com.google.protobuf.DescriptorProtos.FileOptions>.ExtensionWriter extensionWriter =
+          newExtensionWriter();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getJavaPackageBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBytes(8, getJavaOuterClassnameBytes());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeEnum(9, optimizeFor_.getNumber());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBool(10, javaMultipleFiles_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeBool(16, ccGenericServices_);
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        output.writeBool(17, javaGenericServices_);
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        output.writeBool(18, pyGenericServices_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBool(20, javaGenerateEqualsAndHash_);
+      }
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        output.writeMessage(999, uninterpretedOption_.get(i));
+      }
+      extensionWriter.writeUntil(536870912, output);
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getJavaPackageBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(8, getJavaOuterClassnameBytes());
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(9, optimizeFor_.getNumber());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(10, javaMultipleFiles_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(16, ccGenericServices_);
+      }
+      if (((bitField0_ & 0x00000040) == 0x00000040)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(17, javaGenericServices_);
+      }
+      if (((bitField0_ & 0x00000080) == 0x00000080)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(18, pyGenericServices_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(20, javaGenerateEqualsAndHash_);
+      }
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(999, uninterpretedOption_.get(i));
+      }
+      size += extensionsSerializedSize();
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FileOptions parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FileOptions prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
+          com.google.protobuf.DescriptorProtos.FileOptions, Builder> implements com.google.protobuf.DescriptorProtos.FileOptionsOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FileOptions_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.FileOptions.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getUninterpretedOptionFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        javaPackage_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        javaOuterClassname_ = "";
+        bitField0_ = (bitField0_ & ~0x00000002);
+        javaMultipleFiles_ = false;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        javaGenerateEqualsAndHash_ = false;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        optimizeFor_ = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.SPEED;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        ccGenericServices_ = false;
+        bitField0_ = (bitField0_ & ~0x00000020);
+        javaGenericServices_ = false;
+        bitField0_ = (bitField0_ & ~0x00000040);
+        pyGenericServices_ = false;
+        bitField0_ = (bitField0_ & ~0x00000080);
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000100);
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.FileOptions.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FileOptions getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FileOptions build() {
+        com.google.protobuf.DescriptorProtos.FileOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.FileOptions buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.FileOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FileOptions buildPartial() {
+        com.google.protobuf.DescriptorProtos.FileOptions result = new com.google.protobuf.DescriptorProtos.FileOptions(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.javaPackage_ = javaPackage_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.javaOuterClassname_ = javaOuterClassname_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.javaMultipleFiles_ = javaMultipleFiles_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.javaGenerateEqualsAndHash_ = javaGenerateEqualsAndHash_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.optimizeFor_ = optimizeFor_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.ccGenericServices_ = ccGenericServices_;
+        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
+          to_bitField0_ |= 0x00000040;
+        }
+        result.javaGenericServices_ = javaGenericServices_;
+        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
+          to_bitField0_ |= 0x00000080;
+        }
+        result.pyGenericServices_ = pyGenericServices_;
+        if (uninterpretedOptionBuilder_ == null) {
+          if (((bitField0_ & 0x00000100) == 0x00000100)) {
+            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+            bitField0_ = (bitField0_ & ~0x00000100);
+          }
+          result.uninterpretedOption_ = uninterpretedOption_;
+        } else {
+          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.FileOptions) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.FileOptions)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FileOptions other) {
+        if (other == com.google.protobuf.DescriptorProtos.FileOptions.getDefaultInstance()) return this;
+        if (other.hasJavaPackage()) {
+          setJavaPackage(other.getJavaPackage());
+        }
+        if (other.hasJavaOuterClassname()) {
+          setJavaOuterClassname(other.getJavaOuterClassname());
+        }
+        if (other.hasJavaMultipleFiles()) {
+          setJavaMultipleFiles(other.getJavaMultipleFiles());
+        }
+        if (other.hasJavaGenerateEqualsAndHash()) {
+          setJavaGenerateEqualsAndHash(other.getJavaGenerateEqualsAndHash());
+        }
+        if (other.hasOptimizeFor()) {
+          setOptimizeFor(other.getOptimizeFor());
+        }
+        if (other.hasCcGenericServices()) {
+          setCcGenericServices(other.getCcGenericServices());
+        }
+        if (other.hasJavaGenericServices()) {
+          setJavaGenericServices(other.getJavaGenericServices());
+        }
+        if (other.hasPyGenericServices()) {
+          setPyGenericServices(other.getPyGenericServices());
+        }
+        if (uninterpretedOptionBuilder_ == null) {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOption_.isEmpty()) {
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000100);
+            } else {
+              ensureUninterpretedOptionIsMutable();
+              uninterpretedOption_.addAll(other.uninterpretedOption_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOptionBuilder_.isEmpty()) {
+              uninterpretedOptionBuilder_.dispose();
+              uninterpretedOptionBuilder_ = null;
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000100);
+              uninterpretedOptionBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getUninterpretedOptionFieldBuilder() : null;
+            } else {
+              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
+            }
+          }
+        }
+        this.mergeExtensionFields(other);
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+          if (!getUninterpretedOption(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (!extensionsAreInitialized()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              javaPackage_ = input.readBytes();
+              break;
+            }
+            case 66: {
+              bitField0_ |= 0x00000002;
+              javaOuterClassname_ = input.readBytes();
+              break;
+            }
+            case 72: {
+              int rawValue = input.readEnum();
+              com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode value = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(9, rawValue);
+              } else {
+                bitField0_ |= 0x00000010;
+                optimizeFor_ = value;
+              }
+              break;
+            }
+            case 80: {
+              bitField0_ |= 0x00000004;
+              javaMultipleFiles_ = input.readBool();
+              break;
+            }
+            case 128: {
+              bitField0_ |= 0x00000020;
+              ccGenericServices_ = input.readBool();
+              break;
+            }
+            case 136: {
+              bitField0_ |= 0x00000040;
+              javaGenericServices_ = input.readBool();
+              break;
+            }
+            case 144: {
+              bitField0_ |= 0x00000080;
+              pyGenericServices_ = input.readBool();
+              break;
+            }
+            case 160: {
+              bitField0_ |= 0x00000008;
+              javaGenerateEqualsAndHash_ = input.readBool();
+              break;
+            }
+            case 7994: {
+              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addUninterpretedOption(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional string java_package = 1;
+      private java.lang.Object javaPackage_ = "";
+      public boolean hasJavaPackage() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getJavaPackage() {
+        java.lang.Object ref = javaPackage_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          javaPackage_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setJavaPackage(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        javaPackage_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearJavaPackage() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        javaPackage_ = getDefaultInstance().getJavaPackage();
+        onChanged();
+        return this;
+      }
+      void setJavaPackage(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        javaPackage_ = value;
+        onChanged();
+      }
+      
+      // optional string java_outer_classname = 8;
+      private java.lang.Object javaOuterClassname_ = "";
+      public boolean hasJavaOuterClassname() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public String getJavaOuterClassname() {
+        java.lang.Object ref = javaOuterClassname_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          javaOuterClassname_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setJavaOuterClassname(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
+        javaOuterClassname_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearJavaOuterClassname() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        javaOuterClassname_ = getDefaultInstance().getJavaOuterClassname();
+        onChanged();
+        return this;
+      }
+      void setJavaOuterClassname(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000002;
+        javaOuterClassname_ = value;
+        onChanged();
+      }
+      
+      // optional bool java_multiple_files = 10 [default = false];
+      private boolean javaMultipleFiles_ ;
+      public boolean hasJavaMultipleFiles() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public boolean getJavaMultipleFiles() {
+        return javaMultipleFiles_;
+      }
+      public Builder setJavaMultipleFiles(boolean value) {
+        bitField0_ |= 0x00000004;
+        javaMultipleFiles_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearJavaMultipleFiles() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        javaMultipleFiles_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // optional bool java_generate_equals_and_hash = 20 [default = false];
+      private boolean javaGenerateEqualsAndHash_ ;
+      public boolean hasJavaGenerateEqualsAndHash() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public boolean getJavaGenerateEqualsAndHash() {
+        return javaGenerateEqualsAndHash_;
+      }
+      public Builder setJavaGenerateEqualsAndHash(boolean value) {
+        bitField0_ |= 0x00000008;
+        javaGenerateEqualsAndHash_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearJavaGenerateEqualsAndHash() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        javaGenerateEqualsAndHash_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
+      private com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode optimizeFor_ = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.SPEED;
+      public boolean hasOptimizeFor() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode getOptimizeFor() {
+        return optimizeFor_;
+      }
+      public Builder setOptimizeFor(com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000010;
+        optimizeFor_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearOptimizeFor() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        optimizeFor_ = com.google.protobuf.DescriptorProtos.FileOptions.OptimizeMode.SPEED;
+        onChanged();
+        return this;
+      }
+      
+      // optional bool cc_generic_services = 16 [default = false];
+      private boolean ccGenericServices_ ;
+      public boolean hasCcGenericServices() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public boolean getCcGenericServices() {
+        return ccGenericServices_;
+      }
+      public Builder setCcGenericServices(boolean value) {
+        bitField0_ |= 0x00000020;
+        ccGenericServices_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearCcGenericServices() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        ccGenericServices_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // optional bool java_generic_services = 17 [default = false];
+      private boolean javaGenericServices_ ;
+      public boolean hasJavaGenericServices() {
+        return ((bitField0_ & 0x00000040) == 0x00000040);
+      }
+      public boolean getJavaGenericServices() {
+        return javaGenericServices_;
+      }
+      public Builder setJavaGenericServices(boolean value) {
+        bitField0_ |= 0x00000040;
+        javaGenericServices_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearJavaGenericServices() {
+        bitField0_ = (bitField0_ & ~0x00000040);
+        javaGenericServices_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // optional bool py_generic_services = 18 [default = false];
+      private boolean pyGenericServices_ ;
+      public boolean hasPyGenericServices() {
+        return ((bitField0_ & 0x00000080) == 0x00000080);
+      }
+      public boolean getPyGenericServices() {
+        return pyGenericServices_;
+      }
+      public Builder setPyGenericServices(boolean value) {
+        bitField0_ |= 0x00000080;
+        pyGenericServices_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearPyGenericServices() {
+        bitField0_ = (bitField0_ & ~0x00000080);
+        pyGenericServices_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
+        java.util.Collections.emptyList();
+      private void ensureUninterpretedOptionIsMutable() {
+        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
+          uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>(uninterpretedOption_);
+          bitField0_ |= 0x00000100;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+        if (uninterpretedOptionBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(uninterpretedOption_);
+        } else {
+          return uninterpretedOptionBuilder_.getMessageList();
+        }
+      }
+      public int getUninterpretedOptionCount() {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.size();
+        } else {
+          return uninterpretedOptionBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.get(index);
+        } else {
+          return uninterpretedOptionBuilder_.getMessage(index);
+        }
+      }
+      public Builder setUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.set(index, value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(index, value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllUninterpretedOption(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          super.addAll(values, uninterpretedOption_);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearUninterpretedOption() {
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000100);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeUninterpretedOption(int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.remove(index);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
+          int index) {
+        return getUninterpretedOptionFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+          int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.get(index);  } else {
+          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+           getUninterpretedOptionOrBuilderList() {
+        if (uninterpretedOptionBuilder_ != null) {
+          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(uninterpretedOption_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
+        return getUninterpretedOptionFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
+          int index) {
+        return getUninterpretedOptionFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
+           getUninterpretedOptionBuilderList() {
+        return getUninterpretedOptionFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+          getUninterpretedOptionFieldBuilder() {
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder>(
+                  uninterpretedOption_,
+                  ((bitField0_ & 0x00000100) == 0x00000100),
+                  getParentForChildren(),
+                  isClean());
+          uninterpretedOption_ = null;
+        }
+        return uninterpretedOptionBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.FileOptions)
+    }
+    
+    static {
+      defaultInstance = new FileOptions(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.FileOptions)
+  }
+  
+  public interface MessageOptionsOrBuilder extends
+      com.google.protobuf.GeneratedMessage.
+          ExtendableMessageOrBuilder<MessageOptions> {
+    
+    // optional bool message_set_wire_format = 1 [default = false];
+    boolean hasMessageSetWireFormat();
+    boolean getMessageSetWireFormat();
+    
+    // optional bool no_standard_descriptor_accessor = 2 [default = false];
+    boolean hasNoStandardDescriptorAccessor();
+    boolean getNoStandardDescriptorAccessor();
+    
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
+        getUninterpretedOptionList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
+    int getUninterpretedOptionCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index);
+  }
+  public static final class MessageOptions extends
+      com.google.protobuf.GeneratedMessage.ExtendableMessage<
+        MessageOptions> implements MessageOptionsOrBuilder {
+    // Use MessageOptions.newBuilder() to construct.
+    private MessageOptions(Builder builder) {
+      super(builder);
+    }
+    private MessageOptions(boolean noInit) {}
+    
+    private static final MessageOptions defaultInstance;
+    public static MessageOptions getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public MessageOptions getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_fieldAccessorTable;
+    }
+    
+    private int bitField0_;
+    // optional bool message_set_wire_format = 1 [default = false];
+    public static final int MESSAGE_SET_WIRE_FORMAT_FIELD_NUMBER = 1;
+    private boolean messageSetWireFormat_;
+    public boolean hasMessageSetWireFormat() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public boolean getMessageSetWireFormat() {
+      return messageSetWireFormat_;
+    }
+    
+    // optional bool no_standard_descriptor_accessor = 2 [default = false];
+    public static final int NO_STANDARD_DESCRIPTOR_ACCESSOR_FIELD_NUMBER = 2;
+    private boolean noStandardDescriptorAccessor_;
+    public boolean hasNoStandardDescriptorAccessor() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public boolean getNoStandardDescriptorAccessor() {
+      return noStandardDescriptorAccessor_;
+    }
+    
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
+    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+      return uninterpretedOption_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList() {
+      return uninterpretedOption_;
+    }
+    public int getUninterpretedOptionCount() {
+      return uninterpretedOption_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+      return uninterpretedOption_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index) {
+      return uninterpretedOption_.get(index);
+    }
+    
+    private void initFields() {
+      messageSetWireFormat_ = false;
+      noStandardDescriptorAccessor_ = false;
+      uninterpretedOption_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+        if (!getUninterpretedOption(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (!extensionsAreInitialized()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      com.google.protobuf.GeneratedMessage
+        .ExtendableMessage<com.google.protobuf.DescriptorProtos.MessageOptions>.ExtensionWriter extensionWriter =
+          newExtensionWriter();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBool(1, messageSetWireFormat_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBool(2, noStandardDescriptorAccessor_);
+      }
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        output.writeMessage(999, uninterpretedOption_.get(i));
+      }
+      extensionWriter.writeUntil(536870912, output);
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(1, messageSetWireFormat_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, noStandardDescriptorAccessor_);
+      }
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(999, uninterpretedOption_.get(i));
+      }
+      size += extensionsSerializedSize();
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MessageOptions parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.MessageOptions prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
+          com.google.protobuf.DescriptorProtos.MessageOptions, Builder> implements com.google.protobuf.DescriptorProtos.MessageOptionsOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MessageOptions_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.MessageOptions.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getUninterpretedOptionFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        messageSetWireFormat_ = false;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        noStandardDescriptorAccessor_ = false;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.MessageOptions.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.MessageOptions getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.MessageOptions build() {
+        com.google.protobuf.DescriptorProtos.MessageOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.MessageOptions buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.MessageOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.MessageOptions buildPartial() {
+        com.google.protobuf.DescriptorProtos.MessageOptions result = new com.google.protobuf.DescriptorProtos.MessageOptions(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.messageSetWireFormat_ = messageSetWireFormat_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.noStandardDescriptorAccessor_ = noStandardDescriptorAccessor_;
+        if (uninterpretedOptionBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) == 0x00000004)) {
+            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+            bitField0_ = (bitField0_ & ~0x00000004);
+          }
+          result.uninterpretedOption_ = uninterpretedOption_;
+        } else {
+          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.MessageOptions) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.MessageOptions)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.MessageOptions other) {
+        if (other == com.google.protobuf.DescriptorProtos.MessageOptions.getDefaultInstance()) return this;
+        if (other.hasMessageSetWireFormat()) {
+          setMessageSetWireFormat(other.getMessageSetWireFormat());
+        }
+        if (other.hasNoStandardDescriptorAccessor()) {
+          setNoStandardDescriptorAccessor(other.getNoStandardDescriptorAccessor());
+        }
+        if (uninterpretedOptionBuilder_ == null) {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOption_.isEmpty()) {
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+            } else {
+              ensureUninterpretedOptionIsMutable();
+              uninterpretedOption_.addAll(other.uninterpretedOption_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOptionBuilder_.isEmpty()) {
+              uninterpretedOptionBuilder_.dispose();
+              uninterpretedOptionBuilder_ = null;
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+              uninterpretedOptionBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getUninterpretedOptionFieldBuilder() : null;
+            } else {
+              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
+            }
+          }
+        }
+        this.mergeExtensionFields(other);
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+          if (!getUninterpretedOption(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (!extensionsAreInitialized()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              messageSetWireFormat_ = input.readBool();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              noStandardDescriptorAccessor_ = input.readBool();
+              break;
+            }
+            case 7994: {
+              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addUninterpretedOption(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional bool message_set_wire_format = 1 [default = false];
+      private boolean messageSetWireFormat_ ;
+      public boolean hasMessageSetWireFormat() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public boolean getMessageSetWireFormat() {
+        return messageSetWireFormat_;
+      }
+      public Builder setMessageSetWireFormat(boolean value) {
+        bitField0_ |= 0x00000001;
+        messageSetWireFormat_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearMessageSetWireFormat() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        messageSetWireFormat_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // optional bool no_standard_descriptor_accessor = 2 [default = false];
+      private boolean noStandardDescriptorAccessor_ ;
+      public boolean hasNoStandardDescriptorAccessor() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public boolean getNoStandardDescriptorAccessor() {
+        return noStandardDescriptorAccessor_;
+      }
+      public Builder setNoStandardDescriptorAccessor(boolean value) {
+        bitField0_ |= 0x00000002;
+        noStandardDescriptorAccessor_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearNoStandardDescriptorAccessor() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        noStandardDescriptorAccessor_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
+        java.util.Collections.emptyList();
+      private void ensureUninterpretedOptionIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>(uninterpretedOption_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+        if (uninterpretedOptionBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(uninterpretedOption_);
+        } else {
+          return uninterpretedOptionBuilder_.getMessageList();
+        }
+      }
+      public int getUninterpretedOptionCount() {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.size();
+        } else {
+          return uninterpretedOptionBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.get(index);
+        } else {
+          return uninterpretedOptionBuilder_.getMessage(index);
+        }
+      }
+      public Builder setUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.set(index, value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(index, value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllUninterpretedOption(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          super.addAll(values, uninterpretedOption_);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearUninterpretedOption() {
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeUninterpretedOption(int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.remove(index);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
+          int index) {
+        return getUninterpretedOptionFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+          int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.get(index);  } else {
+          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+           getUninterpretedOptionOrBuilderList() {
+        if (uninterpretedOptionBuilder_ != null) {
+          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(uninterpretedOption_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
+        return getUninterpretedOptionFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
+          int index) {
+        return getUninterpretedOptionFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
+           getUninterpretedOptionBuilderList() {
+        return getUninterpretedOptionFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+          getUninterpretedOptionFieldBuilder() {
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder>(
+                  uninterpretedOption_,
+                  ((bitField0_ & 0x00000004) == 0x00000004),
+                  getParentForChildren(),
+                  isClean());
+          uninterpretedOption_ = null;
+        }
+        return uninterpretedOptionBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.MessageOptions)
+    }
+    
+    static {
+      defaultInstance = new MessageOptions(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.MessageOptions)
+  }
+  
+  public interface FieldOptionsOrBuilder extends
+      com.google.protobuf.GeneratedMessage.
+          ExtendableMessageOrBuilder<FieldOptions> {
+    
+    // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];
+    boolean hasCtype();
+    com.google.protobuf.DescriptorProtos.FieldOptions.CType getCtype();
+    
+    // optional bool packed = 2;
+    boolean hasPacked();
+    boolean getPacked();
+    
+    // optional bool deprecated = 3 [default = false];
+    boolean hasDeprecated();
+    boolean getDeprecated();
+    
+    // optional string experimental_map_key = 9;
+    boolean hasExperimentalMapKey();
+    String getExperimentalMapKey();
+    
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
+        getUninterpretedOptionList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
+    int getUninterpretedOptionCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index);
+  }
+  public static final class FieldOptions extends
+      com.google.protobuf.GeneratedMessage.ExtendableMessage<
+        FieldOptions> implements FieldOptionsOrBuilder {
+    // Use FieldOptions.newBuilder() to construct.
+    private FieldOptions(Builder builder) {
+      super(builder);
+    }
+    private FieldOptions(boolean noInit) {}
+    
+    private static final FieldOptions defaultInstance;
+    public static FieldOptions getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public FieldOptions getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_fieldAccessorTable;
+    }
+    
+    public enum CType
+        implements com.google.protobuf.ProtocolMessageEnum {
+      STRING(0, 0),
+      CORD(1, 1),
+      STRING_PIECE(2, 2),
+      ;
+      
+      public static final int STRING_VALUE = 0;
+      public static final int CORD_VALUE = 1;
+      public static final int STRING_PIECE_VALUE = 2;
+      
+      
+      public final int getNumber() { return value; }
+      
+      public static CType valueOf(int value) {
+        switch (value) {
+          case 0: return STRING;
+          case 1: return CORD;
+          case 2: return STRING_PIECE;
+          default: return null;
+        }
+      }
+      
+      public static com.google.protobuf.Internal.EnumLiteMap<CType>
+          internalGetValueMap() {
+        return internalValueMap;
+      }
+      private static com.google.protobuf.Internal.EnumLiteMap<CType>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<CType>() {
+              public CType findValueByNumber(int number) {
+                return CType.valueOf(number);
+              }
+            };
+      
+      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+          getValueDescriptor() {
+        return getDescriptor().getValues().get(index);
+      }
+      public final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptorForType() {
+        return getDescriptor();
+      }
+      public static final com.google.protobuf.Descriptors.EnumDescriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.FieldOptions.getDescriptor().getEnumTypes().get(0);
+      }
+      
+      private static final CType[] VALUES = {
+        STRING, CORD, STRING_PIECE, 
+      };
+      
+      public static CType valueOf(
+          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 index;
+      private final int value;
+      
+      private CType(int index, int value) {
+        this.index = index;
+        this.value = value;
+      }
+      
+      // @@protoc_insertion_point(enum_scope:google.protobuf.FieldOptions.CType)
+    }
+    
+    private int bitField0_;
+    // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];
+    public static final int CTYPE_FIELD_NUMBER = 1;
+    private com.google.protobuf.DescriptorProtos.FieldOptions.CType ctype_;
+    public boolean hasCtype() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public com.google.protobuf.DescriptorProtos.FieldOptions.CType getCtype() {
+      return ctype_;
+    }
+    
+    // optional bool packed = 2;
+    public static final int PACKED_FIELD_NUMBER = 2;
+    private boolean packed_;
+    public boolean hasPacked() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public boolean getPacked() {
+      return packed_;
+    }
+    
+    // optional bool deprecated = 3 [default = false];
+    public static final int DEPRECATED_FIELD_NUMBER = 3;
+    private boolean deprecated_;
+    public boolean hasDeprecated() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public boolean getDeprecated() {
+      return deprecated_;
+    }
+    
+    // optional string experimental_map_key = 9;
+    public static final int EXPERIMENTAL_MAP_KEY_FIELD_NUMBER = 9;
+    private java.lang.Object experimentalMapKey_;
+    public boolean hasExperimentalMapKey() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public String getExperimentalMapKey() {
+      java.lang.Object ref = experimentalMapKey_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          experimentalMapKey_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getExperimentalMapKeyBytes() {
+      java.lang.Object ref = experimentalMapKey_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        experimentalMapKey_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
+    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+      return uninterpretedOption_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList() {
+      return uninterpretedOption_;
+    }
+    public int getUninterpretedOptionCount() {
+      return uninterpretedOption_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+      return uninterpretedOption_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index) {
+      return uninterpretedOption_.get(index);
+    }
+    
+    private void initFields() {
+      ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
+      packed_ = false;
+      deprecated_ = false;
+      experimentalMapKey_ = "";
+      uninterpretedOption_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+        if (!getUninterpretedOption(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (!extensionsAreInitialized()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      com.google.protobuf.GeneratedMessage
+        .ExtendableMessage<com.google.protobuf.DescriptorProtos.FieldOptions>.ExtensionWriter extensionWriter =
+          newExtensionWriter();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeEnum(1, ctype_.getNumber());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBool(2, packed_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBool(3, deprecated_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBytes(9, getExperimentalMapKeyBytes());
+      }
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        output.writeMessage(999, uninterpretedOption_.get(i));
+      }
+      extensionWriter.writeUntil(536870912, output);
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(1, ctype_.getNumber());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, packed_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(3, deprecated_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(9, getExperimentalMapKeyBytes());
+      }
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(999, uninterpretedOption_.get(i));
+      }
+      size += extensionsSerializedSize();
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.FieldOptions parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.FieldOptions prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
+          com.google.protobuf.DescriptorProtos.FieldOptions, Builder> implements com.google.protobuf.DescriptorProtos.FieldOptionsOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_FieldOptions_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.FieldOptions.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getUninterpretedOptionFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        packed_ = false;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        deprecated_ = false;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        experimentalMapKey_ = "";
+        bitField0_ = (bitField0_ & ~0x00000008);
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000010);
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.FieldOptions.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FieldOptions getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FieldOptions build() {
+        com.google.protobuf.DescriptorProtos.FieldOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.FieldOptions buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.FieldOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.FieldOptions buildPartial() {
+        com.google.protobuf.DescriptorProtos.FieldOptions result = new com.google.protobuf.DescriptorProtos.FieldOptions(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.ctype_ = ctype_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.packed_ = packed_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.deprecated_ = deprecated_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.experimentalMapKey_ = experimentalMapKey_;
+        if (uninterpretedOptionBuilder_ == null) {
+          if (((bitField0_ & 0x00000010) == 0x00000010)) {
+            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+            bitField0_ = (bitField0_ & ~0x00000010);
+          }
+          result.uninterpretedOption_ = uninterpretedOption_;
+        } else {
+          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
+        }
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.FieldOptions) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.FieldOptions)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.FieldOptions other) {
+        if (other == com.google.protobuf.DescriptorProtos.FieldOptions.getDefaultInstance()) return this;
+        if (other.hasCtype()) {
+          setCtype(other.getCtype());
+        }
+        if (other.hasPacked()) {
+          setPacked(other.getPacked());
+        }
+        if (other.hasDeprecated()) {
+          setDeprecated(other.getDeprecated());
+        }
+        if (other.hasExperimentalMapKey()) {
+          setExperimentalMapKey(other.getExperimentalMapKey());
+        }
+        if (uninterpretedOptionBuilder_ == null) {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOption_.isEmpty()) {
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000010);
+            } else {
+              ensureUninterpretedOptionIsMutable();
+              uninterpretedOption_.addAll(other.uninterpretedOption_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOptionBuilder_.isEmpty()) {
+              uninterpretedOptionBuilder_.dispose();
+              uninterpretedOptionBuilder_ = null;
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000010);
+              uninterpretedOptionBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getUninterpretedOptionFieldBuilder() : null;
+            } else {
+              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
+            }
+          }
+        }
+        this.mergeExtensionFields(other);
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+          if (!getUninterpretedOption(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (!extensionsAreInitialized()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              int rawValue = input.readEnum();
+              com.google.protobuf.DescriptorProtos.FieldOptions.CType value = com.google.protobuf.DescriptorProtos.FieldOptions.CType.valueOf(rawValue);
+              if (value == null) {
+                unknownFields.mergeVarintField(1, rawValue);
+              } else {
+                bitField0_ |= 0x00000001;
+                ctype_ = value;
+              }
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              packed_ = input.readBool();
+              break;
+            }
+            case 24: {
+              bitField0_ |= 0x00000004;
+              deprecated_ = input.readBool();
+              break;
+            }
+            case 74: {
+              bitField0_ |= 0x00000008;
+              experimentalMapKey_ = input.readBytes();
+              break;
+            }
+            case 7994: {
+              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addUninterpretedOption(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];
+      private com.google.protobuf.DescriptorProtos.FieldOptions.CType ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
+      public boolean hasCtype() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public com.google.protobuf.DescriptorProtos.FieldOptions.CType getCtype() {
+        return ctype_;
+      }
+      public Builder setCtype(com.google.protobuf.DescriptorProtos.FieldOptions.CType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bitField0_ |= 0x00000001;
+        ctype_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearCtype() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        ctype_ = com.google.protobuf.DescriptorProtos.FieldOptions.CType.STRING;
+        onChanged();
+        return this;
+      }
+      
+      // optional bool packed = 2;
+      private boolean packed_ ;
+      public boolean hasPacked() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public boolean getPacked() {
+        return packed_;
+      }
+      public Builder setPacked(boolean value) {
+        bitField0_ |= 0x00000002;
+        packed_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearPacked() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        packed_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // optional bool deprecated = 3 [default = false];
+      private boolean deprecated_ ;
+      public boolean hasDeprecated() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public boolean getDeprecated() {
+        return deprecated_;
+      }
+      public Builder setDeprecated(boolean value) {
+        bitField0_ |= 0x00000004;
+        deprecated_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearDeprecated() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        deprecated_ = false;
+        onChanged();
+        return this;
+      }
+      
+      // optional string experimental_map_key = 9;
+      private java.lang.Object experimentalMapKey_ = "";
+      public boolean hasExperimentalMapKey() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public String getExperimentalMapKey() {
+        java.lang.Object ref = experimentalMapKey_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          experimentalMapKey_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setExperimentalMapKey(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000008;
+        experimentalMapKey_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearExperimentalMapKey() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        experimentalMapKey_ = getDefaultInstance().getExperimentalMapKey();
+        onChanged();
+        return this;
+      }
+      void setExperimentalMapKey(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000008;
+        experimentalMapKey_ = value;
+        onChanged();
+      }
+      
+      // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
+        java.util.Collections.emptyList();
+      private void ensureUninterpretedOptionIsMutable() {
+        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
+          uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>(uninterpretedOption_);
+          bitField0_ |= 0x00000010;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+        if (uninterpretedOptionBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(uninterpretedOption_);
+        } else {
+          return uninterpretedOptionBuilder_.getMessageList();
+        }
+      }
+      public int getUninterpretedOptionCount() {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.size();
+        } else {
+          return uninterpretedOptionBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.get(index);
+        } else {
+          return uninterpretedOptionBuilder_.getMessage(index);
+        }
+      }
+      public Builder setUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.set(index, value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(index, value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllUninterpretedOption(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          super.addAll(values, uninterpretedOption_);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearUninterpretedOption() {
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000010);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeUninterpretedOption(int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.remove(index);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
+          int index) {
+        return getUninterpretedOptionFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+          int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.get(index);  } else {
+          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+           getUninterpretedOptionOrBuilderList() {
+        if (uninterpretedOptionBuilder_ != null) {
+          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(uninterpretedOption_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
+        return getUninterpretedOptionFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
+          int index) {
+        return getUninterpretedOptionFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
+           getUninterpretedOptionBuilderList() {
+        return getUninterpretedOptionFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+          getUninterpretedOptionFieldBuilder() {
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder>(
+                  uninterpretedOption_,
+                  ((bitField0_ & 0x00000010) == 0x00000010),
+                  getParentForChildren(),
+                  isClean());
+          uninterpretedOption_ = null;
+        }
+        return uninterpretedOptionBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.FieldOptions)
+    }
+    
+    static {
+      defaultInstance = new FieldOptions(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.FieldOptions)
+  }
+  
+  public interface EnumOptionsOrBuilder extends
+      com.google.protobuf.GeneratedMessage.
+          ExtendableMessageOrBuilder<EnumOptions> {
+    
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
+        getUninterpretedOptionList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
+    int getUninterpretedOptionCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index);
+  }
+  public static final class EnumOptions extends
+      com.google.protobuf.GeneratedMessage.ExtendableMessage<
+        EnumOptions> implements EnumOptionsOrBuilder {
+    // Use EnumOptions.newBuilder() to construct.
+    private EnumOptions(Builder builder) {
+      super(builder);
+    }
+    private EnumOptions(boolean noInit) {}
+    
+    private static final EnumOptions defaultInstance;
+    public static EnumOptions getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public EnumOptions getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_fieldAccessorTable;
+    }
+    
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
+    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+      return uninterpretedOption_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList() {
+      return uninterpretedOption_;
+    }
+    public int getUninterpretedOptionCount() {
+      return uninterpretedOption_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+      return uninterpretedOption_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index) {
+      return uninterpretedOption_.get(index);
+    }
+    
+    private void initFields() {
+      uninterpretedOption_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+        if (!getUninterpretedOption(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (!extensionsAreInitialized()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      com.google.protobuf.GeneratedMessage
+        .ExtendableMessage<com.google.protobuf.DescriptorProtos.EnumOptions>.ExtensionWriter extensionWriter =
+          newExtensionWriter();
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        output.writeMessage(999, uninterpretedOption_.get(i));
+      }
+      extensionWriter.writeUntil(536870912, output);
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(999, uninterpretedOption_.get(i));
+      }
+      size += extensionsSerializedSize();
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumOptions parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumOptions parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumOptions parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.EnumOptions prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
+          com.google.protobuf.DescriptorProtos.EnumOptions, Builder> implements com.google.protobuf.DescriptorProtos.EnumOptionsOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumOptions_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.EnumOptions.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getUninterpretedOptionFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.EnumOptions.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.EnumOptions getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.EnumOptions build() {
+        com.google.protobuf.DescriptorProtos.EnumOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.EnumOptions buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.EnumOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.EnumOptions buildPartial() {
+        com.google.protobuf.DescriptorProtos.EnumOptions result = new com.google.protobuf.DescriptorProtos.EnumOptions(this);
+        //int from_bitField0_ = bitField0_;
+        if (uninterpretedOptionBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001)) {
+            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.uninterpretedOption_ = uninterpretedOption_;
+        } else {
+          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.EnumOptions) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.EnumOptions)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumOptions other) {
+        if (other == com.google.protobuf.DescriptorProtos.EnumOptions.getDefaultInstance()) return this;
+        if (uninterpretedOptionBuilder_ == null) {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOption_.isEmpty()) {
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureUninterpretedOptionIsMutable();
+              uninterpretedOption_.addAll(other.uninterpretedOption_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOptionBuilder_.isEmpty()) {
+              uninterpretedOptionBuilder_.dispose();
+              uninterpretedOptionBuilder_ = null;
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              uninterpretedOptionBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getUninterpretedOptionFieldBuilder() : null;
+            } else {
+              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
+            }
+          }
+        }
+        this.mergeExtensionFields(other);
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+          if (!getUninterpretedOption(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (!extensionsAreInitialized()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 7994: {
+              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addUninterpretedOption(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
+        java.util.Collections.emptyList();
+      private void ensureUninterpretedOptionIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>(uninterpretedOption_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+        if (uninterpretedOptionBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(uninterpretedOption_);
+        } else {
+          return uninterpretedOptionBuilder_.getMessageList();
+        }
+      }
+      public int getUninterpretedOptionCount() {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.size();
+        } else {
+          return uninterpretedOptionBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.get(index);
+        } else {
+          return uninterpretedOptionBuilder_.getMessage(index);
+        }
+      }
+      public Builder setUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.set(index, value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(index, value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllUninterpretedOption(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          super.addAll(values, uninterpretedOption_);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearUninterpretedOption() {
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeUninterpretedOption(int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.remove(index);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
+          int index) {
+        return getUninterpretedOptionFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+          int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.get(index);  } else {
+          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+           getUninterpretedOptionOrBuilderList() {
+        if (uninterpretedOptionBuilder_ != null) {
+          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(uninterpretedOption_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
+        return getUninterpretedOptionFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
+          int index) {
+        return getUninterpretedOptionFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
+           getUninterpretedOptionBuilderList() {
+        return getUninterpretedOptionFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+          getUninterpretedOptionFieldBuilder() {
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder>(
+                  uninterpretedOption_,
+                  ((bitField0_ & 0x00000001) == 0x00000001),
+                  getParentForChildren(),
+                  isClean());
+          uninterpretedOption_ = null;
+        }
+        return uninterpretedOptionBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.EnumOptions)
+    }
+    
+    static {
+      defaultInstance = new EnumOptions(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.EnumOptions)
+  }
+  
+  public interface EnumValueOptionsOrBuilder extends
+      com.google.protobuf.GeneratedMessage.
+          ExtendableMessageOrBuilder<EnumValueOptions> {
+    
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
+        getUninterpretedOptionList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
+    int getUninterpretedOptionCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index);
+  }
+  public static final class EnumValueOptions extends
+      com.google.protobuf.GeneratedMessage.ExtendableMessage<
+        EnumValueOptions> implements EnumValueOptionsOrBuilder {
+    // Use EnumValueOptions.newBuilder() to construct.
+    private EnumValueOptions(Builder builder) {
+      super(builder);
+    }
+    private EnumValueOptions(boolean noInit) {}
+    
+    private static final EnumValueOptions defaultInstance;
+    public static EnumValueOptions getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public EnumValueOptions getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable;
+    }
+    
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
+    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+      return uninterpretedOption_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList() {
+      return uninterpretedOption_;
+    }
+    public int getUninterpretedOptionCount() {
+      return uninterpretedOption_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+      return uninterpretedOption_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index) {
+      return uninterpretedOption_.get(index);
+    }
+    
+    private void initFields() {
+      uninterpretedOption_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+        if (!getUninterpretedOption(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (!extensionsAreInitialized()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      com.google.protobuf.GeneratedMessage
+        .ExtendableMessage<com.google.protobuf.DescriptorProtos.EnumValueOptions>.ExtensionWriter extensionWriter =
+          newExtensionWriter();
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        output.writeMessage(999, uninterpretedOption_.get(i));
+      }
+      extensionWriter.writeUntil(536870912, output);
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(999, uninterpretedOption_.get(i));
+      }
+      size += extensionsSerializedSize();
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.EnumValueOptions parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.EnumValueOptions prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
+          com.google.protobuf.DescriptorProtos.EnumValueOptions, Builder> implements com.google.protobuf.DescriptorProtos.EnumValueOptionsOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.EnumValueOptions.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getUninterpretedOptionFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.EnumValueOptions.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.EnumValueOptions getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.EnumValueOptions build() {
+        com.google.protobuf.DescriptorProtos.EnumValueOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.EnumValueOptions buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.EnumValueOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.EnumValueOptions buildPartial() {
+        com.google.protobuf.DescriptorProtos.EnumValueOptions result = new com.google.protobuf.DescriptorProtos.EnumValueOptions(this);
+        //int from_bitField0_ = bitField0_;
+        if (uninterpretedOptionBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001)) {
+            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.uninterpretedOption_ = uninterpretedOption_;
+        } else {
+          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.EnumValueOptions) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.EnumValueOptions)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.EnumValueOptions other) {
+        if (other == com.google.protobuf.DescriptorProtos.EnumValueOptions.getDefaultInstance()) return this;
+        if (uninterpretedOptionBuilder_ == null) {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOption_.isEmpty()) {
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureUninterpretedOptionIsMutable();
+              uninterpretedOption_.addAll(other.uninterpretedOption_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOptionBuilder_.isEmpty()) {
+              uninterpretedOptionBuilder_.dispose();
+              uninterpretedOptionBuilder_ = null;
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              uninterpretedOptionBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getUninterpretedOptionFieldBuilder() : null;
+            } else {
+              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
+            }
+          }
+        }
+        this.mergeExtensionFields(other);
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+          if (!getUninterpretedOption(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (!extensionsAreInitialized()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 7994: {
+              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addUninterpretedOption(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
+        java.util.Collections.emptyList();
+      private void ensureUninterpretedOptionIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>(uninterpretedOption_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+        if (uninterpretedOptionBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(uninterpretedOption_);
+        } else {
+          return uninterpretedOptionBuilder_.getMessageList();
+        }
+      }
+      public int getUninterpretedOptionCount() {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.size();
+        } else {
+          return uninterpretedOptionBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.get(index);
+        } else {
+          return uninterpretedOptionBuilder_.getMessage(index);
+        }
+      }
+      public Builder setUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.set(index, value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(index, value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllUninterpretedOption(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          super.addAll(values, uninterpretedOption_);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearUninterpretedOption() {
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeUninterpretedOption(int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.remove(index);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
+          int index) {
+        return getUninterpretedOptionFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+          int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.get(index);  } else {
+          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+           getUninterpretedOptionOrBuilderList() {
+        if (uninterpretedOptionBuilder_ != null) {
+          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(uninterpretedOption_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
+        return getUninterpretedOptionFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
+          int index) {
+        return getUninterpretedOptionFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
+           getUninterpretedOptionBuilderList() {
+        return getUninterpretedOptionFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+          getUninterpretedOptionFieldBuilder() {
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder>(
+                  uninterpretedOption_,
+                  ((bitField0_ & 0x00000001) == 0x00000001),
+                  getParentForChildren(),
+                  isClean());
+          uninterpretedOption_ = null;
+        }
+        return uninterpretedOptionBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.EnumValueOptions)
+    }
+    
+    static {
+      defaultInstance = new EnumValueOptions(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.EnumValueOptions)
+  }
+  
+  public interface ServiceOptionsOrBuilder extends
+      com.google.protobuf.GeneratedMessage.
+          ExtendableMessageOrBuilder<ServiceOptions> {
+    
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
+        getUninterpretedOptionList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
+    int getUninterpretedOptionCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index);
+  }
+  public static final class ServiceOptions extends
+      com.google.protobuf.GeneratedMessage.ExtendableMessage<
+        ServiceOptions> implements ServiceOptionsOrBuilder {
+    // Use ServiceOptions.newBuilder() to construct.
+    private ServiceOptions(Builder builder) {
+      super(builder);
+    }
+    private ServiceOptions(boolean noInit) {}
+    
+    private static final ServiceOptions defaultInstance;
+    public static ServiceOptions getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public ServiceOptions getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_fieldAccessorTable;
+    }
+    
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
+    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+      return uninterpretedOption_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList() {
+      return uninterpretedOption_;
+    }
+    public int getUninterpretedOptionCount() {
+      return uninterpretedOption_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+      return uninterpretedOption_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index) {
+      return uninterpretedOption_.get(index);
+    }
+    
+    private void initFields() {
+      uninterpretedOption_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+        if (!getUninterpretedOption(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (!extensionsAreInitialized()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      com.google.protobuf.GeneratedMessage
+        .ExtendableMessage<com.google.protobuf.DescriptorProtos.ServiceOptions>.ExtensionWriter extensionWriter =
+          newExtensionWriter();
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        output.writeMessage(999, uninterpretedOption_.get(i));
+      }
+      extensionWriter.writeUntil(536870912, output);
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(999, uninterpretedOption_.get(i));
+      }
+      size += extensionsSerializedSize();
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.ServiceOptions parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.ServiceOptions prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
+          com.google.protobuf.DescriptorProtos.ServiceOptions, Builder> implements com.google.protobuf.DescriptorProtos.ServiceOptionsOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_ServiceOptions_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.ServiceOptions.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getUninterpretedOptionFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.ServiceOptions.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.ServiceOptions getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.ServiceOptions build() {
+        com.google.protobuf.DescriptorProtos.ServiceOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.ServiceOptions buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.ServiceOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.ServiceOptions buildPartial() {
+        com.google.protobuf.DescriptorProtos.ServiceOptions result = new com.google.protobuf.DescriptorProtos.ServiceOptions(this);
+        //int from_bitField0_ = bitField0_;
+        if (uninterpretedOptionBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001)) {
+            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.uninterpretedOption_ = uninterpretedOption_;
+        } else {
+          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.ServiceOptions) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.ServiceOptions)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.ServiceOptions other) {
+        if (other == com.google.protobuf.DescriptorProtos.ServiceOptions.getDefaultInstance()) return this;
+        if (uninterpretedOptionBuilder_ == null) {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOption_.isEmpty()) {
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureUninterpretedOptionIsMutable();
+              uninterpretedOption_.addAll(other.uninterpretedOption_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOptionBuilder_.isEmpty()) {
+              uninterpretedOptionBuilder_.dispose();
+              uninterpretedOptionBuilder_ = null;
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              uninterpretedOptionBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getUninterpretedOptionFieldBuilder() : null;
+            } else {
+              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
+            }
+          }
+        }
+        this.mergeExtensionFields(other);
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+          if (!getUninterpretedOption(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (!extensionsAreInitialized()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 7994: {
+              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addUninterpretedOption(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
+        java.util.Collections.emptyList();
+      private void ensureUninterpretedOptionIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>(uninterpretedOption_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+        if (uninterpretedOptionBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(uninterpretedOption_);
+        } else {
+          return uninterpretedOptionBuilder_.getMessageList();
+        }
+      }
+      public int getUninterpretedOptionCount() {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.size();
+        } else {
+          return uninterpretedOptionBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.get(index);
+        } else {
+          return uninterpretedOptionBuilder_.getMessage(index);
+        }
+      }
+      public Builder setUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.set(index, value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(index, value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllUninterpretedOption(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          super.addAll(values, uninterpretedOption_);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearUninterpretedOption() {
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeUninterpretedOption(int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.remove(index);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
+          int index) {
+        return getUninterpretedOptionFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+          int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.get(index);  } else {
+          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+           getUninterpretedOptionOrBuilderList() {
+        if (uninterpretedOptionBuilder_ != null) {
+          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(uninterpretedOption_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
+        return getUninterpretedOptionFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
+          int index) {
+        return getUninterpretedOptionFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
+           getUninterpretedOptionBuilderList() {
+        return getUninterpretedOptionFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+          getUninterpretedOptionFieldBuilder() {
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder>(
+                  uninterpretedOption_,
+                  ((bitField0_ & 0x00000001) == 0x00000001),
+                  getParentForChildren(),
+                  isClean());
+          uninterpretedOption_ = null;
+        }
+        return uninterpretedOptionBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.ServiceOptions)
+    }
+    
+    static {
+      defaultInstance = new ServiceOptions(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.ServiceOptions)
+  }
+  
+  public interface MethodOptionsOrBuilder extends
+      com.google.protobuf.GeneratedMessage.
+          ExtendableMessageOrBuilder<MethodOptions> {
+    
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> 
+        getUninterpretedOptionList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index);
+    int getUninterpretedOptionCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index);
+  }
+  public static final class MethodOptions extends
+      com.google.protobuf.GeneratedMessage.ExtendableMessage<
+        MethodOptions> implements MethodOptionsOrBuilder {
+    // Use MethodOptions.newBuilder() to construct.
+    private MethodOptions(Builder builder) {
+      super(builder);
+    }
+    private MethodOptions(boolean noInit) {}
+    
+    private static final MethodOptions defaultInstance;
+    public static MethodOptions getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public MethodOptions getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_fieldAccessorTable;
+    }
+    
+    // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+    public static final int UNINTERPRETED_OPTION_FIELD_NUMBER = 999;
+    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+      return uninterpretedOption_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+        getUninterpretedOptionOrBuilderList() {
+      return uninterpretedOption_;
+    }
+    public int getUninterpretedOptionCount() {
+      return uninterpretedOption_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+      return uninterpretedOption_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+        int index) {
+      return uninterpretedOption_.get(index);
+    }
+    
+    private void initFields() {
+      uninterpretedOption_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+        if (!getUninterpretedOption(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      if (!extensionsAreInitialized()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      com.google.protobuf.GeneratedMessage
+        .ExtendableMessage<com.google.protobuf.DescriptorProtos.MethodOptions>.ExtensionWriter extensionWriter =
+          newExtensionWriter();
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        output.writeMessage(999, uninterpretedOption_.get(i));
+      }
+      extensionWriter.writeUntil(536870912, output);
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      for (int i = 0; i < uninterpretedOption_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(999, uninterpretedOption_.get(i));
+      }
+      size += extensionsSerializedSize();
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodOptions parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodOptions parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.MethodOptions parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.MethodOptions prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.ExtendableBuilder<
+          com.google.protobuf.DescriptorProtos.MethodOptions, Builder> implements com.google.protobuf.DescriptorProtos.MethodOptionsOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_MethodOptions_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.MethodOptions.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getUninterpretedOptionFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.MethodOptions.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.MethodOptions getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.MethodOptions build() {
+        com.google.protobuf.DescriptorProtos.MethodOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.MethodOptions buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.MethodOptions result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.MethodOptions buildPartial() {
+        com.google.protobuf.DescriptorProtos.MethodOptions result = new com.google.protobuf.DescriptorProtos.MethodOptions(this);
+        //int from_bitField0_ = bitField0_;
+        if (uninterpretedOptionBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001)) {
+            uninterpretedOption_ = java.util.Collections.unmodifiableList(uninterpretedOption_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.uninterpretedOption_ = uninterpretedOption_;
+        } else {
+          result.uninterpretedOption_ = uninterpretedOptionBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.MethodOptions) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.MethodOptions)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.MethodOptions other) {
+        if (other == com.google.protobuf.DescriptorProtos.MethodOptions.getDefaultInstance()) return this;
+        if (uninterpretedOptionBuilder_ == null) {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOption_.isEmpty()) {
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureUninterpretedOptionIsMutable();
+              uninterpretedOption_.addAll(other.uninterpretedOption_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.uninterpretedOption_.isEmpty()) {
+            if (uninterpretedOptionBuilder_.isEmpty()) {
+              uninterpretedOptionBuilder_.dispose();
+              uninterpretedOptionBuilder_ = null;
+              uninterpretedOption_ = other.uninterpretedOption_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              uninterpretedOptionBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getUninterpretedOptionFieldBuilder() : null;
+            } else {
+              uninterpretedOptionBuilder_.addAllMessages(other.uninterpretedOption_);
+            }
+          }
+        }
+        this.mergeExtensionFields(other);
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        for (int i = 0; i < getUninterpretedOptionCount(); i++) {
+          if (!getUninterpretedOption(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        if (!extensionsAreInitialized()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 7994: {
+              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addUninterpretedOption(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
+      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> uninterpretedOption_ =
+        java.util.Collections.emptyList();
+      private void ensureUninterpretedOptionIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          uninterpretedOption_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption>(uninterpretedOption_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> uninterpretedOptionBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption> getUninterpretedOptionList() {
+        if (uninterpretedOptionBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(uninterpretedOption_);
+        } else {
+          return uninterpretedOptionBuilder_.getMessageList();
+        }
+      }
+      public int getUninterpretedOptionCount() {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.size();
+        } else {
+          return uninterpretedOptionBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption getUninterpretedOption(int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.get(index);
+        } else {
+          return uninterpretedOptionBuilder_.getMessage(index);
+        }
+      }
+      public Builder setUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.set(index, value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption value) {
+        if (uninterpretedOptionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(index, value);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addUninterpretedOption(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder builderForValue) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllUninterpretedOption(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption> values) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          super.addAll(values, uninterpretedOption_);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearUninterpretedOption() {
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOption_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeUninterpretedOption(int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          ensureUninterpretedOptionIsMutable();
+          uninterpretedOption_.remove(index);
+          onChanged();
+        } else {
+          uninterpretedOptionBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder getUninterpretedOptionBuilder(
+          int index) {
+        return getUninterpretedOptionFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder getUninterpretedOptionOrBuilder(
+          int index) {
+        if (uninterpretedOptionBuilder_ == null) {
+          return uninterpretedOption_.get(index);  } else {
+          return uninterpretedOptionBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+           getUninterpretedOptionOrBuilderList() {
+        if (uninterpretedOptionBuilder_ != null) {
+          return uninterpretedOptionBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(uninterpretedOption_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder() {
+        return getUninterpretedOptionFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder addUninterpretedOptionBuilder(
+          int index) {
+        return getUninterpretedOptionFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder> 
+           getUninterpretedOptionBuilderList() {
+        return getUninterpretedOptionFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder> 
+          getUninterpretedOptionFieldBuilder() {
+        if (uninterpretedOptionBuilder_ == null) {
+          uninterpretedOptionBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.UninterpretedOption, com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder>(
+                  uninterpretedOption_,
+                  ((bitField0_ & 0x00000001) == 0x00000001),
+                  getParentForChildren(),
+                  isClean());
+          uninterpretedOption_ = null;
+        }
+        return uninterpretedOptionBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.MethodOptions)
+    }
+    
+    static {
+      defaultInstance = new MethodOptions(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.MethodOptions)
+  }
+  
+  public interface UninterpretedOptionOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // repeated .google.protobuf.UninterpretedOption.NamePart name = 2;
+    java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> 
+        getNameList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getName(int index);
+    int getNameCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
+        getNameOrBuilderList();
+    com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder getNameOrBuilder(
+        int index);
+    
+    // optional string identifier_value = 3;
+    boolean hasIdentifierValue();
+    String getIdentifierValue();
+    
+    // optional uint64 positive_int_value = 4;
+    boolean hasPositiveIntValue();
+    long getPositiveIntValue();
+    
+    // optional int64 negative_int_value = 5;
+    boolean hasNegativeIntValue();
+    long getNegativeIntValue();
+    
+    // optional double double_value = 6;
+    boolean hasDoubleValue();
+    double getDoubleValue();
+    
+    // optional bytes string_value = 7;
+    boolean hasStringValue();
+    com.google.protobuf.ByteString getStringValue();
+    
+    // optional string aggregate_value = 8;
+    boolean hasAggregateValue();
+    String getAggregateValue();
+  }
+  public static final class UninterpretedOption extends
+      com.google.protobuf.GeneratedMessage
+      implements UninterpretedOptionOrBuilder {
+    // Use UninterpretedOption.newBuilder() to construct.
+    private UninterpretedOption(Builder builder) {
+      super(builder);
+    }
+    private UninterpretedOption(boolean noInit) {}
+    
+    private static final UninterpretedOption defaultInstance;
+    public static UninterpretedOption getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public UninterpretedOption getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable;
+    }
+    
+    public interface NamePartOrBuilder
+        extends com.google.protobuf.MessageOrBuilder {
+      
+      // required string name_part = 1;
+      boolean hasNamePart();
+      String getNamePart();
+      
+      // required bool is_extension = 2;
+      boolean hasIsExtension();
+      boolean getIsExtension();
+    }
+    public static final class NamePart extends
+        com.google.protobuf.GeneratedMessage
+        implements NamePartOrBuilder {
+      // Use NamePart.newBuilder() to construct.
+      private NamePart(Builder builder) {
+        super(builder);
+      }
+      private NamePart(boolean noInit) {}
+      
+      private static final NamePart defaultInstance;
+      public static NamePart getDefaultInstance() {
+        return defaultInstance;
+      }
+      
+      public NamePart getDefaultInstanceForType() {
+        return defaultInstance;
+      }
+      
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable;
+      }
+      
+      private int bitField0_;
+      // required string name_part = 1;
+      public static final int NAME_PART_FIELD_NUMBER = 1;
+      private java.lang.Object namePart_;
+      public boolean hasNamePart() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getNamePart() {
+        java.lang.Object ref = namePart_;
+        if (ref instanceof String) {
+          return (String) ref;
+        } else {
+          com.google.protobuf.ByteString bs = 
+              (com.google.protobuf.ByteString) ref;
+          String s = bs.toStringUtf8();
+          if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+            namePart_ = s;
+          }
+          return s;
+        }
+      }
+      private com.google.protobuf.ByteString getNamePartBytes() {
+        java.lang.Object ref = namePart_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+          namePart_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      
+      // required bool is_extension = 2;
+      public static final int IS_EXTENSION_FIELD_NUMBER = 2;
+      private boolean isExtension_;
+      public boolean hasIsExtension() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public boolean getIsExtension() {
+        return isExtension_;
+      }
+      
+      private void initFields() {
+        namePart_ = "";
+        isExtension_ = false;
+      }
+      private byte memoizedIsInitialized = -1;
+      public final boolean isInitialized() {
+        byte isInitialized = memoizedIsInitialized;
+        if (isInitialized != -1) return isInitialized == 1;
+        
+        if (!hasNamePart()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+        if (!hasIsExtension()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+        memoizedIsInitialized = 1;
+        return true;
+      }
+      
+      public void writeTo(com.google.protobuf.CodedOutputStream output)
+                          throws java.io.IOException {
+        getSerializedSize();
+        if (((bitField0_ & 0x00000001) == 0x00000001)) {
+          output.writeBytes(1, getNamePartBytes());
+        }
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          output.writeBool(2, isExtension_);
+        }
+        getUnknownFields().writeTo(output);
+      }
+      
+      private int memoizedSerializedSize = -1;
+      public int getSerializedSize() {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+      
+        size = 0;
+        if (((bitField0_ & 0x00000001) == 0x00000001)) {
+          size += com.google.protobuf.CodedOutputStream
+            .computeBytesSize(1, getNamePartBytes());
+        }
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          size += com.google.protobuf.CodedOutputStream
+            .computeBoolSize(2, isExtension_);
+        }
+        size += getUnknownFields().getSerializedSize();
+        memoizedSerializedSize = size;
+        return size;
+      }
+      
+      private static final long serialVersionUID = 0L;
+      @java.lang.Override
+      protected java.lang.Object writeReplace()
+          throws java.io.ObjectStreamException {
+        return super.writeReplace();
+      }
+      
+      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
+          com.google.protobuf.ByteString data)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data).buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
+          com.google.protobuf.ByteString data,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data, extensionRegistry)
+                 .buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(byte[] data)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data).buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
+          byte[] data,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data, extensionRegistry)
+                 .buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(java.io.InputStream input)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input).buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
+          java.io.InputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input, extensionRegistry)
+                 .buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseDelimitedFrom(java.io.InputStream input)
+          throws java.io.IOException {
+        Builder builder = newBuilder();
+        if (builder.mergeDelimitedFrom(input)) {
+          return builder.buildParsed();
+        } else {
+          return null;
+        }
+      }
+      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseDelimitedFrom(
+          java.io.InputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        Builder builder = newBuilder();
+        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+          return builder.buildParsed();
+        } else {
+          return null;
+        }
+      }
+      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
+          com.google.protobuf.CodedInputStream input)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input).buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart parseFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input, extensionRegistry)
+                 .buildParsed();
+      }
+      
+      public static Builder newBuilder() { return Builder.create(); }
+      public Builder newBuilderForType() { return newBuilder(); }
+      public static Builder newBuilder(com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart prototype) {
+        return newBuilder().mergeFrom(prototype);
+      }
+      public Builder toBuilder() { return newBuilder(this); }
+      
+      @java.lang.Override
+      protected Builder newBuilderForType(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        Builder builder = new Builder(parent);
+        return builder;
+      }
+      public static final class Builder extends
+          com.google.protobuf.GeneratedMessage.Builder<Builder>
+         implements com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder {
+        public static final com.google.protobuf.Descriptors.Descriptor
+            getDescriptor() {
+          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
+        }
+        
+        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+            internalGetFieldAccessorTable() {
+          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable;
+        }
+        
+        // Construct using com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.newBuilder()
+        private Builder() {
+          maybeForceBuilderInitialization();
+        }
+        
+        private Builder(BuilderParent parent) {
+          super(parent);
+          maybeForceBuilderInitialization();
+        }
+        private void maybeForceBuilderInitialization() {
+          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          }
+        }
+        private static Builder create() {
+          return new Builder();
+        }
+        
+        public Builder clear() {
+          super.clear();
+          namePart_ = "";
+          bitField0_ = (bitField0_ & ~0x00000001);
+          isExtension_ = false;
+          bitField0_ = (bitField0_ & ~0x00000002);
+          return this;
+        }
+        
+        public Builder clone() {
+          return create().mergeFrom(buildPartial());
+        }
+        
+        public com.google.protobuf.Descriptors.Descriptor
+            getDescriptorForType() {
+          return com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDescriptor();
+        }
+        
+        public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getDefaultInstanceForType() {
+          return com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDefaultInstance();
+        }
+        
+        public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart build() {
+          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart result = buildPartial();
+          if (!result.isInitialized()) {
+            throw newUninitializedMessageException(result);
+          }
+          return result;
+        }
+        
+        private com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart buildParsed()
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart result = buildPartial();
+          if (!result.isInitialized()) {
+            throw newUninitializedMessageException(
+              result).asInvalidProtocolBufferException();
+          }
+          return result;
+        }
+        
+        public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart buildPartial() {
+          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart result = new com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart(this);
+          int from_bitField0_ = bitField0_;
+          int to_bitField0_ = 0;
+          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+            to_bitField0_ |= 0x00000001;
+          }
+          result.namePart_ = namePart_;
+          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+            to_bitField0_ |= 0x00000002;
+          }
+          result.isExtension_ = isExtension_;
+          result.bitField0_ = to_bitField0_;
+          onBuilt();
+          return result;
+        }
+        
+        public Builder mergeFrom(com.google.protobuf.Message other) {
+          if (other instanceof com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart) {
+            return mergeFrom((com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart)other);
+          } else {
+            super.mergeFrom(other);
+            return this;
+          }
+        }
+        
+        public Builder mergeFrom(com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart other) {
+          if (other == com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDefaultInstance()) return this;
+          if (other.hasNamePart()) {
+            setNamePart(other.getNamePart());
+          }
+          if (other.hasIsExtension()) {
+            setIsExtension(other.getIsExtension());
+          }
+          this.mergeUnknownFields(other.getUnknownFields());
+          return this;
+        }
+        
+        public final boolean isInitialized() {
+          if (!hasNamePart()) {
+            
+            return false;
+          }
+          if (!hasIsExtension()) {
+            
+            return false;
+          }
+          return true;
+        }
+        
+        public Builder mergeFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws java.io.IOException {
+          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+            com.google.protobuf.UnknownFieldSet.newBuilder(
+              this.getUnknownFields());
+          while (true) {
+            int tag = input.readTag();
+            switch (tag) {
+              case 0:
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              default: {
+                if (!parseUnknownField(input, unknownFields,
+                                       extensionRegistry, tag)) {
+                  this.setUnknownFields(unknownFields.build());
+                  onChanged();
+                  return this;
+                }
+                break;
+              }
+              case 10: {
+                bitField0_ |= 0x00000001;
+                namePart_ = input.readBytes();
+                break;
+              }
+              case 16: {
+                bitField0_ |= 0x00000002;
+                isExtension_ = input.readBool();
+                break;
+              }
+            }
+          }
+        }
+        
+        private int bitField0_;
+        
+        // required string name_part = 1;
+        private java.lang.Object namePart_ = "";
+        public boolean hasNamePart() {
+          return ((bitField0_ & 0x00000001) == 0x00000001);
+        }
+        public String getNamePart() {
+          java.lang.Object ref = namePart_;
+          if (!(ref instanceof String)) {
+            String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+            namePart_ = s;
+            return s;
+          } else {
+            return (String) ref;
+          }
+        }
+        public Builder setNamePart(String value) {
+          if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+          namePart_ = value;
+          onChanged();
+          return this;
+        }
+        public Builder clearNamePart() {
+          bitField0_ = (bitField0_ & ~0x00000001);
+          namePart_ = getDefaultInstance().getNamePart();
+          onChanged();
+          return this;
+        }
+        void setNamePart(com.google.protobuf.ByteString value) {
+          bitField0_ |= 0x00000001;
+          namePart_ = value;
+          onChanged();
+        }
+        
+        // required bool is_extension = 2;
+        private boolean isExtension_ ;
+        public boolean hasIsExtension() {
+          return ((bitField0_ & 0x00000002) == 0x00000002);
+        }
+        public boolean getIsExtension() {
+          return isExtension_;
+        }
+        public Builder setIsExtension(boolean value) {
+          bitField0_ |= 0x00000002;
+          isExtension_ = value;
+          onChanged();
+          return this;
+        }
+        public Builder clearIsExtension() {
+          bitField0_ = (bitField0_ & ~0x00000002);
+          isExtension_ = false;
+          onChanged();
+          return this;
+        }
+        
+        // @@protoc_insertion_point(builder_scope:google.protobuf.UninterpretedOption.NamePart)
+      }
+      
+      static {
+        defaultInstance = new NamePart(true);
+        defaultInstance.initFields();
+      }
+      
+      // @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption.NamePart)
+    }
+    
+    private int bitField0_;
+    // repeated .google.protobuf.UninterpretedOption.NamePart name = 2;
+    public static final int NAME_FIELD_NUMBER = 2;
+    private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> name_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> getNameList() {
+      return name_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
+        getNameOrBuilderList() {
+      return name_;
+    }
+    public int getNameCount() {
+      return name_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getName(int index) {
+      return name_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder getNameOrBuilder(
+        int index) {
+      return name_.get(index);
+    }
+    
+    // optional string identifier_value = 3;
+    public static final int IDENTIFIER_VALUE_FIELD_NUMBER = 3;
+    private java.lang.Object identifierValue_;
+    public boolean hasIdentifierValue() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getIdentifierValue() {
+      java.lang.Object ref = identifierValue_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          identifierValue_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getIdentifierValueBytes() {
+      java.lang.Object ref = identifierValue_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        identifierValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional uint64 positive_int_value = 4;
+    public static final int POSITIVE_INT_VALUE_FIELD_NUMBER = 4;
+    private long positiveIntValue_;
+    public boolean hasPositiveIntValue() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public long getPositiveIntValue() {
+      return positiveIntValue_;
+    }
+    
+    // optional int64 negative_int_value = 5;
+    public static final int NEGATIVE_INT_VALUE_FIELD_NUMBER = 5;
+    private long negativeIntValue_;
+    public boolean hasNegativeIntValue() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public long getNegativeIntValue() {
+      return negativeIntValue_;
+    }
+    
+    // optional double double_value = 6;
+    public static final int DOUBLE_VALUE_FIELD_NUMBER = 6;
+    private double doubleValue_;
+    public boolean hasDoubleValue() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public double getDoubleValue() {
+      return doubleValue_;
+    }
+    
+    // optional bytes string_value = 7;
+    public static final int STRING_VALUE_FIELD_NUMBER = 7;
+    private com.google.protobuf.ByteString stringValue_;
+    public boolean hasStringValue() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    public com.google.protobuf.ByteString getStringValue() {
+      return stringValue_;
+    }
+    
+    // optional string aggregate_value = 8;
+    public static final int AGGREGATE_VALUE_FIELD_NUMBER = 8;
+    private java.lang.Object aggregateValue_;
+    public boolean hasAggregateValue() {
+      return ((bitField0_ & 0x00000020) == 0x00000020);
+    }
+    public String getAggregateValue() {
+      java.lang.Object ref = aggregateValue_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          aggregateValue_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getAggregateValueBytes() {
+      java.lang.Object ref = aggregateValue_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        aggregateValue_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    private void initFields() {
+      name_ = java.util.Collections.emptyList();
+      identifierValue_ = "";
+      positiveIntValue_ = 0L;
+      negativeIntValue_ = 0L;
+      doubleValue_ = 0D;
+      stringValue_ = com.google.protobuf.ByteString.EMPTY;
+      aggregateValue_ = "";
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      for (int i = 0; i < getNameCount(); i++) {
+        if (!getName(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      for (int i = 0; i < name_.size(); i++) {
+        output.writeMessage(2, name_.get(i));
+      }
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(3, getIdentifierValueBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeUInt64(4, positiveIntValue_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeInt64(5, negativeIntValue_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeDouble(6, doubleValue_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBytes(7, stringValue_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        output.writeBytes(8, getAggregateValueBytes());
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      for (int i = 0; i < name_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, name_.get(i));
+      }
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(3, getIdentifierValueBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt64Size(4, positiveIntValue_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(5, negativeIntValue_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(6, doubleValue_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(7, stringValue_);
+      }
+      if (((bitField0_ & 0x00000020) == 0x00000020)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(8, getAggregateValueBytes());
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.UninterpretedOption parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.UninterpretedOption prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.google.protobuf.DescriptorProtos.UninterpretedOptionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.UninterpretedOption.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getNameFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        if (nameBuilder_ == null) {
+          name_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          nameBuilder_.clear();
+        }
+        identifierValue_ = "";
+        bitField0_ = (bitField0_ & ~0x00000002);
+        positiveIntValue_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        negativeIntValue_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        doubleValue_ = 0D;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        stringValue_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000020);
+        aggregateValue_ = "";
+        bitField0_ = (bitField0_ & ~0x00000040);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.UninterpretedOption.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption build() {
+        com.google.protobuf.DescriptorProtos.UninterpretedOption result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.UninterpretedOption buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.UninterpretedOption result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption buildPartial() {
+        com.google.protobuf.DescriptorProtos.UninterpretedOption result = new com.google.protobuf.DescriptorProtos.UninterpretedOption(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (nameBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001)) {
+            name_ = java.util.Collections.unmodifiableList(name_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.name_ = name_;
+        } else {
+          result.name_ = nameBuilder_.build();
+        }
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.identifierValue_ = identifierValue_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.positiveIntValue_ = positiveIntValue_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.negativeIntValue_ = negativeIntValue_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.doubleValue_ = doubleValue_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.stringValue_ = stringValue_;
+        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
+          to_bitField0_ |= 0x00000020;
+        }
+        result.aggregateValue_ = aggregateValue_;
+        result.bitField0_ = to_bitField0_;
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.UninterpretedOption) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.UninterpretedOption)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.UninterpretedOption other) {
+        if (other == com.google.protobuf.DescriptorProtos.UninterpretedOption.getDefaultInstance()) return this;
+        if (nameBuilder_ == null) {
+          if (!other.name_.isEmpty()) {
+            if (name_.isEmpty()) {
+              name_ = other.name_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureNameIsMutable();
+              name_.addAll(other.name_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.name_.isEmpty()) {
+            if (nameBuilder_.isEmpty()) {
+              nameBuilder_.dispose();
+              nameBuilder_ = null;
+              name_ = other.name_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              nameBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getNameFieldBuilder() : null;
+            } else {
+              nameBuilder_.addAllMessages(other.name_);
+            }
+          }
+        }
+        if (other.hasIdentifierValue()) {
+          setIdentifierValue(other.getIdentifierValue());
+        }
+        if (other.hasPositiveIntValue()) {
+          setPositiveIntValue(other.getPositiveIntValue());
+        }
+        if (other.hasNegativeIntValue()) {
+          setNegativeIntValue(other.getNegativeIntValue());
+        }
+        if (other.hasDoubleValue()) {
+          setDoubleValue(other.getDoubleValue());
+        }
+        if (other.hasStringValue()) {
+          setStringValue(other.getStringValue());
+        }
+        if (other.hasAggregateValue()) {
+          setAggregateValue(other.getAggregateValue());
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        for (int i = 0; i < getNameCount(); i++) {
+          if (!getName(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 18: {
+              com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder subBuilder = com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addName(subBuilder.buildPartial());
+              break;
+            }
+            case 26: {
+              bitField0_ |= 0x00000002;
+              identifierValue_ = input.readBytes();
+              break;
+            }
+            case 32: {
+              bitField0_ |= 0x00000004;
+              positiveIntValue_ = input.readUInt64();
+              break;
+            }
+            case 40: {
+              bitField0_ |= 0x00000008;
+              negativeIntValue_ = input.readInt64();
+              break;
+            }
+            case 49: {
+              bitField0_ |= 0x00000010;
+              doubleValue_ = input.readDouble();
+              break;
+            }
+            case 58: {
+              bitField0_ |= 0x00000020;
+              stringValue_ = input.readBytes();
+              break;
+            }
+            case 66: {
+              bitField0_ |= 0x00000040;
+              aggregateValue_ = input.readBytes();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // repeated .google.protobuf.UninterpretedOption.NamePart name = 2;
+      private java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> name_ =
+        java.util.Collections.emptyList();
+      private void ensureNameIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          name_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart>(name_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> nameBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> getNameList() {
+        if (nameBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(name_);
+        } else {
+          return nameBuilder_.getMessageList();
+        }
+      }
+      public int getNameCount() {
+        if (nameBuilder_ == null) {
+          return name_.size();
+        } else {
+          return nameBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart getName(int index) {
+        if (nameBuilder_ == null) {
+          return name_.get(index);
+        } else {
+          return nameBuilder_.getMessage(index);
+        }
+      }
+      public Builder setName(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart value) {
+        if (nameBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureNameIsMutable();
+          name_.set(index, value);
+          onChanged();
+        } else {
+          nameBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setName(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder builderForValue) {
+        if (nameBuilder_ == null) {
+          ensureNameIsMutable();
+          name_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          nameBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addName(com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart value) {
+        if (nameBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureNameIsMutable();
+          name_.add(value);
+          onChanged();
+        } else {
+          nameBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addName(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart value) {
+        if (nameBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureNameIsMutable();
+          name_.add(index, value);
+          onChanged();
+        } else {
+          nameBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addName(
+          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder builderForValue) {
+        if (nameBuilder_ == null) {
+          ensureNameIsMutable();
+          name_.add(builderForValue.build());
+          onChanged();
+        } else {
+          nameBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addName(
+          int index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder builderForValue) {
+        if (nameBuilder_ == null) {
+          ensureNameIsMutable();
+          name_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          nameBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllName(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart> values) {
+        if (nameBuilder_ == null) {
+          ensureNameIsMutable();
+          super.addAll(values, name_);
+          onChanged();
+        } else {
+          nameBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearName() {
+        if (nameBuilder_ == null) {
+          name_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          nameBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeName(int index) {
+        if (nameBuilder_ == null) {
+          ensureNameIsMutable();
+          name_.remove(index);
+          onChanged();
+        } else {
+          nameBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder getNameBuilder(
+          int index) {
+        return getNameFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder getNameOrBuilder(
+          int index) {
+        if (nameBuilder_ == null) {
+          return name_.get(index);  } else {
+          return nameBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
+           getNameOrBuilderList() {
+        if (nameBuilder_ != null) {
+          return nameBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(name_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder addNameBuilder() {
+        return getNameFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder addNameBuilder(
+          int index) {
+        return getNameFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder> 
+           getNameBuilderList() {
+        return getNameFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder> 
+          getNameFieldBuilder() {
+        if (nameBuilder_ == null) {
+          nameBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder, com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePartOrBuilder>(
+                  name_,
+                  ((bitField0_ & 0x00000001) == 0x00000001),
+                  getParentForChildren(),
+                  isClean());
+          name_ = null;
+        }
+        return nameBuilder_;
+      }
+      
+      // optional string identifier_value = 3;
+      private java.lang.Object identifierValue_ = "";
+      public boolean hasIdentifierValue() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public String getIdentifierValue() {
+        java.lang.Object ref = identifierValue_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          identifierValue_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setIdentifierValue(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
+        identifierValue_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearIdentifierValue() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        identifierValue_ = getDefaultInstance().getIdentifierValue();
+        onChanged();
+        return this;
+      }
+      void setIdentifierValue(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000002;
+        identifierValue_ = value;
+        onChanged();
+      }
+      
+      // optional uint64 positive_int_value = 4;
+      private long positiveIntValue_ ;
+      public boolean hasPositiveIntValue() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public long getPositiveIntValue() {
+        return positiveIntValue_;
+      }
+      public Builder setPositiveIntValue(long value) {
+        bitField0_ |= 0x00000004;
+        positiveIntValue_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearPositiveIntValue() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        positiveIntValue_ = 0L;
+        onChanged();
+        return this;
+      }
+      
+      // optional int64 negative_int_value = 5;
+      private long negativeIntValue_ ;
+      public boolean hasNegativeIntValue() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public long getNegativeIntValue() {
+        return negativeIntValue_;
+      }
+      public Builder setNegativeIntValue(long value) {
+        bitField0_ |= 0x00000008;
+        negativeIntValue_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearNegativeIntValue() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        negativeIntValue_ = 0L;
+        onChanged();
+        return this;
+      }
+      
+      // optional double double_value = 6;
+      private double doubleValue_ ;
+      public boolean hasDoubleValue() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public double getDoubleValue() {
+        return doubleValue_;
+      }
+      public Builder setDoubleValue(double value) {
+        bitField0_ |= 0x00000010;
+        doubleValue_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearDoubleValue() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        doubleValue_ = 0D;
+        onChanged();
+        return this;
+      }
+      
+      // optional bytes string_value = 7;
+      private com.google.protobuf.ByteString stringValue_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasStringValue() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public com.google.protobuf.ByteString getStringValue() {
+        return stringValue_;
+      }
+      public Builder setStringValue(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000020;
+        stringValue_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearStringValue() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        stringValue_ = getDefaultInstance().getStringValue();
+        onChanged();
+        return this;
+      }
+      
+      // optional string aggregate_value = 8;
+      private java.lang.Object aggregateValue_ = "";
+      public boolean hasAggregateValue() {
+        return ((bitField0_ & 0x00000040) == 0x00000040);
+      }
+      public String getAggregateValue() {
+        java.lang.Object ref = aggregateValue_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          aggregateValue_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setAggregateValue(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000040;
+        aggregateValue_ = value;
+        onChanged();
+        return this;
+      }
+      public Builder clearAggregateValue() {
+        bitField0_ = (bitField0_ & ~0x00000040);
+        aggregateValue_ = getDefaultInstance().getAggregateValue();
+        onChanged();
+        return this;
+      }
+      void setAggregateValue(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000040;
+        aggregateValue_ = value;
+        onChanged();
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.UninterpretedOption)
+    }
+    
+    static {
+      defaultInstance = new UninterpretedOption(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption)
+  }
+  
+  public interface SourceCodeInfoOrBuilder
+      extends com.google.protobuf.MessageOrBuilder {
+    
+    // repeated .google.protobuf.SourceCodeInfo.Location location = 1;
+    java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> 
+        getLocationList();
+    com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getLocation(int index);
+    int getLocationCount();
+    java.util.List<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
+        getLocationOrBuilderList();
+    com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder getLocationOrBuilder(
+        int index);
+  }
+  public static final class SourceCodeInfo extends
+      com.google.protobuf.GeneratedMessage
+      implements SourceCodeInfoOrBuilder {
+    // Use SourceCodeInfo.newBuilder() to construct.
+    private SourceCodeInfo(Builder builder) {
+      super(builder);
+    }
+    private SourceCodeInfo(boolean noInit) {}
+    
+    private static final SourceCodeInfo defaultInstance;
+    public static SourceCodeInfo getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public SourceCodeInfo getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_descriptor;
+    }
+    
+    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable;
+    }
+    
+    public interface LocationOrBuilder
+        extends com.google.protobuf.MessageOrBuilder {
+      
+      // repeated int32 path = 1 [packed = true];
+      java.util.List<java.lang.Integer> getPathList();
+      int getPathCount();
+      int getPath(int index);
+      
+      // repeated int32 span = 2 [packed = true];
+      java.util.List<java.lang.Integer> getSpanList();
+      int getSpanCount();
+      int getSpan(int index);
+    }
+    public static final class Location extends
+        com.google.protobuf.GeneratedMessage
+        implements LocationOrBuilder {
+      // Use Location.newBuilder() to construct.
+      private Location(Builder builder) {
+        super(builder);
+      }
+      private Location(boolean noInit) {}
+      
+      private static final Location defaultInstance;
+      public static Location getDefaultInstance() {
+        return defaultInstance;
+      }
+      
+      public Location getDefaultInstanceForType() {
+        return defaultInstance;
+      }
+      
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable;
+      }
+      
+      // repeated int32 path = 1 [packed = true];
+      public static final int PATH_FIELD_NUMBER = 1;
+      private java.util.List<java.lang.Integer> path_;
+      public java.util.List<java.lang.Integer>
+          getPathList() {
+        return path_;
+      }
+      public int getPathCount() {
+        return path_.size();
+      }
+      public int getPath(int index) {
+        return path_.get(index);
+      }
+      private int pathMemoizedSerializedSize = -1;
+      
+      // repeated int32 span = 2 [packed = true];
+      public static final int SPAN_FIELD_NUMBER = 2;
+      private java.util.List<java.lang.Integer> span_;
+      public java.util.List<java.lang.Integer>
+          getSpanList() {
+        return span_;
+      }
+      public int getSpanCount() {
+        return span_.size();
+      }
+      public int getSpan(int index) {
+        return span_.get(index);
+      }
+      private int spanMemoizedSerializedSize = -1;
+      
+      private void initFields() {
+        path_ = java.util.Collections.emptyList();;
+        span_ = java.util.Collections.emptyList();;
+      }
+      private byte memoizedIsInitialized = -1;
+      public final boolean isInitialized() {
+        byte isInitialized = memoizedIsInitialized;
+        if (isInitialized != -1) return isInitialized == 1;
+        
+        memoizedIsInitialized = 1;
+        return true;
+      }
+      
+      public void writeTo(com.google.protobuf.CodedOutputStream output)
+                          throws java.io.IOException {
+        getSerializedSize();
+        if (getPathList().size() > 0) {
+          output.writeRawVarint32(10);
+          output.writeRawVarint32(pathMemoizedSerializedSize);
+        }
+        for (int i = 0; i < path_.size(); i++) {
+          output.writeInt32NoTag(path_.get(i));
+        }
+        if (getSpanList().size() > 0) {
+          output.writeRawVarint32(18);
+          output.writeRawVarint32(spanMemoizedSerializedSize);
+        }
+        for (int i = 0; i < span_.size(); i++) {
+          output.writeInt32NoTag(span_.get(i));
+        }
+        getUnknownFields().writeTo(output);
+      }
+      
+      private int memoizedSerializedSize = -1;
+      public int getSerializedSize() {
+        int size = memoizedSerializedSize;
+        if (size != -1) return size;
+      
+        size = 0;
+        {
+          int dataSize = 0;
+          for (int i = 0; i < path_.size(); i++) {
+            dataSize += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(path_.get(i));
+          }
+          size += dataSize;
+          if (!getPathList().isEmpty()) {
+            size += 1;
+            size += com.google.protobuf.CodedOutputStream
+                .computeInt32SizeNoTag(dataSize);
+          }
+          pathMemoizedSerializedSize = dataSize;
+        }
+        {
+          int dataSize = 0;
+          for (int i = 0; i < span_.size(); i++) {
+            dataSize += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(span_.get(i));
+          }
+          size += dataSize;
+          if (!getSpanList().isEmpty()) {
+            size += 1;
+            size += com.google.protobuf.CodedOutputStream
+                .computeInt32SizeNoTag(dataSize);
+          }
+          spanMemoizedSerializedSize = dataSize;
+        }
+        size += getUnknownFields().getSerializedSize();
+        memoizedSerializedSize = size;
+        return size;
+      }
+      
+      private static final long serialVersionUID = 0L;
+      @java.lang.Override
+      protected java.lang.Object writeReplace()
+          throws java.io.ObjectStreamException {
+        return super.writeReplace();
+      }
+      
+      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
+          com.google.protobuf.ByteString data)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data).buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
+          com.google.protobuf.ByteString data,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data, extensionRegistry)
+                 .buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(byte[] data)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data).buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
+          byte[] data,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return newBuilder().mergeFrom(data, extensionRegistry)
+                 .buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(java.io.InputStream input)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input).buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
+          java.io.InputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input, extensionRegistry)
+                 .buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseDelimitedFrom(java.io.InputStream input)
+          throws java.io.IOException {
+        Builder builder = newBuilder();
+        if (builder.mergeDelimitedFrom(input)) {
+          return builder.buildParsed();
+        } else {
+          return null;
+        }
+      }
+      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseDelimitedFrom(
+          java.io.InputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        Builder builder = newBuilder();
+        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+          return builder.buildParsed();
+        } else {
+          return null;
+        }
+      }
+      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
+          com.google.protobuf.CodedInputStream input)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input).buildParsed();
+      }
+      public static com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location parseFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        return newBuilder().mergeFrom(input, extensionRegistry)
+                 .buildParsed();
+      }
+      
+      public static Builder newBuilder() { return Builder.create(); }
+      public Builder newBuilderForType() { return newBuilder(); }
+      public static Builder newBuilder(com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location prototype) {
+        return newBuilder().mergeFrom(prototype);
+      }
+      public Builder toBuilder() { return newBuilder(this); }
+      
+      @java.lang.Override
+      protected Builder newBuilderForType(
+          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+        Builder builder = new Builder(parent);
+        return builder;
+      }
+      public static final class Builder extends
+          com.google.protobuf.GeneratedMessage.Builder<Builder>
+         implements com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder {
+        public static final com.google.protobuf.Descriptors.Descriptor
+            getDescriptor() {
+          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
+        }
+        
+        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+            internalGetFieldAccessorTable() {
+          return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable;
+        }
+        
+        // Construct using com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.newBuilder()
+        private Builder() {
+          maybeForceBuilderInitialization();
+        }
+        
+        private Builder(BuilderParent parent) {
+          super(parent);
+          maybeForceBuilderInitialization();
+        }
+        private void maybeForceBuilderInitialization() {
+          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          }
+        }
+        private static Builder create() {
+          return new Builder();
+        }
+        
+        public Builder clear() {
+          super.clear();
+          path_ = java.util.Collections.emptyList();;
+          bitField0_ = (bitField0_ & ~0x00000001);
+          span_ = java.util.Collections.emptyList();;
+          bitField0_ = (bitField0_ & ~0x00000002);
+          return this;
+        }
+        
+        public Builder clone() {
+          return create().mergeFrom(buildPartial());
+        }
+        
+        public com.google.protobuf.Descriptors.Descriptor
+            getDescriptorForType() {
+          return com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDescriptor();
+        }
+        
+        public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getDefaultInstanceForType() {
+          return com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDefaultInstance();
+        }
+        
+        public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location build() {
+          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location result = buildPartial();
+          if (!result.isInitialized()) {
+            throw newUninitializedMessageException(result);
+          }
+          return result;
+        }
+        
+        private com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location buildParsed()
+            throws com.google.protobuf.InvalidProtocolBufferException {
+          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location result = buildPartial();
+          if (!result.isInitialized()) {
+            throw newUninitializedMessageException(
+              result).asInvalidProtocolBufferException();
+          }
+          return result;
+        }
+        
+        public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location buildPartial() {
+          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location result = new com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location(this);
+          //int from_bitField0_ = bitField0_;
+          if (((bitField0_ & 0x00000001) == 0x00000001)) {
+            path_ = java.util.Collections.unmodifiableList(path_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.path_ = path_;
+          if (((bitField0_ & 0x00000002) == 0x00000002)) {
+            span_ = java.util.Collections.unmodifiableList(span_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.span_ = span_;
+          onBuilt();
+          return result;
+        }
+        
+        public Builder mergeFrom(com.google.protobuf.Message other) {
+          if (other instanceof com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location) {
+            return mergeFrom((com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location)other);
+          } else {
+            super.mergeFrom(other);
+            return this;
+          }
+        }
+        
+        public Builder mergeFrom(com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location other) {
+          if (other == com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDefaultInstance()) return this;
+          if (!other.path_.isEmpty()) {
+            if (path_.isEmpty()) {
+              path_ = other.path_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensurePathIsMutable();
+              path_.addAll(other.path_);
+            }
+            onChanged();
+          }
+          if (!other.span_.isEmpty()) {
+            if (span_.isEmpty()) {
+              span_ = other.span_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureSpanIsMutable();
+              span_.addAll(other.span_);
+            }
+            onChanged();
+          }
+          this.mergeUnknownFields(other.getUnknownFields());
+          return this;
+        }
+        
+        public final boolean isInitialized() {
+          return true;
+        }
+        
+        public Builder mergeFrom(
+            com.google.protobuf.CodedInputStream input,
+            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+            throws java.io.IOException {
+          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+            com.google.protobuf.UnknownFieldSet.newBuilder(
+              this.getUnknownFields());
+          while (true) {
+            int tag = input.readTag();
+            switch (tag) {
+              case 0:
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              default: {
+                if (!parseUnknownField(input, unknownFields,
+                                       extensionRegistry, tag)) {
+                  this.setUnknownFields(unknownFields.build());
+                  onChanged();
+                  return this;
+                }
+                break;
+              }
+              case 8: {
+                ensurePathIsMutable();
+                path_.add(input.readInt32());
+                break;
+              }
+              case 10: {
+                int length = input.readRawVarint32();
+                int limit = input.pushLimit(length);
+                while (input.getBytesUntilLimit() > 0) {
+                  addPath(input.readInt32());
+                }
+                input.popLimit(limit);
+                break;
+              }
+              case 16: {
+                ensureSpanIsMutable();
+                span_.add(input.readInt32());
+                break;
+              }
+              case 18: {
+                int length = input.readRawVarint32();
+                int limit = input.pushLimit(length);
+                while (input.getBytesUntilLimit() > 0) {
+                  addSpan(input.readInt32());
+                }
+                input.popLimit(limit);
+                break;
+              }
+            }
+          }
+        }
+        
+        private int bitField0_;
+        
+        // repeated int32 path = 1 [packed = true];
+        private java.util.List<java.lang.Integer> path_ = java.util.Collections.emptyList();;
+        private void ensurePathIsMutable() {
+          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+            path_ = new java.util.ArrayList<java.lang.Integer>(path_);
+            bitField0_ |= 0x00000001;
+           }
+        }
+        public java.util.List<java.lang.Integer>
+            getPathList() {
+          return java.util.Collections.unmodifiableList(path_);
+        }
+        public int getPathCount() {
+          return path_.size();
+        }
+        public int getPath(int index) {
+          return path_.get(index);
+        }
+        public Builder setPath(
+            int index, int value) {
+          ensurePathIsMutable();
+          path_.set(index, value);
+          onChanged();
+          return this;
+        }
+        public Builder addPath(int value) {
+          ensurePathIsMutable();
+          path_.add(value);
+          onChanged();
+          return this;
+        }
+        public Builder addAllPath(
+            java.lang.Iterable<? extends java.lang.Integer> values) {
+          ensurePathIsMutable();
+          super.addAll(values, path_);
+          onChanged();
+          return this;
+        }
+        public Builder clearPath() {
+          path_ = java.util.Collections.emptyList();;
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+          return this;
+        }
+        
+        // repeated int32 span = 2 [packed = true];
+        private java.util.List<java.lang.Integer> span_ = java.util.Collections.emptyList();;
+        private void ensureSpanIsMutable() {
+          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+            span_ = new java.util.ArrayList<java.lang.Integer>(span_);
+            bitField0_ |= 0x00000002;
+           }
+        }
+        public java.util.List<java.lang.Integer>
+            getSpanList() {
+          return java.util.Collections.unmodifiableList(span_);
+        }
+        public int getSpanCount() {
+          return span_.size();
+        }
+        public int getSpan(int index) {
+          return span_.get(index);
+        }
+        public Builder setSpan(
+            int index, int value) {
+          ensureSpanIsMutable();
+          span_.set(index, value);
+          onChanged();
+          return this;
+        }
+        public Builder addSpan(int value) {
+          ensureSpanIsMutable();
+          span_.add(value);
+          onChanged();
+          return this;
+        }
+        public Builder addAllSpan(
+            java.lang.Iterable<? extends java.lang.Integer> values) {
+          ensureSpanIsMutable();
+          super.addAll(values, span_);
+          onChanged();
+          return this;
+        }
+        public Builder clearSpan() {
+          span_ = java.util.Collections.emptyList();;
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+          return this;
+        }
+        
+        // @@protoc_insertion_point(builder_scope:google.protobuf.SourceCodeInfo.Location)
+      }
+      
+      static {
+        defaultInstance = new Location(true);
+        defaultInstance.initFields();
+      }
+      
+      // @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo.Location)
+    }
+    
+    // repeated .google.protobuf.SourceCodeInfo.Location location = 1;
+    public static final int LOCATION_FIELD_NUMBER = 1;
+    private java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> location_;
+    public java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> getLocationList() {
+      return location_;
+    }
+    public java.util.List<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
+        getLocationOrBuilderList() {
+      return location_;
+    }
+    public int getLocationCount() {
+      return location_.size();
+    }
+    public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getLocation(int index) {
+      return location_.get(index);
+    }
+    public com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder getLocationOrBuilder(
+        int index) {
+      return location_.get(index);
+    }
+    
+    private void initFields() {
+      location_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      for (int i = 0; i < location_.size(); i++) {
+        output.writeMessage(1, location_.get(i));
+      }
+      getUnknownFields().writeTo(output);
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      for (int i = 0; i < location_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, location_.get(i));
+      }
+      size += getUnknownFields().getSerializedSize();
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static com.google.protobuf.DescriptorProtos.SourceCodeInfo parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(com.google.protobuf.DescriptorProtos.SourceCodeInfo prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessage.Builder<Builder>
+       implements com.google.protobuf.DescriptorProtos.SourceCodeInfoOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_descriptor;
+      }
+      
+      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return com.google.protobuf.DescriptorProtos.internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable;
+      }
+      
+      // Construct using com.google.protobuf.DescriptorProtos.SourceCodeInfo.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private Builder(BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
+          getLocationFieldBuilder();
+        }
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        if (locationBuilder_ == null) {
+          location_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          locationBuilder_.clear();
+        }
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDescriptor();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.SourceCodeInfo getDefaultInstanceForType() {
+        return com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance();
+      }
+      
+      public com.google.protobuf.DescriptorProtos.SourceCodeInfo build() {
+        com.google.protobuf.DescriptorProtos.SourceCodeInfo result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private com.google.protobuf.DescriptorProtos.SourceCodeInfo buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        com.google.protobuf.DescriptorProtos.SourceCodeInfo result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public com.google.protobuf.DescriptorProtos.SourceCodeInfo buildPartial() {
+        com.google.protobuf.DescriptorProtos.SourceCodeInfo result = new com.google.protobuf.DescriptorProtos.SourceCodeInfo(this);
+        //int from_bitField0_ = bitField0_;
+        if (locationBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) == 0x00000001)) {
+            location_ = java.util.Collections.unmodifiableList(location_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.location_ = location_;
+        } else {
+          result.location_ = locationBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof com.google.protobuf.DescriptorProtos.SourceCodeInfo) {
+          return mergeFrom((com.google.protobuf.DescriptorProtos.SourceCodeInfo)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+      
+      public Builder mergeFrom(com.google.protobuf.DescriptorProtos.SourceCodeInfo other) {
+        if (other == com.google.protobuf.DescriptorProtos.SourceCodeInfo.getDefaultInstance()) return this;
+        if (locationBuilder_ == null) {
+          if (!other.location_.isEmpty()) {
+            if (location_.isEmpty()) {
+              location_ = other.location_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureLocationIsMutable();
+              location_.addAll(other.location_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.location_.isEmpty()) {
+            if (locationBuilder_.isEmpty()) {
+              locationBuilder_.dispose();
+              locationBuilder_ = null;
+              location_ = other.location_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              locationBuilder_ = 
+                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
+                   getLocationFieldBuilder() : null;
+            } else {
+              locationBuilder_.addAllMessages(other.location_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.getUnknownFields());
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder(
+            this.getUnknownFields());
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              this.setUnknownFields(unknownFields.build());
+              onChanged();
+              return this;
+            default: {
+              if (!parseUnknownField(input, unknownFields,
+                                     extensionRegistry, tag)) {
+                this.setUnknownFields(unknownFields.build());
+                onChanged();
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder subBuilder = com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addLocation(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // repeated .google.protobuf.SourceCodeInfo.Location location = 1;
+      private java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> location_ =
+        java.util.Collections.emptyList();
+      private void ensureLocationIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          location_ = new java.util.ArrayList<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location>(location_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> locationBuilder_;
+      
+      public java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> getLocationList() {
+        if (locationBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(location_);
+        } else {
+          return locationBuilder_.getMessageList();
+        }
+      }
+      public int getLocationCount() {
+        if (locationBuilder_ == null) {
+          return location_.size();
+        } else {
+          return locationBuilder_.getCount();
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location getLocation(int index) {
+        if (locationBuilder_ == null) {
+          return location_.get(index);
+        } else {
+          return locationBuilder_.getMessage(index);
+        }
+      }
+      public Builder setLocation(
+          int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location value) {
+        if (locationBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLocationIsMutable();
+          location_.set(index, value);
+          onChanged();
+        } else {
+          locationBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      public Builder setLocation(
+          int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder builderForValue) {
+        if (locationBuilder_ == null) {
+          ensureLocationIsMutable();
+          location_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          locationBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addLocation(com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location value) {
+        if (locationBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLocationIsMutable();
+          location_.add(value);
+          onChanged();
+        } else {
+          locationBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      public Builder addLocation(
+          int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location value) {
+        if (locationBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLocationIsMutable();
+          location_.add(index, value);
+          onChanged();
+        } else {
+          locationBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      public Builder addLocation(
+          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder builderForValue) {
+        if (locationBuilder_ == null) {
+          ensureLocationIsMutable();
+          location_.add(builderForValue.build());
+          onChanged();
+        } else {
+          locationBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addLocation(
+          int index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder builderForValue) {
+        if (locationBuilder_ == null) {
+          ensureLocationIsMutable();
+          location_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          locationBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      public Builder addAllLocation(
+          java.lang.Iterable<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location> values) {
+        if (locationBuilder_ == null) {
+          ensureLocationIsMutable();
+          super.addAll(values, location_);
+          onChanged();
+        } else {
+          locationBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      public Builder clearLocation() {
+        if (locationBuilder_ == null) {
+          location_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          locationBuilder_.clear();
+        }
+        return this;
+      }
+      public Builder removeLocation(int index) {
+        if (locationBuilder_ == null) {
+          ensureLocationIsMutable();
+          location_.remove(index);
+          onChanged();
+        } else {
+          locationBuilder_.remove(index);
+        }
+        return this;
+      }
+      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder getLocationBuilder(
+          int index) {
+        return getLocationFieldBuilder().getBuilder(index);
+      }
+      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder getLocationOrBuilder(
+          int index) {
+        if (locationBuilder_ == null) {
+          return location_.get(index);  } else {
+          return locationBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      public java.util.List<? extends com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
+           getLocationOrBuilderList() {
+        if (locationBuilder_ != null) {
+          return locationBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(location_);
+        }
+      }
+      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder addLocationBuilder() {
+        return getLocationFieldBuilder().addBuilder(
+            com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDefaultInstance());
+      }
+      public com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder addLocationBuilder(
+          int index) {
+        return getLocationFieldBuilder().addBuilder(
+            index, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.getDefaultInstance());
+      }
+      public java.util.List<com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder> 
+           getLocationBuilderList() {
+        return getLocationFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilder<
+          com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder> 
+          getLocationFieldBuilder() {
+        if (locationBuilder_ == null) {
+          locationBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
+              com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location, com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder, com.google.protobuf.DescriptorProtos.SourceCodeInfo.LocationOrBuilder>(
+                  location_,
+                  ((bitField0_ & 0x00000001) == 0x00000001),
+                  getParentForChildren(),
+                  isClean());
+          location_ = null;
+        }
+        return locationBuilder_;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:google.protobuf.SourceCodeInfo)
+    }
+    
+    static {
+      defaultInstance = new SourceCodeInfo(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo)
+  }
+  
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_FileDescriptorSet_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_FileDescriptorProto_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_DescriptorProto_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_DescriptorProto_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_FieldDescriptorProto_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_EnumDescriptorProto_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_EnumValueDescriptorProto_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_ServiceDescriptorProto_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_MethodDescriptorProto_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_FileOptions_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_FileOptions_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_MessageOptions_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_MessageOptions_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_FieldOptions_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_FieldOptions_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_EnumOptions_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_EnumOptions_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_EnumValueOptions_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_ServiceOptions_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_ServiceOptions_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_MethodOptions_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_MethodOptions_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_UninterpretedOption_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_SourceCodeInfo_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable;
+  private static com.google.protobuf.Descriptors.Descriptor
+    internal_static_google_protobuf_SourceCodeInfo_Location_descriptor;
+  private static
+    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+      internal_static_google_protobuf_SourceCodeInfo_Location_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 google/protobuf/descriptor.proto\022\017goog" +
+      "le.protobuf\"G\n\021FileDescriptorSet\0222\n\004file" +
+      "\030\001 \003(\0132$.google.protobuf.FileDescriptorP" +
+      "roto\"\227\003\n\023FileDescriptorProto\022\014\n\004name\030\001 \001" +
+      "(\t\022\017\n\007package\030\002 \001(\t\022\022\n\ndependency\030\003 \003(\t\022" +
+      "6\n\014message_type\030\004 \003(\0132 .google.protobuf." +
+      "DescriptorProto\0227\n\tenum_type\030\005 \003(\0132$.goo" +
+      "gle.protobuf.EnumDescriptorProto\0228\n\007serv" +
+      "ice\030\006 \003(\0132\'.google.protobuf.ServiceDescr" +
+      "iptorProto\0228\n\textension\030\007 \003(\0132%.google.p",
+      "rotobuf.FieldDescriptorProto\022-\n\007options\030" +
+      "\010 \001(\0132\034.google.protobuf.FileOptions\0229\n\020s" +
+      "ource_code_info\030\t \001(\0132\037.google.protobuf." +
+      "SourceCodeInfo\"\251\003\n\017DescriptorProto\022\014\n\004na" +
+      "me\030\001 \001(\t\0224\n\005field\030\002 \003(\0132%.google.protobu" +
+      "f.FieldDescriptorProto\0228\n\textension\030\006 \003(" +
+      "\0132%.google.protobuf.FieldDescriptorProto" +
+      "\0225\n\013nested_type\030\003 \003(\0132 .google.protobuf." +
+      "DescriptorProto\0227\n\tenum_type\030\004 \003(\0132$.goo" +
+      "gle.protobuf.EnumDescriptorProto\022H\n\017exte",
+      "nsion_range\030\005 \003(\0132/.google.protobuf.Desc" +
+      "riptorProto.ExtensionRange\0220\n\007options\030\007 " +
+      "\001(\0132\037.google.protobuf.MessageOptions\032,\n\016" +
+      "ExtensionRange\022\r\n\005start\030\001 \001(\005\022\013\n\003end\030\002 \001" +
+      "(\005\"\224\005\n\024FieldDescriptorProto\022\014\n\004name\030\001 \001(" +
+      "\t\022\016\n\006number\030\003 \001(\005\022:\n\005label\030\004 \001(\0162+.googl" +
+      "e.protobuf.FieldDescriptorProto.Label\0228\n" +
+      "\004type\030\005 \001(\0162*.google.protobuf.FieldDescr" +
+      "iptorProto.Type\022\021\n\ttype_name\030\006 \001(\t\022\020\n\010ex" +
+      "tendee\030\002 \001(\t\022\025\n\rdefault_value\030\007 \001(\t\022.\n\007o",
+      "ptions\030\010 \001(\0132\035.google.protobuf.FieldOpti" +
+      "ons\"\266\002\n\004Type\022\017\n\013TYPE_DOUBLE\020\001\022\016\n\nTYPE_FL" +
+      "OAT\020\002\022\016\n\nTYPE_INT64\020\003\022\017\n\013TYPE_UINT64\020\004\022\016" +
+      "\n\nTYPE_INT32\020\005\022\020\n\014TYPE_FIXED64\020\006\022\020\n\014TYPE" +
+      "_FIXED32\020\007\022\r\n\tTYPE_BOOL\020\010\022\017\n\013TYPE_STRING" +
+      "\020\t\022\016\n\nTYPE_GROUP\020\n\022\020\n\014TYPE_MESSAGE\020\013\022\016\n\n" +
+      "TYPE_BYTES\020\014\022\017\n\013TYPE_UINT32\020\r\022\r\n\tTYPE_EN" +
+      "UM\020\016\022\021\n\rTYPE_SFIXED32\020\017\022\021\n\rTYPE_SFIXED64" +
+      "\020\020\022\017\n\013TYPE_SINT32\020\021\022\017\n\013TYPE_SINT64\020\022\"C\n\005" +
+      "Label\022\022\n\016LABEL_OPTIONAL\020\001\022\022\n\016LABEL_REQUI",
+      "RED\020\002\022\022\n\016LABEL_REPEATED\020\003\"\214\001\n\023EnumDescri" +
+      "ptorProto\022\014\n\004name\030\001 \001(\t\0228\n\005value\030\002 \003(\0132)" +
+      ".google.protobuf.EnumValueDescriptorProt" +
+      "o\022-\n\007options\030\003 \001(\0132\034.google.protobuf.Enu" +
+      "mOptions\"l\n\030EnumValueDescriptorProto\022\014\n\004" +
+      "name\030\001 \001(\t\022\016\n\006number\030\002 \001(\005\0222\n\007options\030\003 " +
+      "\001(\0132!.google.protobuf.EnumValueOptions\"\220" +
+      "\001\n\026ServiceDescriptorProto\022\014\n\004name\030\001 \001(\t\022" +
+      "6\n\006method\030\002 \003(\0132&.google.protobuf.Method" +
+      "DescriptorProto\0220\n\007options\030\003 \001(\0132\037.googl",
+      "e.protobuf.ServiceOptions\"\177\n\025MethodDescr" +
+      "iptorProto\022\014\n\004name\030\001 \001(\t\022\022\n\ninput_type\030\002" +
+      " \001(\t\022\023\n\013output_type\030\003 \001(\t\022/\n\007options\030\004 \001" +
+      "(\0132\036.google.protobuf.MethodOptions\"\325\003\n\013F" +
+      "ileOptions\022\024\n\014java_package\030\001 \001(\t\022\034\n\024java" +
+      "_outer_classname\030\010 \001(\t\022\"\n\023java_multiple_" +
+      "files\030\n \001(\010:\005false\022,\n\035java_generate_equa" +
+      "ls_and_hash\030\024 \001(\010:\005false\022F\n\014optimize_for" +
+      "\030\t \001(\0162).google.protobuf.FileOptions.Opt" +
+      "imizeMode:\005SPEED\022\"\n\023cc_generic_services\030",
+      "\020 \001(\010:\005false\022$\n\025java_generic_services\030\021 " +
+      "\001(\010:\005false\022\"\n\023py_generic_services\030\022 \001(\010:" +
+      "\005false\022C\n\024uninterpreted_option\030\347\007 \003(\0132$." +
+      "google.protobuf.UninterpretedOption\":\n\014O" +
+      "ptimizeMode\022\t\n\005SPEED\020\001\022\r\n\tCODE_SIZE\020\002\022\020\n" +
+      "\014LITE_RUNTIME\020\003*\t\010\350\007\020\200\200\200\200\002\"\270\001\n\016MessageOp" +
+      "tions\022&\n\027message_set_wire_format\030\001 \001(\010:\005" +
+      "false\022.\n\037no_standard_descriptor_accessor" +
+      "\030\002 \001(\010:\005false\022C\n\024uninterpreted_option\030\347\007" +
+      " \003(\0132$.google.protobuf.UninterpretedOpti",
+      "on*\t\010\350\007\020\200\200\200\200\002\"\224\002\n\014FieldOptions\022:\n\005ctype\030" +
+      "\001 \001(\0162#.google.protobuf.FieldOptions.CTy" +
+      "pe:\006STRING\022\016\n\006packed\030\002 \001(\010\022\031\n\ndeprecated" +
+      "\030\003 \001(\010:\005false\022\034\n\024experimental_map_key\030\t " +
+      "\001(\t\022C\n\024uninterpreted_option\030\347\007 \003(\0132$.goo" +
+      "gle.protobuf.UninterpretedOption\"/\n\005CTyp" +
+      "e\022\n\n\006STRING\020\000\022\010\n\004CORD\020\001\022\020\n\014STRING_PIECE\020" +
+      "\002*\t\010\350\007\020\200\200\200\200\002\"]\n\013EnumOptions\022C\n\024uninterpr" +
+      "eted_option\030\347\007 \003(\0132$.google.protobuf.Uni" +
+      "nterpretedOption*\t\010\350\007\020\200\200\200\200\002\"b\n\020EnumValue",
+      "Options\022C\n\024uninterpreted_option\030\347\007 \003(\0132$" +
+      ".google.protobuf.UninterpretedOption*\t\010\350" +
+      "\007\020\200\200\200\200\002\"`\n\016ServiceOptions\022C\n\024uninterpret" +
+      "ed_option\030\347\007 \003(\0132$.google.protobuf.Unint" +
+      "erpretedOption*\t\010\350\007\020\200\200\200\200\002\"_\n\rMethodOptio" +
+      "ns\022C\n\024uninterpreted_option\030\347\007 \003(\0132$.goog" +
+      "le.protobuf.UninterpretedOption*\t\010\350\007\020\200\200\200" +
+      "\200\002\"\236\002\n\023UninterpretedOption\022;\n\004name\030\002 \003(\013" +
+      "2-.google.protobuf.UninterpretedOption.N" +
+      "amePart\022\030\n\020identifier_value\030\003 \001(\t\022\032\n\022pos",
+      "itive_int_value\030\004 \001(\004\022\032\n\022negative_int_va" +
+      "lue\030\005 \001(\003\022\024\n\014double_value\030\006 \001(\001\022\024\n\014strin" +
+      "g_value\030\007 \001(\014\022\027\n\017aggregate_value\030\010 \001(\t\0323" +
+      "\n\010NamePart\022\021\n\tname_part\030\001 \002(\t\022\024\n\014is_exte" +
+      "nsion\030\002 \002(\010\"|\n\016SourceCodeInfo\022:\n\010locatio" +
+      "n\030\001 \003(\0132(.google.protobuf.SourceCodeInfo" +
+      ".Location\032.\n\010Location\022\020\n\004path\030\001 \003(\005B\002\020\001\022" +
+      "\020\n\004span\030\002 \003(\005B\002\020\001B)\n\023com.google.protobuf" +
+      "B\020DescriptorProtosH\001"
+    };
+    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
+      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
+        public com.google.protobuf.ExtensionRegistry assignDescriptors(
+            com.google.protobuf.Descriptors.FileDescriptor root) {
+          descriptor = root;
+          internal_static_google_protobuf_FileDescriptorSet_descriptor =
+            getDescriptor().getMessageTypes().get(0);
+          internal_static_google_protobuf_FileDescriptorSet_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_FileDescriptorSet_descriptor,
+              new java.lang.String[] { "File", },
+              com.google.protobuf.DescriptorProtos.FileDescriptorSet.class,
+              com.google.protobuf.DescriptorProtos.FileDescriptorSet.Builder.class);
+          internal_static_google_protobuf_FileDescriptorProto_descriptor =
+            getDescriptor().getMessageTypes().get(1);
+          internal_static_google_protobuf_FileDescriptorProto_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_FileDescriptorProto_descriptor,
+              new java.lang.String[] { "Name", "Package", "Dependency", "MessageType", "EnumType", "Service", "Extension", "Options", "SourceCodeInfo", },
+              com.google.protobuf.DescriptorProtos.FileDescriptorProto.class,
+              com.google.protobuf.DescriptorProtos.FileDescriptorProto.Builder.class);
+          internal_static_google_protobuf_DescriptorProto_descriptor =
+            getDescriptor().getMessageTypes().get(2);
+          internal_static_google_protobuf_DescriptorProto_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_DescriptorProto_descriptor,
+              new java.lang.String[] { "Name", "Field", "Extension", "NestedType", "EnumType", "ExtensionRange", "Options", },
+              com.google.protobuf.DescriptorProtos.DescriptorProto.class,
+              com.google.protobuf.DescriptorProtos.DescriptorProto.Builder.class);
+          internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor =
+            internal_static_google_protobuf_DescriptorProto_descriptor.getNestedTypes().get(0);
+          internal_static_google_protobuf_DescriptorProto_ExtensionRange_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_DescriptorProto_ExtensionRange_descriptor,
+              new java.lang.String[] { "Start", "End", },
+              com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.class,
+              com.google.protobuf.DescriptorProtos.DescriptorProto.ExtensionRange.Builder.class);
+          internal_static_google_protobuf_FieldDescriptorProto_descriptor =
+            getDescriptor().getMessageTypes().get(3);
+          internal_static_google_protobuf_FieldDescriptorProto_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_FieldDescriptorProto_descriptor,
+              new java.lang.String[] { "Name", "Number", "Label", "Type", "TypeName", "Extendee", "DefaultValue", "Options", },
+              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.class,
+              com.google.protobuf.DescriptorProtos.FieldDescriptorProto.Builder.class);
+          internal_static_google_protobuf_EnumDescriptorProto_descriptor =
+            getDescriptor().getMessageTypes().get(4);
+          internal_static_google_protobuf_EnumDescriptorProto_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_EnumDescriptorProto_descriptor,
+              new java.lang.String[] { "Name", "Value", "Options", },
+              com.google.protobuf.DescriptorProtos.EnumDescriptorProto.class,
+              com.google.protobuf.DescriptorProtos.EnumDescriptorProto.Builder.class);
+          internal_static_google_protobuf_EnumValueDescriptorProto_descriptor =
+            getDescriptor().getMessageTypes().get(5);
+          internal_static_google_protobuf_EnumValueDescriptorProto_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_EnumValueDescriptorProto_descriptor,
+              new java.lang.String[] { "Name", "Number", "Options", },
+              com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.class,
+              com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto.Builder.class);
+          internal_static_google_protobuf_ServiceDescriptorProto_descriptor =
+            getDescriptor().getMessageTypes().get(6);
+          internal_static_google_protobuf_ServiceDescriptorProto_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_ServiceDescriptorProto_descriptor,
+              new java.lang.String[] { "Name", "Method", "Options", },
+              com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.class,
+              com.google.protobuf.DescriptorProtos.ServiceDescriptorProto.Builder.class);
+          internal_static_google_protobuf_MethodDescriptorProto_descriptor =
+            getDescriptor().getMessageTypes().get(7);
+          internal_static_google_protobuf_MethodDescriptorProto_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_MethodDescriptorProto_descriptor,
+              new java.lang.String[] { "Name", "InputType", "OutputType", "Options", },
+              com.google.protobuf.DescriptorProtos.MethodDescriptorProto.class,
+              com.google.protobuf.DescriptorProtos.MethodDescriptorProto.Builder.class);
+          internal_static_google_protobuf_FileOptions_descriptor =
+            getDescriptor().getMessageTypes().get(8);
+          internal_static_google_protobuf_FileOptions_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_FileOptions_descriptor,
+              new java.lang.String[] { "JavaPackage", "JavaOuterClassname", "JavaMultipleFiles", "JavaGenerateEqualsAndHash", "OptimizeFor", "CcGenericServices", "JavaGenericServices", "PyGenericServices", "UninterpretedOption", },
+              com.google.protobuf.DescriptorProtos.FileOptions.class,
+              com.google.protobuf.DescriptorProtos.FileOptions.Builder.class);
+          internal_static_google_protobuf_MessageOptions_descriptor =
+            getDescriptor().getMessageTypes().get(9);
+          internal_static_google_protobuf_MessageOptions_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_MessageOptions_descriptor,
+              new java.lang.String[] { "MessageSetWireFormat", "NoStandardDescriptorAccessor", "UninterpretedOption", },
+              com.google.protobuf.DescriptorProtos.MessageOptions.class,
+              com.google.protobuf.DescriptorProtos.MessageOptions.Builder.class);
+          internal_static_google_protobuf_FieldOptions_descriptor =
+            getDescriptor().getMessageTypes().get(10);
+          internal_static_google_protobuf_FieldOptions_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_FieldOptions_descriptor,
+              new java.lang.String[] { "Ctype", "Packed", "Deprecated", "ExperimentalMapKey", "UninterpretedOption", },
+              com.google.protobuf.DescriptorProtos.FieldOptions.class,
+              com.google.protobuf.DescriptorProtos.FieldOptions.Builder.class);
+          internal_static_google_protobuf_EnumOptions_descriptor =
+            getDescriptor().getMessageTypes().get(11);
+          internal_static_google_protobuf_EnumOptions_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_EnumOptions_descriptor,
+              new java.lang.String[] { "UninterpretedOption", },
+              com.google.protobuf.DescriptorProtos.EnumOptions.class,
+              com.google.protobuf.DescriptorProtos.EnumOptions.Builder.class);
+          internal_static_google_protobuf_EnumValueOptions_descriptor =
+            getDescriptor().getMessageTypes().get(12);
+          internal_static_google_protobuf_EnumValueOptions_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_EnumValueOptions_descriptor,
+              new java.lang.String[] { "UninterpretedOption", },
+              com.google.protobuf.DescriptorProtos.EnumValueOptions.class,
+              com.google.protobuf.DescriptorProtos.EnumValueOptions.Builder.class);
+          internal_static_google_protobuf_ServiceOptions_descriptor =
+            getDescriptor().getMessageTypes().get(13);
+          internal_static_google_protobuf_ServiceOptions_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_ServiceOptions_descriptor,
+              new java.lang.String[] { "UninterpretedOption", },
+              com.google.protobuf.DescriptorProtos.ServiceOptions.class,
+              com.google.protobuf.DescriptorProtos.ServiceOptions.Builder.class);
+          internal_static_google_protobuf_MethodOptions_descriptor =
+            getDescriptor().getMessageTypes().get(14);
+          internal_static_google_protobuf_MethodOptions_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_MethodOptions_descriptor,
+              new java.lang.String[] { "UninterpretedOption", },
+              com.google.protobuf.DescriptorProtos.MethodOptions.class,
+              com.google.protobuf.DescriptorProtos.MethodOptions.Builder.class);
+          internal_static_google_protobuf_UninterpretedOption_descriptor =
+            getDescriptor().getMessageTypes().get(15);
+          internal_static_google_protobuf_UninterpretedOption_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_UninterpretedOption_descriptor,
+              new java.lang.String[] { "Name", "IdentifierValue", "PositiveIntValue", "NegativeIntValue", "DoubleValue", "StringValue", "AggregateValue", },
+              com.google.protobuf.DescriptorProtos.UninterpretedOption.class,
+              com.google.protobuf.DescriptorProtos.UninterpretedOption.Builder.class);
+          internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor =
+            internal_static_google_protobuf_UninterpretedOption_descriptor.getNestedTypes().get(0);
+          internal_static_google_protobuf_UninterpretedOption_NamePart_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_UninterpretedOption_NamePart_descriptor,
+              new java.lang.String[] { "NamePart", "IsExtension", },
+              com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.class,
+              com.google.protobuf.DescriptorProtos.UninterpretedOption.NamePart.Builder.class);
+          internal_static_google_protobuf_SourceCodeInfo_descriptor =
+            getDescriptor().getMessageTypes().get(16);
+          internal_static_google_protobuf_SourceCodeInfo_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_SourceCodeInfo_descriptor,
+              new java.lang.String[] { "Location", },
+              com.google.protobuf.DescriptorProtos.SourceCodeInfo.class,
+              com.google.protobuf.DescriptorProtos.SourceCodeInfo.Builder.class);
+          internal_static_google_protobuf_SourceCodeInfo_Location_descriptor =
+            internal_static_google_protobuf_SourceCodeInfo_descriptor.getNestedTypes().get(0);
+          internal_static_google_protobuf_SourceCodeInfo_Location_fieldAccessorTable = new
+            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+              internal_static_google_protobuf_SourceCodeInfo_Location_descriptor,
+              new java.lang.String[] { "Path", "Span", },
+              com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.class,
+              com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location.Builder.class);
+          return null;
+        }
+      };
+    com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        }, assigner);
+  }
+  
+  // @@protoc_insertion_point(outer_class_scope)
+}
Index: /applications/editors/josm/plugins/pbf/gen/crosby/binary/Fileformat.java
===================================================================
--- /applications/editors/josm/plugins/pbf/gen/crosby/binary/Fileformat.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/gen/crosby/binary/Fileformat.java	(revision 26961)
@@ -0,0 +1,992 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: src/fileformat.proto
+
+package crosby.binary;
+
+public final class Fileformat {
+  private Fileformat() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+  public interface BlobOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+    
+    // optional bytes raw = 1;
+    boolean hasRaw();
+    com.google.protobuf.ByteString getRaw();
+    
+    // optional int32 raw_size = 2;
+    boolean hasRawSize();
+    int getRawSize();
+    
+    // optional bytes zlib_data = 3;
+    boolean hasZlibData();
+    com.google.protobuf.ByteString getZlibData();
+    
+    // optional bytes lzma_data = 4;
+    boolean hasLzmaData();
+    com.google.protobuf.ByteString getLzmaData();
+    
+    // optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];
+    @java.lang.Deprecated boolean hasOBSOLETEBzip2Data();
+    @java.lang.Deprecated com.google.protobuf.ByteString getOBSOLETEBzip2Data();
+  }
+  public static final class Blob extends
+      com.google.protobuf.GeneratedMessageLite
+      implements BlobOrBuilder {
+    // Use Blob.newBuilder() to construct.
+    private Blob(Builder builder) {
+      super(builder);
+    }
+    private Blob(boolean noInit) {}
+    
+    private static final Blob defaultInstance;
+    public static Blob getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public Blob getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    private int bitField0_;
+    // optional bytes raw = 1;
+    public static final int RAW_FIELD_NUMBER = 1;
+    private com.google.protobuf.ByteString raw_;
+    public boolean hasRaw() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public com.google.protobuf.ByteString getRaw() {
+      return raw_;
+    }
+    
+    // optional int32 raw_size = 2;
+    public static final int RAW_SIZE_FIELD_NUMBER = 2;
+    private int rawSize_;
+    public boolean hasRawSize() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public int getRawSize() {
+      return rawSize_;
+    }
+    
+    // optional bytes zlib_data = 3;
+    public static final int ZLIB_DATA_FIELD_NUMBER = 3;
+    private com.google.protobuf.ByteString zlibData_;
+    public boolean hasZlibData() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public com.google.protobuf.ByteString getZlibData() {
+      return zlibData_;
+    }
+    
+    // optional bytes lzma_data = 4;
+    public static final int LZMA_DATA_FIELD_NUMBER = 4;
+    private com.google.protobuf.ByteString lzmaData_;
+    public boolean hasLzmaData() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public com.google.protobuf.ByteString getLzmaData() {
+      return lzmaData_;
+    }
+    
+    // optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];
+    public static final int OBSOLETE_BZIP2_DATA_FIELD_NUMBER = 5;
+    private com.google.protobuf.ByteString oBSOLETEBzip2Data_;
+    @java.lang.Deprecated public boolean hasOBSOLETEBzip2Data() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    @java.lang.Deprecated public com.google.protobuf.ByteString getOBSOLETEBzip2Data() {
+      return oBSOLETEBzip2Data_;
+    }
+    
+    private void initFields() {
+      raw_ = com.google.protobuf.ByteString.EMPTY;
+      rawSize_ = 0;
+      zlibData_ = com.google.protobuf.ByteString.EMPTY;
+      lzmaData_ = com.google.protobuf.ByteString.EMPTY;
+      oBSOLETEBzip2Data_ = com.google.protobuf.ByteString.EMPTY;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, raw_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt32(2, rawSize_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBytes(3, zlibData_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeBytes(4, lzmaData_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeBytes(5, oBSOLETEBzip2Data_);
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, raw_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(2, rawSize_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(3, zlibData_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(4, lzmaData_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(5, oBSOLETEBzip2Data_);
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static crosby.binary.Fileformat.Blob parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Fileformat.Blob parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Fileformat.Blob parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Fileformat.Blob parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Fileformat.Blob parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Fileformat.Blob parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Fileformat.Blob parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Fileformat.Blob parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Fileformat.Blob parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Fileformat.Blob parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Fileformat.Blob prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Fileformat.Blob, Builder>
+        implements crosby.binary.Fileformat.BlobOrBuilder {
+      // Construct using crosby.binary.Fileformat.Blob.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        raw_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        rawSize_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        zlibData_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        lzmaData_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        oBSOLETEBzip2Data_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public crosby.binary.Fileformat.Blob getDefaultInstanceForType() {
+        return crosby.binary.Fileformat.Blob.getDefaultInstance();
+      }
+      
+      public crosby.binary.Fileformat.Blob build() {
+        crosby.binary.Fileformat.Blob result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private crosby.binary.Fileformat.Blob buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        crosby.binary.Fileformat.Blob result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public crosby.binary.Fileformat.Blob buildPartial() {
+        crosby.binary.Fileformat.Blob result = new crosby.binary.Fileformat.Blob(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.raw_ = raw_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.rawSize_ = rawSize_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.zlibData_ = zlibData_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.lzmaData_ = lzmaData_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.oBSOLETEBzip2Data_ = oBSOLETEBzip2Data_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+      
+      public Builder mergeFrom(crosby.binary.Fileformat.Blob other) {
+        if (other == crosby.binary.Fileformat.Blob.getDefaultInstance()) return this;
+        if (other.hasRaw()) {
+          setRaw(other.getRaw());
+        }
+        if (other.hasRawSize()) {
+          setRawSize(other.getRawSize());
+        }
+        if (other.hasZlibData()) {
+          setZlibData(other.getZlibData());
+        }
+        if (other.hasLzmaData()) {
+          setLzmaData(other.getLzmaData());
+        }
+        if (other.hasOBSOLETEBzip2Data()) {
+          setOBSOLETEBzip2Data(other.getOBSOLETEBzip2Data());
+        }
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              
+              return this;
+            default: {
+              if (!parseUnknownField(input, extensionRegistry, tag)) {
+                
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              raw_ = input.readBytes();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              rawSize_ = input.readInt32();
+              break;
+            }
+            case 26: {
+              bitField0_ |= 0x00000004;
+              zlibData_ = input.readBytes();
+              break;
+            }
+            case 34: {
+              bitField0_ |= 0x00000008;
+              lzmaData_ = input.readBytes();
+              break;
+            }
+            case 42: {
+              bitField0_ |= 0x00000010;
+              oBSOLETEBzip2Data_ = input.readBytes();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional bytes raw = 1;
+      private com.google.protobuf.ByteString raw_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasRaw() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public com.google.protobuf.ByteString getRaw() {
+        return raw_;
+      }
+      public Builder setRaw(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        raw_ = value;
+        
+        return this;
+      }
+      public Builder clearRaw() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        raw_ = getDefaultInstance().getRaw();
+        
+        return this;
+      }
+      
+      // optional int32 raw_size = 2;
+      private int rawSize_ ;
+      public boolean hasRawSize() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public int getRawSize() {
+        return rawSize_;
+      }
+      public Builder setRawSize(int value) {
+        bitField0_ |= 0x00000002;
+        rawSize_ = value;
+        
+        return this;
+      }
+      public Builder clearRawSize() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        rawSize_ = 0;
+        
+        return this;
+      }
+      
+      // optional bytes zlib_data = 3;
+      private com.google.protobuf.ByteString zlibData_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasZlibData() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public com.google.protobuf.ByteString getZlibData() {
+        return zlibData_;
+      }
+      public Builder setZlibData(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000004;
+        zlibData_ = value;
+        
+        return this;
+      }
+      public Builder clearZlibData() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        zlibData_ = getDefaultInstance().getZlibData();
+        
+        return this;
+      }
+      
+      // optional bytes lzma_data = 4;
+      private com.google.protobuf.ByteString lzmaData_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasLzmaData() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public com.google.protobuf.ByteString getLzmaData() {
+        return lzmaData_;
+      }
+      public Builder setLzmaData(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000008;
+        lzmaData_ = value;
+        
+        return this;
+      }
+      public Builder clearLzmaData() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        lzmaData_ = getDefaultInstance().getLzmaData();
+        
+        return this;
+      }
+      
+      // optional bytes OBSOLETE_bzip2_data = 5 [deprecated = true];
+      private com.google.protobuf.ByteString oBSOLETEBzip2Data_ = com.google.protobuf.ByteString.EMPTY;
+      @java.lang.Deprecated public boolean hasOBSOLETEBzip2Data() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      @java.lang.Deprecated public com.google.protobuf.ByteString getOBSOLETEBzip2Data() {
+        return oBSOLETEBzip2Data_;
+      }
+      @java.lang.Deprecated public Builder setOBSOLETEBzip2Data(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000010;
+        oBSOLETEBzip2Data_ = value;
+        
+        return this;
+      }
+      @java.lang.Deprecated public Builder clearOBSOLETEBzip2Data() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        oBSOLETEBzip2Data_ = getDefaultInstance().getOBSOLETEBzip2Data();
+        
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:OSMPBF.Blob)
+    }
+    
+    static {
+      defaultInstance = new Blob(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:OSMPBF.Blob)
+  }
+  
+  public interface BlobHeaderOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+    
+    // required string type = 1;
+    boolean hasType();
+    String getType();
+    
+    // optional bytes indexdata = 2;
+    boolean hasIndexdata();
+    com.google.protobuf.ByteString getIndexdata();
+    
+    // required int32 datasize = 3;
+    boolean hasDatasize();
+    int getDatasize();
+  }
+  public static final class BlobHeader extends
+      com.google.protobuf.GeneratedMessageLite
+      implements BlobHeaderOrBuilder {
+    // Use BlobHeader.newBuilder() to construct.
+    private BlobHeader(Builder builder) {
+      super(builder);
+    }
+    private BlobHeader(boolean noInit) {}
+    
+    private static final BlobHeader defaultInstance;
+    public static BlobHeader getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public BlobHeader getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    private int bitField0_;
+    // required string type = 1;
+    public static final int TYPE_FIELD_NUMBER = 1;
+    private java.lang.Object type_;
+    public boolean hasType() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public String getType() {
+      java.lang.Object ref = type_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          type_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getTypeBytes() {
+      java.lang.Object ref = type_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        type_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional bytes indexdata = 2;
+    public static final int INDEXDATA_FIELD_NUMBER = 2;
+    private com.google.protobuf.ByteString indexdata_;
+    public boolean hasIndexdata() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public com.google.protobuf.ByteString getIndexdata() {
+      return indexdata_;
+    }
+    
+    // required int32 datasize = 3;
+    public static final int DATASIZE_FIELD_NUMBER = 3;
+    private int datasize_;
+    public boolean hasDatasize() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public int getDatasize() {
+      return datasize_;
+    }
+    
+    private void initFields() {
+      type_ = "";
+      indexdata_ = com.google.protobuf.ByteString.EMPTY;
+      datasize_ = 0;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasType()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasDatasize()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeBytes(1, getTypeBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBytes(2, indexdata_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeInt32(3, datasize_);
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(1, getTypeBytes());
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(2, indexdata_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(3, datasize_);
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Fileformat.BlobHeader parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Fileformat.BlobHeader prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Fileformat.BlobHeader, Builder>
+        implements crosby.binary.Fileformat.BlobHeaderOrBuilder {
+      // Construct using crosby.binary.Fileformat.BlobHeader.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        type_ = "";
+        bitField0_ = (bitField0_ & ~0x00000001);
+        indexdata_ = com.google.protobuf.ByteString.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        datasize_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public crosby.binary.Fileformat.BlobHeader getDefaultInstanceForType() {
+        return crosby.binary.Fileformat.BlobHeader.getDefaultInstance();
+      }
+      
+      public crosby.binary.Fileformat.BlobHeader build() {
+        crosby.binary.Fileformat.BlobHeader result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private crosby.binary.Fileformat.BlobHeader buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        crosby.binary.Fileformat.BlobHeader result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public crosby.binary.Fileformat.BlobHeader buildPartial() {
+        crosby.binary.Fileformat.BlobHeader result = new crosby.binary.Fileformat.BlobHeader(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.type_ = type_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.indexdata_ = indexdata_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.datasize_ = datasize_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+      
+      public Builder mergeFrom(crosby.binary.Fileformat.BlobHeader other) {
+        if (other == crosby.binary.Fileformat.BlobHeader.getDefaultInstance()) return this;
+        if (other.hasType()) {
+          setType(other.getType());
+        }
+        if (other.hasIndexdata()) {
+          setIndexdata(other.getIndexdata());
+        }
+        if (other.hasDatasize()) {
+          setDatasize(other.getDatasize());
+        }
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasType()) {
+          
+          return false;
+        }
+        if (!hasDatasize()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              
+              return this;
+            default: {
+              if (!parseUnknownField(input, extensionRegistry, tag)) {
+                
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              bitField0_ |= 0x00000001;
+              type_ = input.readBytes();
+              break;
+            }
+            case 18: {
+              bitField0_ |= 0x00000002;
+              indexdata_ = input.readBytes();
+              break;
+            }
+            case 24: {
+              bitField0_ |= 0x00000004;
+              datasize_ = input.readInt32();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required string type = 1;
+      private java.lang.Object type_ = "";
+      public boolean hasType() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public String getType() {
+        java.lang.Object ref = type_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          type_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setType(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000001;
+        type_ = value;
+        
+        return this;
+      }
+      public Builder clearType() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        type_ = getDefaultInstance().getType();
+        
+        return this;
+      }
+      void setType(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000001;
+        type_ = value;
+        
+      }
+      
+      // optional bytes indexdata = 2;
+      private com.google.protobuf.ByteString indexdata_ = com.google.protobuf.ByteString.EMPTY;
+      public boolean hasIndexdata() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public com.google.protobuf.ByteString getIndexdata() {
+        return indexdata_;
+      }
+      public Builder setIndexdata(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000002;
+        indexdata_ = value;
+        
+        return this;
+      }
+      public Builder clearIndexdata() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        indexdata_ = getDefaultInstance().getIndexdata();
+        
+        return this;
+      }
+      
+      // required int32 datasize = 3;
+      private int datasize_ ;
+      public boolean hasDatasize() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public int getDatasize() {
+        return datasize_;
+      }
+      public Builder setDatasize(int value) {
+        bitField0_ |= 0x00000004;
+        datasize_ = value;
+        
+        return this;
+      }
+      public Builder clearDatasize() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        datasize_ = 0;
+        
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:OSMPBF.BlobHeader)
+    }
+    
+    static {
+      defaultInstance = new BlobHeader(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:OSMPBF.BlobHeader)
+  }
+  
+  
+  static {
+  }
+  
+  // @@protoc_insertion_point(outer_class_scope)
+}
Index: /applications/editors/josm/plugins/pbf/gen/crosby/binary/Osmformat.java
===================================================================
--- /applications/editors/josm/plugins/pbf/gen/crosby/binary/Osmformat.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/gen/crosby/binary/Osmformat.java	(revision 26961)
@@ -0,0 +1,8092 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: src/osmformat.proto
+
+package crosby.binary;
+
+public final class Osmformat {
+  private Osmformat() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+  public interface HeaderBlockOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+    
+    // optional .OSMPBF.HeaderBBox bbox = 1;
+    boolean hasBbox();
+    crosby.binary.Osmformat.HeaderBBox getBbox();
+    
+    // repeated string required_features = 4;
+    java.util.List<String> getRequiredFeaturesList();
+    int getRequiredFeaturesCount();
+    String getRequiredFeatures(int index);
+    
+    // repeated string optional_features = 5;
+    java.util.List<String> getOptionalFeaturesList();
+    int getOptionalFeaturesCount();
+    String getOptionalFeatures(int index);
+    
+    // optional string writingprogram = 16;
+    boolean hasWritingprogram();
+    String getWritingprogram();
+    
+    // optional string source = 17;
+    boolean hasSource();
+    String getSource();
+  }
+  public static final class HeaderBlock extends
+      com.google.protobuf.GeneratedMessageLite
+      implements HeaderBlockOrBuilder {
+    // Use HeaderBlock.newBuilder() to construct.
+    private HeaderBlock(Builder builder) {
+      super(builder);
+    }
+    private HeaderBlock(boolean noInit) {}
+    
+    private static final HeaderBlock defaultInstance;
+    public static HeaderBlock getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public HeaderBlock getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    private int bitField0_;
+    // optional .OSMPBF.HeaderBBox bbox = 1;
+    public static final int BBOX_FIELD_NUMBER = 1;
+    private crosby.binary.Osmformat.HeaderBBox bbox_;
+    public boolean hasBbox() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public crosby.binary.Osmformat.HeaderBBox getBbox() {
+      return bbox_;
+    }
+    
+    // repeated string required_features = 4;
+    public static final int REQUIRED_FEATURES_FIELD_NUMBER = 4;
+    private com.google.protobuf.LazyStringList requiredFeatures_;
+    public java.util.List<String>
+        getRequiredFeaturesList() {
+      return requiredFeatures_;
+    }
+    public int getRequiredFeaturesCount() {
+      return requiredFeatures_.size();
+    }
+    public String getRequiredFeatures(int index) {
+      return requiredFeatures_.get(index);
+    }
+    
+    // repeated string optional_features = 5;
+    public static final int OPTIONAL_FEATURES_FIELD_NUMBER = 5;
+    private com.google.protobuf.LazyStringList optionalFeatures_;
+    public java.util.List<String>
+        getOptionalFeaturesList() {
+      return optionalFeatures_;
+    }
+    public int getOptionalFeaturesCount() {
+      return optionalFeatures_.size();
+    }
+    public String getOptionalFeatures(int index) {
+      return optionalFeatures_.get(index);
+    }
+    
+    // optional string writingprogram = 16;
+    public static final int WRITINGPROGRAM_FIELD_NUMBER = 16;
+    private java.lang.Object writingprogram_;
+    public boolean hasWritingprogram() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public String getWritingprogram() {
+      java.lang.Object ref = writingprogram_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          writingprogram_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getWritingprogramBytes() {
+      java.lang.Object ref = writingprogram_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        writingprogram_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    // optional string source = 17;
+    public static final int SOURCE_FIELD_NUMBER = 17;
+    private java.lang.Object source_;
+    public boolean hasSource() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public String getSource() {
+      java.lang.Object ref = source_;
+      if (ref instanceof String) {
+        return (String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        String s = bs.toStringUtf8();
+        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
+          source_ = s;
+        }
+        return s;
+      }
+    }
+    private com.google.protobuf.ByteString getSourceBytes() {
+      java.lang.Object ref = source_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
+        source_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    
+    private void initFields() {
+      bbox_ = crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
+      requiredFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      optionalFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      writingprogram_ = "";
+      source_ = "";
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (hasBbox()) {
+        if (!getBbox().isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeMessage(1, bbox_);
+      }
+      for (int i = 0; i < requiredFeatures_.size(); i++) {
+        output.writeBytes(4, requiredFeatures_.getByteString(i));
+      }
+      for (int i = 0; i < optionalFeatures_.size(); i++) {
+        output.writeBytes(5, optionalFeatures_.getByteString(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeBytes(16, getWritingprogramBytes());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeBytes(17, getSourceBytes());
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, bbox_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < requiredFeatures_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(requiredFeatures_.getByteString(i));
+        }
+        size += dataSize;
+        size += 1 * getRequiredFeaturesList().size();
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < optionalFeatures_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(optionalFeatures_.getByteString(i));
+        }
+        size += dataSize;
+        size += 1 * getOptionalFeaturesList().size();
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(16, getWritingprogramBytes());
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(17, getSourceBytes());
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.HeaderBlock parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.HeaderBlock parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.HeaderBlock parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.HeaderBlock parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.HeaderBlock parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.HeaderBlock prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.HeaderBlock, Builder>
+        implements crosby.binary.Osmformat.HeaderBlockOrBuilder {
+      // Construct using crosby.binary.Osmformat.HeaderBlock.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        bbox_ = crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        requiredFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        optionalFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        writingprogram_ = "";
+        bitField0_ = (bitField0_ & ~0x00000008);
+        source_ = "";
+        bitField0_ = (bitField0_ & ~0x00000010);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public crosby.binary.Osmformat.HeaderBlock getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.HeaderBlock.getDefaultInstance();
+      }
+      
+      public crosby.binary.Osmformat.HeaderBlock build() {
+        crosby.binary.Osmformat.HeaderBlock result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private crosby.binary.Osmformat.HeaderBlock buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        crosby.binary.Osmformat.HeaderBlock result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public crosby.binary.Osmformat.HeaderBlock buildPartial() {
+        crosby.binary.Osmformat.HeaderBlock result = new crosby.binary.Osmformat.HeaderBlock(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.bbox_ = bbox_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          requiredFeatures_ = new com.google.protobuf.UnmodifiableLazyStringList(
+              requiredFeatures_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.requiredFeatures_ = requiredFeatures_;
+        if (((bitField0_ & 0x00000004) == 0x00000004)) {
+          optionalFeatures_ = new com.google.protobuf.UnmodifiableLazyStringList(
+              optionalFeatures_);
+          bitField0_ = (bitField0_ & ~0x00000004);
+        }
+        result.optionalFeatures_ = optionalFeatures_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.writingprogram_ = writingprogram_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.source_ = source_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+      
+      public Builder mergeFrom(crosby.binary.Osmformat.HeaderBlock other) {
+        if (other == crosby.binary.Osmformat.HeaderBlock.getDefaultInstance()) return this;
+        if (other.hasBbox()) {
+          mergeBbox(other.getBbox());
+        }
+        if (!other.requiredFeatures_.isEmpty()) {
+          if (requiredFeatures_.isEmpty()) {
+            requiredFeatures_ = other.requiredFeatures_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensureRequiredFeaturesIsMutable();
+            requiredFeatures_.addAll(other.requiredFeatures_);
+          }
+          
+        }
+        if (!other.optionalFeatures_.isEmpty()) {
+          if (optionalFeatures_.isEmpty()) {
+            optionalFeatures_ = other.optionalFeatures_;
+            bitField0_ = (bitField0_ & ~0x00000004);
+          } else {
+            ensureOptionalFeaturesIsMutable();
+            optionalFeatures_.addAll(other.optionalFeatures_);
+          }
+          
+        }
+        if (other.hasWritingprogram()) {
+          setWritingprogram(other.getWritingprogram());
+        }
+        if (other.hasSource()) {
+          setSource(other.getSource());
+        }
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (hasBbox()) {
+          if (!getBbox().isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              
+              return this;
+            default: {
+              if (!parseUnknownField(input, extensionRegistry, tag)) {
+                
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              crosby.binary.Osmformat.HeaderBBox.Builder subBuilder = crosby.binary.Osmformat.HeaderBBox.newBuilder();
+              if (hasBbox()) {
+                subBuilder.mergeFrom(getBbox());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setBbox(subBuilder.buildPartial());
+              break;
+            }
+            case 34: {
+              ensureRequiredFeaturesIsMutable();
+              requiredFeatures_.add(input.readBytes());
+              break;
+            }
+            case 42: {
+              ensureOptionalFeaturesIsMutable();
+              optionalFeatures_.add(input.readBytes());
+              break;
+            }
+            case 130: {
+              bitField0_ |= 0x00000008;
+              writingprogram_ = input.readBytes();
+              break;
+            }
+            case 138: {
+              bitField0_ |= 0x00000010;
+              source_ = input.readBytes();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional .OSMPBF.HeaderBBox bbox = 1;
+      private crosby.binary.Osmformat.HeaderBBox bbox_ = crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
+      public boolean hasBbox() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public crosby.binary.Osmformat.HeaderBBox getBbox() {
+        return bbox_;
+      }
+      public Builder setBbox(crosby.binary.Osmformat.HeaderBBox value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        bbox_ = value;
+        
+        bitField0_ |= 0x00000001;
+        return this;
+      }
+      public Builder setBbox(
+          crosby.binary.Osmformat.HeaderBBox.Builder builderForValue) {
+        bbox_ = builderForValue.build();
+        
+        bitField0_ |= 0x00000001;
+        return this;
+      }
+      public Builder mergeBbox(crosby.binary.Osmformat.HeaderBBox value) {
+        if (((bitField0_ & 0x00000001) == 0x00000001) &&
+            bbox_ != crosby.binary.Osmformat.HeaderBBox.getDefaultInstance()) {
+          bbox_ =
+            crosby.binary.Osmformat.HeaderBBox.newBuilder(bbox_).mergeFrom(value).buildPartial();
+        } else {
+          bbox_ = value;
+        }
+        
+        bitField0_ |= 0x00000001;
+        return this;
+      }
+      public Builder clearBbox() {
+        bbox_ = crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
+        
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+      
+      // repeated string required_features = 4;
+      private com.google.protobuf.LazyStringList requiredFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureRequiredFeaturesIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          requiredFeatures_ = new com.google.protobuf.LazyStringArrayList(requiredFeatures_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      public java.util.List<String>
+          getRequiredFeaturesList() {
+        return java.util.Collections.unmodifiableList(requiredFeatures_);
+      }
+      public int getRequiredFeaturesCount() {
+        return requiredFeatures_.size();
+      }
+      public String getRequiredFeatures(int index) {
+        return requiredFeatures_.get(index);
+      }
+      public Builder setRequiredFeatures(
+          int index, String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureRequiredFeaturesIsMutable();
+        requiredFeatures_.set(index, value);
+        
+        return this;
+      }
+      public Builder addRequiredFeatures(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureRequiredFeaturesIsMutable();
+        requiredFeatures_.add(value);
+        
+        return this;
+      }
+      public Builder addAllRequiredFeatures(
+          java.lang.Iterable<String> values) {
+        ensureRequiredFeaturesIsMutable();
+        super.addAll(values, requiredFeatures_);
+        
+        return this;
+      }
+      public Builder clearRequiredFeatures() {
+        requiredFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        
+        return this;
+      }
+      void addRequiredFeatures(com.google.protobuf.ByteString value) {
+        ensureRequiredFeaturesIsMutable();
+        requiredFeatures_.add(value);
+        
+      }
+      
+      // repeated string optional_features = 5;
+      private com.google.protobuf.LazyStringList optionalFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      private void ensureOptionalFeaturesIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          optionalFeatures_ = new com.google.protobuf.LazyStringArrayList(optionalFeatures_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      public java.util.List<String>
+          getOptionalFeaturesList() {
+        return java.util.Collections.unmodifiableList(optionalFeatures_);
+      }
+      public int getOptionalFeaturesCount() {
+        return optionalFeatures_.size();
+      }
+      public String getOptionalFeatures(int index) {
+        return optionalFeatures_.get(index);
+      }
+      public Builder setOptionalFeatures(
+          int index, String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureOptionalFeaturesIsMutable();
+        optionalFeatures_.set(index, value);
+        
+        return this;
+      }
+      public Builder addOptionalFeatures(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureOptionalFeaturesIsMutable();
+        optionalFeatures_.add(value);
+        
+        return this;
+      }
+      public Builder addAllOptionalFeatures(
+          java.lang.Iterable<String> values) {
+        ensureOptionalFeaturesIsMutable();
+        super.addAll(values, optionalFeatures_);
+        
+        return this;
+      }
+      public Builder clearOptionalFeatures() {
+        optionalFeatures_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        
+        return this;
+      }
+      void addOptionalFeatures(com.google.protobuf.ByteString value) {
+        ensureOptionalFeaturesIsMutable();
+        optionalFeatures_.add(value);
+        
+      }
+      
+      // optional string writingprogram = 16;
+      private java.lang.Object writingprogram_ = "";
+      public boolean hasWritingprogram() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public String getWritingprogram() {
+        java.lang.Object ref = writingprogram_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          writingprogram_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setWritingprogram(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000008;
+        writingprogram_ = value;
+        
+        return this;
+      }
+      public Builder clearWritingprogram() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        writingprogram_ = getDefaultInstance().getWritingprogram();
+        
+        return this;
+      }
+      void setWritingprogram(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000008;
+        writingprogram_ = value;
+        
+      }
+      
+      // optional string source = 17;
+      private java.lang.Object source_ = "";
+      public boolean hasSource() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public String getSource() {
+        java.lang.Object ref = source_;
+        if (!(ref instanceof String)) {
+          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
+          source_ = s;
+          return s;
+        } else {
+          return (String) ref;
+        }
+      }
+      public Builder setSource(String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  bitField0_ |= 0x00000010;
+        source_ = value;
+        
+        return this;
+      }
+      public Builder clearSource() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        source_ = getDefaultInstance().getSource();
+        
+        return this;
+      }
+      void setSource(com.google.protobuf.ByteString value) {
+        bitField0_ |= 0x00000010;
+        source_ = value;
+        
+      }
+      
+      // @@protoc_insertion_point(builder_scope:OSMPBF.HeaderBlock)
+    }
+    
+    static {
+      defaultInstance = new HeaderBlock(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:OSMPBF.HeaderBlock)
+  }
+  
+  public interface HeaderBBoxOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+    
+    // required sint64 left = 1;
+    boolean hasLeft();
+    long getLeft();
+    
+    // required sint64 right = 2;
+    boolean hasRight();
+    long getRight();
+    
+    // required sint64 top = 3;
+    boolean hasTop();
+    long getTop();
+    
+    // required sint64 bottom = 4;
+    boolean hasBottom();
+    long getBottom();
+  }
+  public static final class HeaderBBox extends
+      com.google.protobuf.GeneratedMessageLite
+      implements HeaderBBoxOrBuilder {
+    // Use HeaderBBox.newBuilder() to construct.
+    private HeaderBBox(Builder builder) {
+      super(builder);
+    }
+    private HeaderBBox(boolean noInit) {}
+    
+    private static final HeaderBBox defaultInstance;
+    public static HeaderBBox getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public HeaderBBox getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    private int bitField0_;
+    // required sint64 left = 1;
+    public static final int LEFT_FIELD_NUMBER = 1;
+    private long left_;
+    public boolean hasLeft() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public long getLeft() {
+      return left_;
+    }
+    
+    // required sint64 right = 2;
+    public static final int RIGHT_FIELD_NUMBER = 2;
+    private long right_;
+    public boolean hasRight() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public long getRight() {
+      return right_;
+    }
+    
+    // required sint64 top = 3;
+    public static final int TOP_FIELD_NUMBER = 3;
+    private long top_;
+    public boolean hasTop() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public long getTop() {
+      return top_;
+    }
+    
+    // required sint64 bottom = 4;
+    public static final int BOTTOM_FIELD_NUMBER = 4;
+    private long bottom_;
+    public boolean hasBottom() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public long getBottom() {
+      return bottom_;
+    }
+    
+    private void initFields() {
+      left_ = 0L;
+      right_ = 0L;
+      top_ = 0L;
+      bottom_ = 0L;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasLeft()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasRight()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasTop()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasBottom()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeSInt64(1, left_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeSInt64(2, right_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeSInt64(3, top_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeSInt64(4, bottom_);
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeSInt64Size(1, left_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeSInt64Size(2, right_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeSInt64Size(3, top_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeSInt64Size(4, bottom_);
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.HeaderBBox parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.HeaderBBox prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.HeaderBBox, Builder>
+        implements crosby.binary.Osmformat.HeaderBBoxOrBuilder {
+      // Construct using crosby.binary.Osmformat.HeaderBBox.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        left_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        right_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        top_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        bottom_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public crosby.binary.Osmformat.HeaderBBox getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.HeaderBBox.getDefaultInstance();
+      }
+      
+      public crosby.binary.Osmformat.HeaderBBox build() {
+        crosby.binary.Osmformat.HeaderBBox result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private crosby.binary.Osmformat.HeaderBBox buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        crosby.binary.Osmformat.HeaderBBox result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public crosby.binary.Osmformat.HeaderBBox buildPartial() {
+        crosby.binary.Osmformat.HeaderBBox result = new crosby.binary.Osmformat.HeaderBBox(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.left_ = left_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.right_ = right_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.top_ = top_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.bottom_ = bottom_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+      
+      public Builder mergeFrom(crosby.binary.Osmformat.HeaderBBox other) {
+        if (other == crosby.binary.Osmformat.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());
+        }
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasLeft()) {
+          
+          return false;
+        }
+        if (!hasRight()) {
+          
+          return false;
+        }
+        if (!hasTop()) {
+          
+          return false;
+        }
+        if (!hasBottom()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              
+              return this;
+            default: {
+              if (!parseUnknownField(input, extensionRegistry, tag)) {
+                
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              left_ = input.readSInt64();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              right_ = input.readSInt64();
+              break;
+            }
+            case 24: {
+              bitField0_ |= 0x00000004;
+              top_ = input.readSInt64();
+              break;
+            }
+            case 32: {
+              bitField0_ |= 0x00000008;
+              bottom_ = input.readSInt64();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required sint64 left = 1;
+      private long left_ ;
+      public boolean hasLeft() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public long getLeft() {
+        return left_;
+      }
+      public Builder setLeft(long value) {
+        bitField0_ |= 0x00000001;
+        left_ = value;
+        
+        return this;
+      }
+      public Builder clearLeft() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        left_ = 0L;
+        
+        return this;
+      }
+      
+      // required sint64 right = 2;
+      private long right_ ;
+      public boolean hasRight() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public long getRight() {
+        return right_;
+      }
+      public Builder setRight(long value) {
+        bitField0_ |= 0x00000002;
+        right_ = value;
+        
+        return this;
+      }
+      public Builder clearRight() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        right_ = 0L;
+        
+        return this;
+      }
+      
+      // required sint64 top = 3;
+      private long top_ ;
+      public boolean hasTop() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public long getTop() {
+        return top_;
+      }
+      public Builder setTop(long value) {
+        bitField0_ |= 0x00000004;
+        top_ = value;
+        
+        return this;
+      }
+      public Builder clearTop() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        top_ = 0L;
+        
+        return this;
+      }
+      
+      // required sint64 bottom = 4;
+      private long bottom_ ;
+      public boolean hasBottom() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public long getBottom() {
+        return bottom_;
+      }
+      public Builder setBottom(long value) {
+        bitField0_ |= 0x00000008;
+        bottom_ = value;
+        
+        return this;
+      }
+      public Builder clearBottom() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        bottom_ = 0L;
+        
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:OSMPBF.HeaderBBox)
+    }
+    
+    static {
+      defaultInstance = new HeaderBBox(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:OSMPBF.HeaderBBox)
+  }
+  
+  public interface PrimitiveBlockOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+    
+    // required .OSMPBF.StringTable stringtable = 1;
+    boolean hasStringtable();
+    crosby.binary.Osmformat.StringTable getStringtable();
+    
+    // repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;
+    java.util.List<crosby.binary.Osmformat.PrimitiveGroup> 
+        getPrimitivegroupList();
+    crosby.binary.Osmformat.PrimitiveGroup getPrimitivegroup(int index);
+    int getPrimitivegroupCount();
+    
+    // optional int32 granularity = 17 [default = 100];
+    boolean hasGranularity();
+    int getGranularity();
+    
+    // optional int64 lat_offset = 19 [default = 0];
+    boolean hasLatOffset();
+    long getLatOffset();
+    
+    // optional int64 lon_offset = 20 [default = 0];
+    boolean hasLonOffset();
+    long getLonOffset();
+    
+    // optional int32 date_granularity = 18 [default = 1000];
+    boolean hasDateGranularity();
+    int getDateGranularity();
+  }
+  public static final class PrimitiveBlock extends
+      com.google.protobuf.GeneratedMessageLite
+      implements PrimitiveBlockOrBuilder {
+    // Use PrimitiveBlock.newBuilder() to construct.
+    private PrimitiveBlock(Builder builder) {
+      super(builder);
+    }
+    private PrimitiveBlock(boolean noInit) {}
+    
+    private static final PrimitiveBlock defaultInstance;
+    public static PrimitiveBlock getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public PrimitiveBlock getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    private int bitField0_;
+    // required .OSMPBF.StringTable stringtable = 1;
+    public static final int STRINGTABLE_FIELD_NUMBER = 1;
+    private crosby.binary.Osmformat.StringTable stringtable_;
+    public boolean hasStringtable() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public crosby.binary.Osmformat.StringTable getStringtable() {
+      return stringtable_;
+    }
+    
+    // repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;
+    public static final int PRIMITIVEGROUP_FIELD_NUMBER = 2;
+    private java.util.List<crosby.binary.Osmformat.PrimitiveGroup> primitivegroup_;
+    public java.util.List<crosby.binary.Osmformat.PrimitiveGroup> getPrimitivegroupList() {
+      return primitivegroup_;
+    }
+    public java.util.List<? extends crosby.binary.Osmformat.PrimitiveGroupOrBuilder> 
+        getPrimitivegroupOrBuilderList() {
+      return primitivegroup_;
+    }
+    public int getPrimitivegroupCount() {
+      return primitivegroup_.size();
+    }
+    public crosby.binary.Osmformat.PrimitiveGroup getPrimitivegroup(int index) {
+      return primitivegroup_.get(index);
+    }
+    public crosby.binary.Osmformat.PrimitiveGroupOrBuilder getPrimitivegroupOrBuilder(
+        int index) {
+      return primitivegroup_.get(index);
+    }
+    
+    // optional int32 granularity = 17 [default = 100];
+    public static final int GRANULARITY_FIELD_NUMBER = 17;
+    private int granularity_;
+    public boolean hasGranularity() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public int getGranularity() {
+      return granularity_;
+    }
+    
+    // optional int64 lat_offset = 19 [default = 0];
+    public static final int LAT_OFFSET_FIELD_NUMBER = 19;
+    private long latOffset_;
+    public boolean hasLatOffset() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public long getLatOffset() {
+      return latOffset_;
+    }
+    
+    // optional int64 lon_offset = 20 [default = 0];
+    public static final int LON_OFFSET_FIELD_NUMBER = 20;
+    private long lonOffset_;
+    public boolean hasLonOffset() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public long getLonOffset() {
+      return lonOffset_;
+    }
+    
+    // optional int32 date_granularity = 18 [default = 1000];
+    public static final int DATE_GRANULARITY_FIELD_NUMBER = 18;
+    private int dateGranularity_;
+    public boolean hasDateGranularity() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    public int getDateGranularity() {
+      return dateGranularity_;
+    }
+    
+    private void initFields() {
+      stringtable_ = crosby.binary.Osmformat.StringTable.getDefaultInstance();
+      primitivegroup_ = java.util.Collections.emptyList();
+      granularity_ = 100;
+      latOffset_ = 0L;
+      lonOffset_ = 0L;
+      dateGranularity_ = 1000;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasStringtable()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      for (int i = 0; i < getPrimitivegroupCount(); i++) {
+        if (!getPrimitivegroup(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeMessage(1, stringtable_);
+      }
+      for (int i = 0; i < primitivegroup_.size(); i++) {
+        output.writeMessage(2, primitivegroup_.get(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt32(17, granularity_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeInt32(18, dateGranularity_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeInt64(19, latOffset_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeInt64(20, lonOffset_);
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, stringtable_);
+      }
+      for (int i = 0; i < primitivegroup_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, primitivegroup_.get(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(17, granularity_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(18, dateGranularity_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(19, latOffset_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(20, lonOffset_);
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.PrimitiveBlock parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.PrimitiveBlock parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.PrimitiveBlock parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.PrimitiveBlock prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.PrimitiveBlock, Builder>
+        implements crosby.binary.Osmformat.PrimitiveBlockOrBuilder {
+      // Construct using crosby.binary.Osmformat.PrimitiveBlock.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        stringtable_ = crosby.binary.Osmformat.StringTable.getDefaultInstance();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        primitivegroup_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000002);
+        granularity_ = 100;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        latOffset_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        lonOffset_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        dateGranularity_ = 1000;
+        bitField0_ = (bitField0_ & ~0x00000020);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public crosby.binary.Osmformat.PrimitiveBlock getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.PrimitiveBlock.getDefaultInstance();
+      }
+      
+      public crosby.binary.Osmformat.PrimitiveBlock build() {
+        crosby.binary.Osmformat.PrimitiveBlock result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private crosby.binary.Osmformat.PrimitiveBlock buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        crosby.binary.Osmformat.PrimitiveBlock result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public crosby.binary.Osmformat.PrimitiveBlock buildPartial() {
+        crosby.binary.Osmformat.PrimitiveBlock result = new crosby.binary.Osmformat.PrimitiveBlock(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.stringtable_ = stringtable_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          primitivegroup_ = java.util.Collections.unmodifiableList(primitivegroup_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.primitivegroup_ = primitivegroup_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.granularity_ = granularity_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.latOffset_ = latOffset_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.lonOffset_ = lonOffset_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.dateGranularity_ = dateGranularity_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+      
+      public Builder mergeFrom(crosby.binary.Osmformat.PrimitiveBlock other) {
+        if (other == crosby.binary.Osmformat.PrimitiveBlock.getDefaultInstance()) return this;
+        if (other.hasStringtable()) {
+          mergeStringtable(other.getStringtable());
+        }
+        if (!other.primitivegroup_.isEmpty()) {
+          if (primitivegroup_.isEmpty()) {
+            primitivegroup_ = other.primitivegroup_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensurePrimitivegroupIsMutable();
+            primitivegroup_.addAll(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());
+        }
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasStringtable()) {
+          
+          return false;
+        }
+        for (int i = 0; i < getPrimitivegroupCount(); i++) {
+          if (!getPrimitivegroup(i).isInitialized()) {
+            
+            return false;
+          }
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              
+              return this;
+            default: {
+              if (!parseUnknownField(input, extensionRegistry, tag)) {
+                
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              crosby.binary.Osmformat.StringTable.Builder subBuilder = crosby.binary.Osmformat.StringTable.newBuilder();
+              if (hasStringtable()) {
+                subBuilder.mergeFrom(getStringtable());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setStringtable(subBuilder.buildPartial());
+              break;
+            }
+            case 18: {
+              crosby.binary.Osmformat.PrimitiveGroup.Builder subBuilder = crosby.binary.Osmformat.PrimitiveGroup.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addPrimitivegroup(subBuilder.buildPartial());
+              break;
+            }
+            case 136: {
+              bitField0_ |= 0x00000004;
+              granularity_ = input.readInt32();
+              break;
+            }
+            case 144: {
+              bitField0_ |= 0x00000020;
+              dateGranularity_ = input.readInt32();
+              break;
+            }
+            case 152: {
+              bitField0_ |= 0x00000008;
+              latOffset_ = input.readInt64();
+              break;
+            }
+            case 160: {
+              bitField0_ |= 0x00000010;
+              lonOffset_ = input.readInt64();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required .OSMPBF.StringTable stringtable = 1;
+      private crosby.binary.Osmformat.StringTable stringtable_ = crosby.binary.Osmformat.StringTable.getDefaultInstance();
+      public boolean hasStringtable() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public crosby.binary.Osmformat.StringTable getStringtable() {
+        return stringtable_;
+      }
+      public Builder setStringtable(crosby.binary.Osmformat.StringTable value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        stringtable_ = value;
+        
+        bitField0_ |= 0x00000001;
+        return this;
+      }
+      public Builder setStringtable(
+          crosby.binary.Osmformat.StringTable.Builder builderForValue) {
+        stringtable_ = builderForValue.build();
+        
+        bitField0_ |= 0x00000001;
+        return this;
+      }
+      public Builder mergeStringtable(crosby.binary.Osmformat.StringTable value) {
+        if (((bitField0_ & 0x00000001) == 0x00000001) &&
+            stringtable_ != crosby.binary.Osmformat.StringTable.getDefaultInstance()) {
+          stringtable_ =
+            crosby.binary.Osmformat.StringTable.newBuilder(stringtable_).mergeFrom(value).buildPartial();
+        } else {
+          stringtable_ = value;
+        }
+        
+        bitField0_ |= 0x00000001;
+        return this;
+      }
+      public Builder clearStringtable() {
+        stringtable_ = crosby.binary.Osmformat.StringTable.getDefaultInstance();
+        
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+      
+      // repeated .OSMPBF.PrimitiveGroup primitivegroup = 2;
+      private java.util.List<crosby.binary.Osmformat.PrimitiveGroup> primitivegroup_ =
+        java.util.Collections.emptyList();
+      private void ensurePrimitivegroupIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          primitivegroup_ = new java.util.ArrayList<crosby.binary.Osmformat.PrimitiveGroup>(primitivegroup_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      
+      public java.util.List<crosby.binary.Osmformat.PrimitiveGroup> getPrimitivegroupList() {
+        return java.util.Collections.unmodifiableList(primitivegroup_);
+      }
+      public int getPrimitivegroupCount() {
+        return primitivegroup_.size();
+      }
+      public crosby.binary.Osmformat.PrimitiveGroup getPrimitivegroup(int index) {
+        return primitivegroup_.get(index);
+      }
+      public Builder setPrimitivegroup(
+          int index, crosby.binary.Osmformat.PrimitiveGroup value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensurePrimitivegroupIsMutable();
+        primitivegroup_.set(index, value);
+        
+        return this;
+      }
+      public Builder setPrimitivegroup(
+          int index, crosby.binary.Osmformat.PrimitiveGroup.Builder builderForValue) {
+        ensurePrimitivegroupIsMutable();
+        primitivegroup_.set(index, builderForValue.build());
+        
+        return this;
+      }
+      public Builder addPrimitivegroup(crosby.binary.Osmformat.PrimitiveGroup value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensurePrimitivegroupIsMutable();
+        primitivegroup_.add(value);
+        
+        return this;
+      }
+      public Builder addPrimitivegroup(
+          int index, crosby.binary.Osmformat.PrimitiveGroup value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensurePrimitivegroupIsMutable();
+        primitivegroup_.add(index, value);
+        
+        return this;
+      }
+      public Builder addPrimitivegroup(
+          crosby.binary.Osmformat.PrimitiveGroup.Builder builderForValue) {
+        ensurePrimitivegroupIsMutable();
+        primitivegroup_.add(builderForValue.build());
+        
+        return this;
+      }
+      public Builder addPrimitivegroup(
+          int index, crosby.binary.Osmformat.PrimitiveGroup.Builder builderForValue) {
+        ensurePrimitivegroupIsMutable();
+        primitivegroup_.add(index, builderForValue.build());
+        
+        return this;
+      }
+      public Builder addAllPrimitivegroup(
+          java.lang.Iterable<? extends crosby.binary.Osmformat.PrimitiveGroup> values) {
+        ensurePrimitivegroupIsMutable();
+        super.addAll(values, primitivegroup_);
+        
+        return this;
+      }
+      public Builder clearPrimitivegroup() {
+        primitivegroup_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000002);
+        
+        return this;
+      }
+      public Builder removePrimitivegroup(int index) {
+        ensurePrimitivegroupIsMutable();
+        primitivegroup_.remove(index);
+        
+        return this;
+      }
+      
+      // optional int32 granularity = 17 [default = 100];
+      private int granularity_ = 100;
+      public boolean hasGranularity() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public int getGranularity() {
+        return granularity_;
+      }
+      public Builder setGranularity(int value) {
+        bitField0_ |= 0x00000004;
+        granularity_ = value;
+        
+        return this;
+      }
+      public Builder clearGranularity() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        granularity_ = 100;
+        
+        return this;
+      }
+      
+      // optional int64 lat_offset = 19 [default = 0];
+      private long latOffset_ ;
+      public boolean hasLatOffset() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public long getLatOffset() {
+        return latOffset_;
+      }
+      public Builder setLatOffset(long value) {
+        bitField0_ |= 0x00000008;
+        latOffset_ = value;
+        
+        return this;
+      }
+      public Builder clearLatOffset() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        latOffset_ = 0L;
+        
+        return this;
+      }
+      
+      // optional int64 lon_offset = 20 [default = 0];
+      private long lonOffset_ ;
+      public boolean hasLonOffset() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public long getLonOffset() {
+        return lonOffset_;
+      }
+      public Builder setLonOffset(long value) {
+        bitField0_ |= 0x00000010;
+        lonOffset_ = value;
+        
+        return this;
+      }
+      public Builder clearLonOffset() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        lonOffset_ = 0L;
+        
+        return this;
+      }
+      
+      // optional int32 date_granularity = 18 [default = 1000];
+      private int dateGranularity_ = 1000;
+      public boolean hasDateGranularity() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public int getDateGranularity() {
+        return dateGranularity_;
+      }
+      public Builder setDateGranularity(int value) {
+        bitField0_ |= 0x00000020;
+        dateGranularity_ = value;
+        
+        return this;
+      }
+      public Builder clearDateGranularity() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        dateGranularity_ = 1000;
+        
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:OSMPBF.PrimitiveBlock)
+    }
+    
+    static {
+      defaultInstance = new PrimitiveBlock(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:OSMPBF.PrimitiveBlock)
+  }
+  
+  public interface PrimitiveGroupOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+    
+    // repeated .OSMPBF.Node nodes = 1;
+    java.util.List<crosby.binary.Osmformat.Node> 
+        getNodesList();
+    crosby.binary.Osmformat.Node getNodes(int index);
+    int getNodesCount();
+    
+    // optional .OSMPBF.DenseNodes dense = 2;
+    boolean hasDense();
+    crosby.binary.Osmformat.DenseNodes getDense();
+    
+    // repeated .OSMPBF.Way ways = 3;
+    java.util.List<crosby.binary.Osmformat.Way> 
+        getWaysList();
+    crosby.binary.Osmformat.Way getWays(int index);
+    int getWaysCount();
+    
+    // repeated .OSMPBF.Relation relations = 4;
+    java.util.List<crosby.binary.Osmformat.Relation> 
+        getRelationsList();
+    crosby.binary.Osmformat.Relation getRelations(int index);
+    int getRelationsCount();
+    
+    // repeated .OSMPBF.ChangeSet changesets = 5;
+    java.util.List<crosby.binary.Osmformat.ChangeSet> 
+        getChangesetsList();
+    crosby.binary.Osmformat.ChangeSet getChangesets(int index);
+    int getChangesetsCount();
+  }
+  public static final class PrimitiveGroup extends
+      com.google.protobuf.GeneratedMessageLite
+      implements PrimitiveGroupOrBuilder {
+    // Use PrimitiveGroup.newBuilder() to construct.
+    private PrimitiveGroup(Builder builder) {
+      super(builder);
+    }
+    private PrimitiveGroup(boolean noInit) {}
+    
+    private static final PrimitiveGroup defaultInstance;
+    public static PrimitiveGroup getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public PrimitiveGroup getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    private int bitField0_;
+    // repeated .OSMPBF.Node nodes = 1;
+    public static final int NODES_FIELD_NUMBER = 1;
+    private java.util.List<crosby.binary.Osmformat.Node> nodes_;
+    public java.util.List<crosby.binary.Osmformat.Node> getNodesList() {
+      return nodes_;
+    }
+    public java.util.List<? extends crosby.binary.Osmformat.NodeOrBuilder> 
+        getNodesOrBuilderList() {
+      return nodes_;
+    }
+    public int getNodesCount() {
+      return nodes_.size();
+    }
+    public crosby.binary.Osmformat.Node getNodes(int index) {
+      return nodes_.get(index);
+    }
+    public crosby.binary.Osmformat.NodeOrBuilder getNodesOrBuilder(
+        int index) {
+      return nodes_.get(index);
+    }
+    
+    // optional .OSMPBF.DenseNodes dense = 2;
+    public static final int DENSE_FIELD_NUMBER = 2;
+    private crosby.binary.Osmformat.DenseNodes dense_;
+    public boolean hasDense() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public crosby.binary.Osmformat.DenseNodes getDense() {
+      return dense_;
+    }
+    
+    // repeated .OSMPBF.Way ways = 3;
+    public static final int WAYS_FIELD_NUMBER = 3;
+    private java.util.List<crosby.binary.Osmformat.Way> ways_;
+    public java.util.List<crosby.binary.Osmformat.Way> getWaysList() {
+      return ways_;
+    }
+    public java.util.List<? extends crosby.binary.Osmformat.WayOrBuilder> 
+        getWaysOrBuilderList() {
+      return ways_;
+    }
+    public int getWaysCount() {
+      return ways_.size();
+    }
+    public crosby.binary.Osmformat.Way getWays(int index) {
+      return ways_.get(index);
+    }
+    public crosby.binary.Osmformat.WayOrBuilder getWaysOrBuilder(
+        int index) {
+      return ways_.get(index);
+    }
+    
+    // repeated .OSMPBF.Relation relations = 4;
+    public static final int RELATIONS_FIELD_NUMBER = 4;
+    private java.util.List<crosby.binary.Osmformat.Relation> relations_;
+    public java.util.List<crosby.binary.Osmformat.Relation> getRelationsList() {
+      return relations_;
+    }
+    public java.util.List<? extends crosby.binary.Osmformat.RelationOrBuilder> 
+        getRelationsOrBuilderList() {
+      return relations_;
+    }
+    public int getRelationsCount() {
+      return relations_.size();
+    }
+    public crosby.binary.Osmformat.Relation getRelations(int index) {
+      return relations_.get(index);
+    }
+    public crosby.binary.Osmformat.RelationOrBuilder getRelationsOrBuilder(
+        int index) {
+      return relations_.get(index);
+    }
+    
+    // repeated .OSMPBF.ChangeSet changesets = 5;
+    public static final int CHANGESETS_FIELD_NUMBER = 5;
+    private java.util.List<crosby.binary.Osmformat.ChangeSet> changesets_;
+    public java.util.List<crosby.binary.Osmformat.ChangeSet> getChangesetsList() {
+      return changesets_;
+    }
+    public java.util.List<? extends crosby.binary.Osmformat.ChangeSetOrBuilder> 
+        getChangesetsOrBuilderList() {
+      return changesets_;
+    }
+    public int getChangesetsCount() {
+      return changesets_.size();
+    }
+    public crosby.binary.Osmformat.ChangeSet getChangesets(int index) {
+      return changesets_.get(index);
+    }
+    public crosby.binary.Osmformat.ChangeSetOrBuilder getChangesetsOrBuilder(
+        int index) {
+      return changesets_.get(index);
+    }
+    
+    private void initFields() {
+      nodes_ = java.util.Collections.emptyList();
+      dense_ = crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
+      ways_ = java.util.Collections.emptyList();
+      relations_ = java.util.Collections.emptyList();
+      changesets_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      for (int i = 0; i < getNodesCount(); i++) {
+        if (!getNodes(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      for (int i = 0; i < getWaysCount(); i++) {
+        if (!getWays(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      for (int i = 0; i < getRelationsCount(); i++) {
+        if (!getRelations(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      for (int i = 0; i < getChangesetsCount(); i++) {
+        if (!getChangesets(i).isInitialized()) {
+          memoizedIsInitialized = 0;
+          return false;
+        }
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      for (int i = 0; i < nodes_.size(); i++) {
+        output.writeMessage(1, nodes_.get(i));
+      }
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeMessage(2, dense_);
+      }
+      for (int i = 0; i < ways_.size(); i++) {
+        output.writeMessage(3, ways_.get(i));
+      }
+      for (int i = 0; i < relations_.size(); i++) {
+        output.writeMessage(4, relations_.get(i));
+      }
+      for (int i = 0; i < changesets_.size(); i++) {
+        output.writeMessage(5, changesets_.get(i));
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      for (int i = 0; i < nodes_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, nodes_.get(i));
+      }
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, dense_);
+      }
+      for (int i = 0; i < ways_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, ways_.get(i));
+      }
+      for (int i = 0; i < relations_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, relations_.get(i));
+      }
+      for (int i = 0; i < changesets_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, changesets_.get(i));
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.PrimitiveGroup parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.PrimitiveGroup parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.PrimitiveGroup parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.PrimitiveGroup prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.PrimitiveGroup, Builder>
+        implements crosby.binary.Osmformat.PrimitiveGroupOrBuilder {
+      // Construct using crosby.binary.Osmformat.PrimitiveGroup.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        nodes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        dense_ = crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
+        bitField0_ = (bitField0_ & ~0x00000002);
+        ways_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000004);
+        relations_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000008);
+        changesets_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000010);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public crosby.binary.Osmformat.PrimitiveGroup getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.PrimitiveGroup.getDefaultInstance();
+      }
+      
+      public crosby.binary.Osmformat.PrimitiveGroup build() {
+        crosby.binary.Osmformat.PrimitiveGroup result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private crosby.binary.Osmformat.PrimitiveGroup buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        crosby.binary.Osmformat.PrimitiveGroup result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public crosby.binary.Osmformat.PrimitiveGroup buildPartial() {
+        crosby.binary.Osmformat.PrimitiveGroup result = new crosby.binary.Osmformat.PrimitiveGroup(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((bitField0_ & 0x00000001) == 0x00000001)) {
+          nodes_ = java.util.Collections.unmodifiableList(nodes_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.nodes_ = nodes_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.dense_ = dense_;
+        if (((bitField0_ & 0x00000004) == 0x00000004)) {
+          ways_ = java.util.Collections.unmodifiableList(ways_);
+          bitField0_ = (bitField0_ & ~0x00000004);
+        }
+        result.ways_ = ways_;
+        if (((bitField0_ & 0x00000008) == 0x00000008)) {
+          relations_ = java.util.Collections.unmodifiableList(relations_);
+          bitField0_ = (bitField0_ & ~0x00000008);
+        }
+        result.relations_ = relations_;
+        if (((bitField0_ & 0x00000010) == 0x00000010)) {
+          changesets_ = java.util.Collections.unmodifiableList(changesets_);
+          bitField0_ = (bitField0_ & ~0x00000010);
+        }
+        result.changesets_ = changesets_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+      
+      public Builder mergeFrom(crosby.binary.Osmformat.PrimitiveGroup other) {
+        if (other == crosby.binary.Osmformat.PrimitiveGroup.getDefaultInstance()) return this;
+        if (!other.nodes_.isEmpty()) {
+          if (nodes_.isEmpty()) {
+            nodes_ = other.nodes_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureNodesIsMutable();
+            nodes_.addAll(other.nodes_);
+          }
+          
+        }
+        if (other.hasDense()) {
+          mergeDense(other.getDense());
+        }
+        if (!other.ways_.isEmpty()) {
+          if (ways_.isEmpty()) {
+            ways_ = other.ways_;
+            bitField0_ = (bitField0_ & ~0x00000004);
+          } else {
+            ensureWaysIsMutable();
+            ways_.addAll(other.ways_);
+          }
+          
+        }
+        if (!other.relations_.isEmpty()) {
+          if (relations_.isEmpty()) {
+            relations_ = other.relations_;
+            bitField0_ = (bitField0_ & ~0x00000008);
+          } else {
+            ensureRelationsIsMutable();
+            relations_.addAll(other.relations_);
+          }
+          
+        }
+        if (!other.changesets_.isEmpty()) {
+          if (changesets_.isEmpty()) {
+            changesets_ = other.changesets_;
+            bitField0_ = (bitField0_ & ~0x00000010);
+          } else {
+            ensureChangesetsIsMutable();
+            changesets_.addAll(other.changesets_);
+          }
+          
+        }
+        return this;
+      }
+      
+      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;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              
+              return this;
+            default: {
+              if (!parseUnknownField(input, extensionRegistry, tag)) {
+                
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              crosby.binary.Osmformat.Node.Builder subBuilder = crosby.binary.Osmformat.Node.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addNodes(subBuilder.buildPartial());
+              break;
+            }
+            case 18: {
+              crosby.binary.Osmformat.DenseNodes.Builder subBuilder = crosby.binary.Osmformat.DenseNodes.newBuilder();
+              if (hasDense()) {
+                subBuilder.mergeFrom(getDense());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setDense(subBuilder.buildPartial());
+              break;
+            }
+            case 26: {
+              crosby.binary.Osmformat.Way.Builder subBuilder = crosby.binary.Osmformat.Way.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addWays(subBuilder.buildPartial());
+              break;
+            }
+            case 34: {
+              crosby.binary.Osmformat.Relation.Builder subBuilder = crosby.binary.Osmformat.Relation.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addRelations(subBuilder.buildPartial());
+              break;
+            }
+            case 42: {
+              crosby.binary.Osmformat.ChangeSet.Builder subBuilder = crosby.binary.Osmformat.ChangeSet.newBuilder();
+              input.readMessage(subBuilder, extensionRegistry);
+              addChangesets(subBuilder.buildPartial());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // repeated .OSMPBF.Node nodes = 1;
+      private java.util.List<crosby.binary.Osmformat.Node> nodes_ =
+        java.util.Collections.emptyList();
+      private void ensureNodesIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          nodes_ = new java.util.ArrayList<crosby.binary.Osmformat.Node>(nodes_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      
+      public java.util.List<crosby.binary.Osmformat.Node> getNodesList() {
+        return java.util.Collections.unmodifiableList(nodes_);
+      }
+      public int getNodesCount() {
+        return nodes_.size();
+      }
+      public crosby.binary.Osmformat.Node getNodes(int index) {
+        return nodes_.get(index);
+      }
+      public Builder setNodes(
+          int index, crosby.binary.Osmformat.Node value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureNodesIsMutable();
+        nodes_.set(index, value);
+        
+        return this;
+      }
+      public Builder setNodes(
+          int index, crosby.binary.Osmformat.Node.Builder builderForValue) {
+        ensureNodesIsMutable();
+        nodes_.set(index, builderForValue.build());
+        
+        return this;
+      }
+      public Builder addNodes(crosby.binary.Osmformat.Node value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureNodesIsMutable();
+        nodes_.add(value);
+        
+        return this;
+      }
+      public Builder addNodes(
+          int index, crosby.binary.Osmformat.Node value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureNodesIsMutable();
+        nodes_.add(index, value);
+        
+        return this;
+      }
+      public Builder addNodes(
+          crosby.binary.Osmformat.Node.Builder builderForValue) {
+        ensureNodesIsMutable();
+        nodes_.add(builderForValue.build());
+        
+        return this;
+      }
+      public Builder addNodes(
+          int index, crosby.binary.Osmformat.Node.Builder builderForValue) {
+        ensureNodesIsMutable();
+        nodes_.add(index, builderForValue.build());
+        
+        return this;
+      }
+      public Builder addAllNodes(
+          java.lang.Iterable<? extends crosby.binary.Osmformat.Node> values) {
+        ensureNodesIsMutable();
+        super.addAll(values, nodes_);
+        
+        return this;
+      }
+      public Builder clearNodes() {
+        nodes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        
+        return this;
+      }
+      public Builder removeNodes(int index) {
+        ensureNodesIsMutable();
+        nodes_.remove(index);
+        
+        return this;
+      }
+      
+      // optional .OSMPBF.DenseNodes dense = 2;
+      private crosby.binary.Osmformat.DenseNodes dense_ = crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
+      public boolean hasDense() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public crosby.binary.Osmformat.DenseNodes getDense() {
+        return dense_;
+      }
+      public Builder setDense(crosby.binary.Osmformat.DenseNodes value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        dense_ = value;
+        
+        bitField0_ |= 0x00000002;
+        return this;
+      }
+      public Builder setDense(
+          crosby.binary.Osmformat.DenseNodes.Builder builderForValue) {
+        dense_ = builderForValue.build();
+        
+        bitField0_ |= 0x00000002;
+        return this;
+      }
+      public Builder mergeDense(crosby.binary.Osmformat.DenseNodes value) {
+        if (((bitField0_ & 0x00000002) == 0x00000002) &&
+            dense_ != crosby.binary.Osmformat.DenseNodes.getDefaultInstance()) {
+          dense_ =
+            crosby.binary.Osmformat.DenseNodes.newBuilder(dense_).mergeFrom(value).buildPartial();
+        } else {
+          dense_ = value;
+        }
+        
+        bitField0_ |= 0x00000002;
+        return this;
+      }
+      public Builder clearDense() {
+        dense_ = crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
+        
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+      
+      // repeated .OSMPBF.Way ways = 3;
+      private java.util.List<crosby.binary.Osmformat.Way> ways_ =
+        java.util.Collections.emptyList();
+      private void ensureWaysIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          ways_ = new java.util.ArrayList<crosby.binary.Osmformat.Way>(ways_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      
+      public java.util.List<crosby.binary.Osmformat.Way> getWaysList() {
+        return java.util.Collections.unmodifiableList(ways_);
+      }
+      public int getWaysCount() {
+        return ways_.size();
+      }
+      public crosby.binary.Osmformat.Way getWays(int index) {
+        return ways_.get(index);
+      }
+      public Builder setWays(
+          int index, crosby.binary.Osmformat.Way value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureWaysIsMutable();
+        ways_.set(index, value);
+        
+        return this;
+      }
+      public Builder setWays(
+          int index, crosby.binary.Osmformat.Way.Builder builderForValue) {
+        ensureWaysIsMutable();
+        ways_.set(index, builderForValue.build());
+        
+        return this;
+      }
+      public Builder addWays(crosby.binary.Osmformat.Way value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureWaysIsMutable();
+        ways_.add(value);
+        
+        return this;
+      }
+      public Builder addWays(
+          int index, crosby.binary.Osmformat.Way value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureWaysIsMutable();
+        ways_.add(index, value);
+        
+        return this;
+      }
+      public Builder addWays(
+          crosby.binary.Osmformat.Way.Builder builderForValue) {
+        ensureWaysIsMutable();
+        ways_.add(builderForValue.build());
+        
+        return this;
+      }
+      public Builder addWays(
+          int index, crosby.binary.Osmformat.Way.Builder builderForValue) {
+        ensureWaysIsMutable();
+        ways_.add(index, builderForValue.build());
+        
+        return this;
+      }
+      public Builder addAllWays(
+          java.lang.Iterable<? extends crosby.binary.Osmformat.Way> values) {
+        ensureWaysIsMutable();
+        super.addAll(values, ways_);
+        
+        return this;
+      }
+      public Builder clearWays() {
+        ways_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000004);
+        
+        return this;
+      }
+      public Builder removeWays(int index) {
+        ensureWaysIsMutable();
+        ways_.remove(index);
+        
+        return this;
+      }
+      
+      // repeated .OSMPBF.Relation relations = 4;
+      private java.util.List<crosby.binary.Osmformat.Relation> relations_ =
+        java.util.Collections.emptyList();
+      private void ensureRelationsIsMutable() {
+        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
+          relations_ = new java.util.ArrayList<crosby.binary.Osmformat.Relation>(relations_);
+          bitField0_ |= 0x00000008;
+         }
+      }
+      
+      public java.util.List<crosby.binary.Osmformat.Relation> getRelationsList() {
+        return java.util.Collections.unmodifiableList(relations_);
+      }
+      public int getRelationsCount() {
+        return relations_.size();
+      }
+      public crosby.binary.Osmformat.Relation getRelations(int index) {
+        return relations_.get(index);
+      }
+      public Builder setRelations(
+          int index, crosby.binary.Osmformat.Relation value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureRelationsIsMutable();
+        relations_.set(index, value);
+        
+        return this;
+      }
+      public Builder setRelations(
+          int index, crosby.binary.Osmformat.Relation.Builder builderForValue) {
+        ensureRelationsIsMutable();
+        relations_.set(index, builderForValue.build());
+        
+        return this;
+      }
+      public Builder addRelations(crosby.binary.Osmformat.Relation value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureRelationsIsMutable();
+        relations_.add(value);
+        
+        return this;
+      }
+      public Builder addRelations(
+          int index, crosby.binary.Osmformat.Relation value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureRelationsIsMutable();
+        relations_.add(index, value);
+        
+        return this;
+      }
+      public Builder addRelations(
+          crosby.binary.Osmformat.Relation.Builder builderForValue) {
+        ensureRelationsIsMutable();
+        relations_.add(builderForValue.build());
+        
+        return this;
+      }
+      public Builder addRelations(
+          int index, crosby.binary.Osmformat.Relation.Builder builderForValue) {
+        ensureRelationsIsMutable();
+        relations_.add(index, builderForValue.build());
+        
+        return this;
+      }
+      public Builder addAllRelations(
+          java.lang.Iterable<? extends crosby.binary.Osmformat.Relation> values) {
+        ensureRelationsIsMutable();
+        super.addAll(values, relations_);
+        
+        return this;
+      }
+      public Builder clearRelations() {
+        relations_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000008);
+        
+        return this;
+      }
+      public Builder removeRelations(int index) {
+        ensureRelationsIsMutable();
+        relations_.remove(index);
+        
+        return this;
+      }
+      
+      // repeated .OSMPBF.ChangeSet changesets = 5;
+      private java.util.List<crosby.binary.Osmformat.ChangeSet> changesets_ =
+        java.util.Collections.emptyList();
+      private void ensureChangesetsIsMutable() {
+        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
+          changesets_ = new java.util.ArrayList<crosby.binary.Osmformat.ChangeSet>(changesets_);
+          bitField0_ |= 0x00000010;
+         }
+      }
+      
+      public java.util.List<crosby.binary.Osmformat.ChangeSet> getChangesetsList() {
+        return java.util.Collections.unmodifiableList(changesets_);
+      }
+      public int getChangesetsCount() {
+        return changesets_.size();
+      }
+      public crosby.binary.Osmformat.ChangeSet getChangesets(int index) {
+        return changesets_.get(index);
+      }
+      public Builder setChangesets(
+          int index, crosby.binary.Osmformat.ChangeSet value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureChangesetsIsMutable();
+        changesets_.set(index, value);
+        
+        return this;
+      }
+      public Builder setChangesets(
+          int index, crosby.binary.Osmformat.ChangeSet.Builder builderForValue) {
+        ensureChangesetsIsMutable();
+        changesets_.set(index, builderForValue.build());
+        
+        return this;
+      }
+      public Builder addChangesets(crosby.binary.Osmformat.ChangeSet value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureChangesetsIsMutable();
+        changesets_.add(value);
+        
+        return this;
+      }
+      public Builder addChangesets(
+          int index, crosby.binary.Osmformat.ChangeSet value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureChangesetsIsMutable();
+        changesets_.add(index, value);
+        
+        return this;
+      }
+      public Builder addChangesets(
+          crosby.binary.Osmformat.ChangeSet.Builder builderForValue) {
+        ensureChangesetsIsMutable();
+        changesets_.add(builderForValue.build());
+        
+        return this;
+      }
+      public Builder addChangesets(
+          int index, crosby.binary.Osmformat.ChangeSet.Builder builderForValue) {
+        ensureChangesetsIsMutable();
+        changesets_.add(index, builderForValue.build());
+        
+        return this;
+      }
+      public Builder addAllChangesets(
+          java.lang.Iterable<? extends crosby.binary.Osmformat.ChangeSet> values) {
+        ensureChangesetsIsMutable();
+        super.addAll(values, changesets_);
+        
+        return this;
+      }
+      public Builder clearChangesets() {
+        changesets_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000010);
+        
+        return this;
+      }
+      public Builder removeChangesets(int index) {
+        ensureChangesetsIsMutable();
+        changesets_.remove(index);
+        
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:OSMPBF.PrimitiveGroup)
+    }
+    
+    static {
+      defaultInstance = new PrimitiveGroup(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:OSMPBF.PrimitiveGroup)
+  }
+  
+  public interface StringTableOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+    
+    // repeated bytes s = 1;
+    java.util.List<com.google.protobuf.ByteString> getSList();
+    int getSCount();
+    com.google.protobuf.ByteString getS(int index);
+  }
+  public static final class StringTable extends
+      com.google.protobuf.GeneratedMessageLite
+      implements StringTableOrBuilder {
+    // Use StringTable.newBuilder() to construct.
+    private StringTable(Builder builder) {
+      super(builder);
+    }
+    private StringTable(boolean noInit) {}
+    
+    private static final StringTable defaultInstance;
+    public static StringTable getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public StringTable getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    // repeated bytes s = 1;
+    public static final int S_FIELD_NUMBER = 1;
+    private java.util.List<com.google.protobuf.ByteString> s_;
+    public java.util.List<com.google.protobuf.ByteString>
+        getSList() {
+      return s_;
+    }
+    public int getSCount() {
+      return s_.size();
+    }
+    public com.google.protobuf.ByteString getS(int index) {
+      return s_.get(index);
+    }
+    
+    private void initFields() {
+      s_ = java.util.Collections.emptyList();;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      for (int i = 0; i < s_.size(); i++) {
+        output.writeBytes(1, s_.get(i));
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      {
+        int dataSize = 0;
+        for (int i = 0; i < s_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeBytesSizeNoTag(s_.get(i));
+        }
+        size += dataSize;
+        size += 1 * getSList().size();
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static crosby.binary.Osmformat.StringTable parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.StringTable parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.StringTable parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.StringTable parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.StringTable parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.StringTable parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.StringTable parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.StringTable parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.StringTable parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.StringTable parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.StringTable prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.StringTable, Builder>
+        implements crosby.binary.Osmformat.StringTableOrBuilder {
+      // Construct using crosby.binary.Osmformat.StringTable.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        s_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public crosby.binary.Osmformat.StringTable getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.StringTable.getDefaultInstance();
+      }
+      
+      public crosby.binary.Osmformat.StringTable build() {
+        crosby.binary.Osmformat.StringTable result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private crosby.binary.Osmformat.StringTable buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        crosby.binary.Osmformat.StringTable result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public crosby.binary.Osmformat.StringTable buildPartial() {
+        crosby.binary.Osmformat.StringTable result = new crosby.binary.Osmformat.StringTable(this);
+        //int from_bitField0_ = bitField0_;
+        if (((bitField0_ & 0x00000001) == 0x00000001)) {
+          s_ = java.util.Collections.unmodifiableList(s_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.s_ = s_;
+        return result;
+      }
+      
+      public Builder mergeFrom(crosby.binary.Osmformat.StringTable other) {
+        if (other == crosby.binary.Osmformat.StringTable.getDefaultInstance()) return this;
+        if (!other.s_.isEmpty()) {
+          if (s_.isEmpty()) {
+            s_ = other.s_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureSIsMutable();
+            s_.addAll(other.s_);
+          }
+          
+        }
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              
+              return this;
+            default: {
+              if (!parseUnknownField(input, extensionRegistry, tag)) {
+                
+                return this;
+              }
+              break;
+            }
+            case 10: {
+              ensureSIsMutable();
+              s_.add(input.readBytes());
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // repeated bytes s = 1;
+      private java.util.List<com.google.protobuf.ByteString> s_ = java.util.Collections.emptyList();;
+      private void ensureSIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          s_ = new java.util.ArrayList<com.google.protobuf.ByteString>(s_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      public java.util.List<com.google.protobuf.ByteString>
+          getSList() {
+        return java.util.Collections.unmodifiableList(s_);
+      }
+      public int getSCount() {
+        return s_.size();
+      }
+      public com.google.protobuf.ByteString getS(int index) {
+        return s_.get(index);
+      }
+      public Builder setS(
+          int index, com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureSIsMutable();
+        s_.set(index, value);
+        
+        return this;
+      }
+      public Builder addS(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureSIsMutable();
+        s_.add(value);
+        
+        return this;
+      }
+      public Builder addAllS(
+          java.lang.Iterable<? extends com.google.protobuf.ByteString> values) {
+        ensureSIsMutable();
+        super.addAll(values, s_);
+        
+        return this;
+      }
+      public Builder clearS() {
+        s_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:OSMPBF.StringTable)
+    }
+    
+    static {
+      defaultInstance = new StringTable(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:OSMPBF.StringTable)
+  }
+  
+  public interface InfoOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+    
+    // optional int32 version = 1 [default = -1];
+    boolean hasVersion();
+    int getVersion();
+    
+    // optional int64 timestamp = 2;
+    boolean hasTimestamp();
+    long getTimestamp();
+    
+    // optional int64 changeset = 3;
+    boolean hasChangeset();
+    long getChangeset();
+    
+    // optional int32 uid = 4;
+    boolean hasUid();
+    int getUid();
+    
+    // optional uint32 user_sid = 5;
+    boolean hasUserSid();
+    int getUserSid();
+  }
+  public static final class Info extends
+      com.google.protobuf.GeneratedMessageLite
+      implements InfoOrBuilder {
+    // Use Info.newBuilder() to construct.
+    private Info(Builder builder) {
+      super(builder);
+    }
+    private Info(boolean noInit) {}
+    
+    private static final Info defaultInstance;
+    public static Info getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public Info getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    private int bitField0_;
+    // optional int32 version = 1 [default = -1];
+    public static final int VERSION_FIELD_NUMBER = 1;
+    private int version_;
+    public boolean hasVersion() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public int getVersion() {
+      return version_;
+    }
+    
+    // optional int64 timestamp = 2;
+    public static final int TIMESTAMP_FIELD_NUMBER = 2;
+    private long timestamp_;
+    public boolean hasTimestamp() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public long getTimestamp() {
+      return timestamp_;
+    }
+    
+    // optional int64 changeset = 3;
+    public static final int CHANGESET_FIELD_NUMBER = 3;
+    private long changeset_;
+    public boolean hasChangeset() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public long getChangeset() {
+      return changeset_;
+    }
+    
+    // optional int32 uid = 4;
+    public static final int UID_FIELD_NUMBER = 4;
+    private int uid_;
+    public boolean hasUid() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public int getUid() {
+      return uid_;
+    }
+    
+    // optional uint32 user_sid = 5;
+    public static final int USER_SID_FIELD_NUMBER = 5;
+    private int userSid_;
+    public boolean hasUserSid() {
+      return ((bitField0_ & 0x00000010) == 0x00000010);
+    }
+    public int getUserSid() {
+      return userSid_;
+    }
+    
+    private void initFields() {
+      version_ = -1;
+      timestamp_ = 0L;
+      changeset_ = 0L;
+      uid_ = 0;
+      userSid_ = 0;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeInt32(1, version_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeInt64(2, timestamp_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeInt64(3, changeset_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeInt32(4, uid_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        output.writeUInt32(5, userSid_);
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(1, version_);
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, timestamp_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, changeset_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(4, uid_);
+      }
+      if (((bitField0_ & 0x00000010) == 0x00000010)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(5, userSid_);
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static crosby.binary.Osmformat.Info parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Info parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.Info parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Info parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.Info parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Info parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.Info parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.Info parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.Info parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Info parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.Info prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.Info, Builder>
+        implements crosby.binary.Osmformat.InfoOrBuilder {
+      // Construct using crosby.binary.Osmformat.Info.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        version_ = -1;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        timestamp_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        changeset_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        uid_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        userSid_ = 0;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public crosby.binary.Osmformat.Info getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.Info.getDefaultInstance();
+      }
+      
+      public crosby.binary.Osmformat.Info build() {
+        crosby.binary.Osmformat.Info result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private crosby.binary.Osmformat.Info buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        crosby.binary.Osmformat.Info result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public crosby.binary.Osmformat.Info buildPartial() {
+        crosby.binary.Osmformat.Info result = new crosby.binary.Osmformat.Info(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.version_ = version_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.timestamp_ = timestamp_;
+        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.changeset_ = changeset_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.uid_ = uid_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000010;
+        }
+        result.userSid_ = userSid_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+      
+      public Builder mergeFrom(crosby.binary.Osmformat.Info other) {
+        if (other == crosby.binary.Osmformat.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());
+        }
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              
+              return this;
+            default: {
+              if (!parseUnknownField(input, extensionRegistry, tag)) {
+                
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              version_ = input.readInt32();
+              break;
+            }
+            case 16: {
+              bitField0_ |= 0x00000002;
+              timestamp_ = input.readInt64();
+              break;
+            }
+            case 24: {
+              bitField0_ |= 0x00000004;
+              changeset_ = input.readInt64();
+              break;
+            }
+            case 32: {
+              bitField0_ |= 0x00000008;
+              uid_ = input.readInt32();
+              break;
+            }
+            case 40: {
+              bitField0_ |= 0x00000010;
+              userSid_ = input.readUInt32();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // optional int32 version = 1 [default = -1];
+      private int version_ = -1;
+      public boolean hasVersion() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public int getVersion() {
+        return version_;
+      }
+      public Builder setVersion(int value) {
+        bitField0_ |= 0x00000001;
+        version_ = value;
+        
+        return this;
+      }
+      public Builder clearVersion() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        version_ = -1;
+        
+        return this;
+      }
+      
+      // optional int64 timestamp = 2;
+      private long timestamp_ ;
+      public boolean hasTimestamp() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public long getTimestamp() {
+        return timestamp_;
+      }
+      public Builder setTimestamp(long value) {
+        bitField0_ |= 0x00000002;
+        timestamp_ = value;
+        
+        return this;
+      }
+      public Builder clearTimestamp() {
+        bitField0_ = (bitField0_ & ~0x00000002);
+        timestamp_ = 0L;
+        
+        return this;
+      }
+      
+      // optional int64 changeset = 3;
+      private long changeset_ ;
+      public boolean hasChangeset() {
+        return ((bitField0_ & 0x00000004) == 0x00000004);
+      }
+      public long getChangeset() {
+        return changeset_;
+      }
+      public Builder setChangeset(long value) {
+        bitField0_ |= 0x00000004;
+        changeset_ = value;
+        
+        return this;
+      }
+      public Builder clearChangeset() {
+        bitField0_ = (bitField0_ & ~0x00000004);
+        changeset_ = 0L;
+        
+        return this;
+      }
+      
+      // optional int32 uid = 4;
+      private int uid_ ;
+      public boolean hasUid() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public int getUid() {
+        return uid_;
+      }
+      public Builder setUid(int value) {
+        bitField0_ |= 0x00000008;
+        uid_ = value;
+        
+        return this;
+      }
+      public Builder clearUid() {
+        bitField0_ = (bitField0_ & ~0x00000008);
+        uid_ = 0;
+        
+        return this;
+      }
+      
+      // optional uint32 user_sid = 5;
+      private int userSid_ ;
+      public boolean hasUserSid() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public int getUserSid() {
+        return userSid_;
+      }
+      public Builder setUserSid(int value) {
+        bitField0_ |= 0x00000010;
+        userSid_ = value;
+        
+        return this;
+      }
+      public Builder clearUserSid() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        userSid_ = 0;
+        
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:OSMPBF.Info)
+    }
+    
+    static {
+      defaultInstance = new Info(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:OSMPBF.Info)
+  }
+  
+  public interface DenseInfoOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+    
+    // repeated int32 version = 1 [packed = true];
+    java.util.List<java.lang.Integer> getVersionList();
+    int getVersionCount();
+    int getVersion(int index);
+    
+    // repeated sint64 timestamp = 2 [packed = true];
+    java.util.List<java.lang.Long> getTimestampList();
+    int getTimestampCount();
+    long getTimestamp(int index);
+    
+    // repeated sint64 changeset = 3 [packed = true];
+    java.util.List<java.lang.Long> getChangesetList();
+    int getChangesetCount();
+    long getChangeset(int index);
+    
+    // repeated sint32 uid = 4 [packed = true];
+    java.util.List<java.lang.Integer> getUidList();
+    int getUidCount();
+    int getUid(int index);
+    
+    // repeated sint32 user_sid = 5 [packed = true];
+    java.util.List<java.lang.Integer> getUserSidList();
+    int getUserSidCount();
+    int getUserSid(int index);
+  }
+  public static final class DenseInfo extends
+      com.google.protobuf.GeneratedMessageLite
+      implements DenseInfoOrBuilder {
+    // Use DenseInfo.newBuilder() to construct.
+    private DenseInfo(Builder builder) {
+      super(builder);
+    }
+    private DenseInfo(boolean noInit) {}
+    
+    private static final DenseInfo defaultInstance;
+    public static DenseInfo getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public DenseInfo getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    // repeated int32 version = 1 [packed = true];
+    public static final int VERSION_FIELD_NUMBER = 1;
+    private java.util.List<java.lang.Integer> version_;
+    public java.util.List<java.lang.Integer>
+        getVersionList() {
+      return version_;
+    }
+    public int getVersionCount() {
+      return version_.size();
+    }
+    public int getVersion(int index) {
+      return version_.get(index);
+    }
+    private int versionMemoizedSerializedSize = -1;
+    
+    // repeated sint64 timestamp = 2 [packed = true];
+    public static final int TIMESTAMP_FIELD_NUMBER = 2;
+    private java.util.List<java.lang.Long> timestamp_;
+    public java.util.List<java.lang.Long>
+        getTimestampList() {
+      return timestamp_;
+    }
+    public int getTimestampCount() {
+      return timestamp_.size();
+    }
+    public long getTimestamp(int index) {
+      return timestamp_.get(index);
+    }
+    private int timestampMemoizedSerializedSize = -1;
+    
+    // repeated sint64 changeset = 3 [packed = true];
+    public static final int CHANGESET_FIELD_NUMBER = 3;
+    private java.util.List<java.lang.Long> changeset_;
+    public java.util.List<java.lang.Long>
+        getChangesetList() {
+      return changeset_;
+    }
+    public int getChangesetCount() {
+      return changeset_.size();
+    }
+    public long getChangeset(int index) {
+      return changeset_.get(index);
+    }
+    private int changesetMemoizedSerializedSize = -1;
+    
+    // repeated sint32 uid = 4 [packed = true];
+    public static final int UID_FIELD_NUMBER = 4;
+    private java.util.List<java.lang.Integer> uid_;
+    public java.util.List<java.lang.Integer>
+        getUidList() {
+      return uid_;
+    }
+    public int getUidCount() {
+      return uid_.size();
+    }
+    public int getUid(int index) {
+      return uid_.get(index);
+    }
+    private int uidMemoizedSerializedSize = -1;
+    
+    // repeated sint32 user_sid = 5 [packed = true];
+    public static final int USER_SID_FIELD_NUMBER = 5;
+    private java.util.List<java.lang.Integer> userSid_;
+    public java.util.List<java.lang.Integer>
+        getUserSidList() {
+      return userSid_;
+    }
+    public int getUserSidCount() {
+      return userSid_.size();
+    }
+    public int getUserSid(int index) {
+      return userSid_.get(index);
+    }
+    private int userSidMemoizedSerializedSize = -1;
+    
+    private void initFields() {
+      version_ = java.util.Collections.emptyList();;
+      timestamp_ = java.util.Collections.emptyList();;
+      changeset_ = java.util.Collections.emptyList();;
+      uid_ = java.util.Collections.emptyList();;
+      userSid_ = java.util.Collections.emptyList();;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (getVersionList().size() > 0) {
+        output.writeRawVarint32(10);
+        output.writeRawVarint32(versionMemoizedSerializedSize);
+      }
+      for (int i = 0; i < version_.size(); i++) {
+        output.writeInt32NoTag(version_.get(i));
+      }
+      if (getTimestampList().size() > 0) {
+        output.writeRawVarint32(18);
+        output.writeRawVarint32(timestampMemoizedSerializedSize);
+      }
+      for (int i = 0; i < timestamp_.size(); i++) {
+        output.writeSInt64NoTag(timestamp_.get(i));
+      }
+      if (getChangesetList().size() > 0) {
+        output.writeRawVarint32(26);
+        output.writeRawVarint32(changesetMemoizedSerializedSize);
+      }
+      for (int i = 0; i < changeset_.size(); i++) {
+        output.writeSInt64NoTag(changeset_.get(i));
+      }
+      if (getUidList().size() > 0) {
+        output.writeRawVarint32(34);
+        output.writeRawVarint32(uidMemoizedSerializedSize);
+      }
+      for (int i = 0; i < uid_.size(); i++) {
+        output.writeSInt32NoTag(uid_.get(i));
+      }
+      if (getUserSidList().size() > 0) {
+        output.writeRawVarint32(42);
+        output.writeRawVarint32(userSidMemoizedSerializedSize);
+      }
+      for (int i = 0; i < userSid_.size(); i++) {
+        output.writeSInt32NoTag(userSid_.get(i));
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      {
+        int dataSize = 0;
+        for (int i = 0; i < version_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(version_.get(i));
+        }
+        size += dataSize;
+        if (!getVersionList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        versionMemoizedSerializedSize = dataSize;
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < timestamp_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeSInt64SizeNoTag(timestamp_.get(i));
+        }
+        size += dataSize;
+        if (!getTimestampList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        timestampMemoizedSerializedSize = dataSize;
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < changeset_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeSInt64SizeNoTag(changeset_.get(i));
+        }
+        size += dataSize;
+        if (!getChangesetList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        changesetMemoizedSerializedSize = dataSize;
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < uid_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeSInt32SizeNoTag(uid_.get(i));
+        }
+        size += dataSize;
+        if (!getUidList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        uidMemoizedSerializedSize = dataSize;
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < userSid_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeSInt32SizeNoTag(userSid_.get(i));
+        }
+        size += dataSize;
+        if (!getUserSidList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        userSidMemoizedSerializedSize = dataSize;
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static crosby.binary.Osmformat.DenseInfo parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.DenseInfo parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.DenseInfo parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.DenseInfo parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.DenseInfo parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.DenseInfo parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.DenseInfo parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.DenseInfo parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.DenseInfo parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.DenseInfo parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.DenseInfo prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.DenseInfo, Builder>
+        implements crosby.binary.Osmformat.DenseInfoOrBuilder {
+      // Construct using crosby.binary.Osmformat.DenseInfo.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        version_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        timestamp_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        changeset_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        uid_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        userSid_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public crosby.binary.Osmformat.DenseInfo getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
+      }
+      
+      public crosby.binary.Osmformat.DenseInfo build() {
+        crosby.binary.Osmformat.DenseInfo result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private crosby.binary.Osmformat.DenseInfo buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        crosby.binary.Osmformat.DenseInfo result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public crosby.binary.Osmformat.DenseInfo buildPartial() {
+        crosby.binary.Osmformat.DenseInfo result = new crosby.binary.Osmformat.DenseInfo(this);
+        //int from_bitField0_ = bitField0_;
+        if (((bitField0_ & 0x00000001) == 0x00000001)) {
+          version_ = java.util.Collections.unmodifiableList(version_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.version_ = version_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          timestamp_ = java.util.Collections.unmodifiableList(timestamp_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.timestamp_ = timestamp_;
+        if (((bitField0_ & 0x00000004) == 0x00000004)) {
+          changeset_ = java.util.Collections.unmodifiableList(changeset_);
+          bitField0_ = (bitField0_ & ~0x00000004);
+        }
+        result.changeset_ = changeset_;
+        if (((bitField0_ & 0x00000008) == 0x00000008)) {
+          uid_ = java.util.Collections.unmodifiableList(uid_);
+          bitField0_ = (bitField0_ & ~0x00000008);
+        }
+        result.uid_ = uid_;
+        if (((bitField0_ & 0x00000010) == 0x00000010)) {
+          userSid_ = java.util.Collections.unmodifiableList(userSid_);
+          bitField0_ = (bitField0_ & ~0x00000010);
+        }
+        result.userSid_ = userSid_;
+        return result;
+      }
+      
+      public Builder mergeFrom(crosby.binary.Osmformat.DenseInfo other) {
+        if (other == crosby.binary.Osmformat.DenseInfo.getDefaultInstance()) return this;
+        if (!other.version_.isEmpty()) {
+          if (version_.isEmpty()) {
+            version_ = other.version_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureVersionIsMutable();
+            version_.addAll(other.version_);
+          }
+          
+        }
+        if (!other.timestamp_.isEmpty()) {
+          if (timestamp_.isEmpty()) {
+            timestamp_ = other.timestamp_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensureTimestampIsMutable();
+            timestamp_.addAll(other.timestamp_);
+          }
+          
+        }
+        if (!other.changeset_.isEmpty()) {
+          if (changeset_.isEmpty()) {
+            changeset_ = other.changeset_;
+            bitField0_ = (bitField0_ & ~0x00000004);
+          } else {
+            ensureChangesetIsMutable();
+            changeset_.addAll(other.changeset_);
+          }
+          
+        }
+        if (!other.uid_.isEmpty()) {
+          if (uid_.isEmpty()) {
+            uid_ = other.uid_;
+            bitField0_ = (bitField0_ & ~0x00000008);
+          } else {
+            ensureUidIsMutable();
+            uid_.addAll(other.uid_);
+          }
+          
+        }
+        if (!other.userSid_.isEmpty()) {
+          if (userSid_.isEmpty()) {
+            userSid_ = other.userSid_;
+            bitField0_ = (bitField0_ & ~0x00000010);
+          } else {
+            ensureUserSidIsMutable();
+            userSid_.addAll(other.userSid_);
+          }
+          
+        }
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              
+              return this;
+            default: {
+              if (!parseUnknownField(input, extensionRegistry, tag)) {
+                
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              ensureVersionIsMutable();
+              version_.add(input.readInt32());
+              break;
+            }
+            case 10: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addVersion(input.readInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 16: {
+              ensureTimestampIsMutable();
+              timestamp_.add(input.readSInt64());
+              break;
+            }
+            case 18: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addTimestamp(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 24: {
+              ensureChangesetIsMutable();
+              changeset_.add(input.readSInt64());
+              break;
+            }
+            case 26: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addChangeset(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 32: {
+              ensureUidIsMutable();
+              uid_.add(input.readSInt32());
+              break;
+            }
+            case 34: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addUid(input.readSInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 40: {
+              ensureUserSidIsMutable();
+              userSid_.add(input.readSInt32());
+              break;
+            }
+            case 42: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addUserSid(input.readSInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // repeated int32 version = 1 [packed = true];
+      private java.util.List<java.lang.Integer> version_ = java.util.Collections.emptyList();;
+      private void ensureVersionIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          version_ = new java.util.ArrayList<java.lang.Integer>(version_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      public java.util.List<java.lang.Integer>
+          getVersionList() {
+        return java.util.Collections.unmodifiableList(version_);
+      }
+      public int getVersionCount() {
+        return version_.size();
+      }
+      public int getVersion(int index) {
+        return version_.get(index);
+      }
+      public Builder setVersion(
+          int index, int value) {
+        ensureVersionIsMutable();
+        version_.set(index, value);
+        
+        return this;
+      }
+      public Builder addVersion(int value) {
+        ensureVersionIsMutable();
+        version_.add(value);
+        
+        return this;
+      }
+      public Builder addAllVersion(
+          java.lang.Iterable<? extends java.lang.Integer> values) {
+        ensureVersionIsMutable();
+        super.addAll(values, version_);
+        
+        return this;
+      }
+      public Builder clearVersion() {
+        version_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        
+        return this;
+      }
+      
+      // repeated sint64 timestamp = 2 [packed = true];
+      private java.util.List<java.lang.Long> timestamp_ = java.util.Collections.emptyList();;
+      private void ensureTimestampIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          timestamp_ = new java.util.ArrayList<java.lang.Long>(timestamp_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      public java.util.List<java.lang.Long>
+          getTimestampList() {
+        return java.util.Collections.unmodifiableList(timestamp_);
+      }
+      public int getTimestampCount() {
+        return timestamp_.size();
+      }
+      public long getTimestamp(int index) {
+        return timestamp_.get(index);
+      }
+      public Builder setTimestamp(
+          int index, long value) {
+        ensureTimestampIsMutable();
+        timestamp_.set(index, value);
+        
+        return this;
+      }
+      public Builder addTimestamp(long value) {
+        ensureTimestampIsMutable();
+        timestamp_.add(value);
+        
+        return this;
+      }
+      public Builder addAllTimestamp(
+          java.lang.Iterable<? extends java.lang.Long> values) {
+        ensureTimestampIsMutable();
+        super.addAll(values, timestamp_);
+        
+        return this;
+      }
+      public Builder clearTimestamp() {
+        timestamp_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        
+        return this;
+      }
+      
+      // repeated sint64 changeset = 3 [packed = true];
+      private java.util.List<java.lang.Long> changeset_ = java.util.Collections.emptyList();;
+      private void ensureChangesetIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          changeset_ = new java.util.ArrayList<java.lang.Long>(changeset_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      public java.util.List<java.lang.Long>
+          getChangesetList() {
+        return java.util.Collections.unmodifiableList(changeset_);
+      }
+      public int getChangesetCount() {
+        return changeset_.size();
+      }
+      public long getChangeset(int index) {
+        return changeset_.get(index);
+      }
+      public Builder setChangeset(
+          int index, long value) {
+        ensureChangesetIsMutable();
+        changeset_.set(index, value);
+        
+        return this;
+      }
+      public Builder addChangeset(long value) {
+        ensureChangesetIsMutable();
+        changeset_.add(value);
+        
+        return this;
+      }
+      public Builder addAllChangeset(
+          java.lang.Iterable<? extends java.lang.Long> values) {
+        ensureChangesetIsMutable();
+        super.addAll(values, changeset_);
+        
+        return this;
+      }
+      public Builder clearChangeset() {
+        changeset_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        
+        return this;
+      }
+      
+      // repeated sint32 uid = 4 [packed = true];
+      private java.util.List<java.lang.Integer> uid_ = java.util.Collections.emptyList();;
+      private void ensureUidIsMutable() {
+        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
+          uid_ = new java.util.ArrayList<java.lang.Integer>(uid_);
+          bitField0_ |= 0x00000008;
+         }
+      }
+      public java.util.List<java.lang.Integer>
+          getUidList() {
+        return java.util.Collections.unmodifiableList(uid_);
+      }
+      public int getUidCount() {
+        return uid_.size();
+      }
+      public int getUid(int index) {
+        return uid_.get(index);
+      }
+      public Builder setUid(
+          int index, int value) {
+        ensureUidIsMutable();
+        uid_.set(index, value);
+        
+        return this;
+      }
+      public Builder addUid(int value) {
+        ensureUidIsMutable();
+        uid_.add(value);
+        
+        return this;
+      }
+      public Builder addAllUid(
+          java.lang.Iterable<? extends java.lang.Integer> values) {
+        ensureUidIsMutable();
+        super.addAll(values, uid_);
+        
+        return this;
+      }
+      public Builder clearUid() {
+        uid_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        
+        return this;
+      }
+      
+      // repeated sint32 user_sid = 5 [packed = true];
+      private java.util.List<java.lang.Integer> userSid_ = java.util.Collections.emptyList();;
+      private void ensureUserSidIsMutable() {
+        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
+          userSid_ = new java.util.ArrayList<java.lang.Integer>(userSid_);
+          bitField0_ |= 0x00000010;
+         }
+      }
+      public java.util.List<java.lang.Integer>
+          getUserSidList() {
+        return java.util.Collections.unmodifiableList(userSid_);
+      }
+      public int getUserSidCount() {
+        return userSid_.size();
+      }
+      public int getUserSid(int index) {
+        return userSid_.get(index);
+      }
+      public Builder setUserSid(
+          int index, int value) {
+        ensureUserSidIsMutable();
+        userSid_.set(index, value);
+        
+        return this;
+      }
+      public Builder addUserSid(int value) {
+        ensureUserSidIsMutable();
+        userSid_.add(value);
+        
+        return this;
+      }
+      public Builder addAllUserSid(
+          java.lang.Iterable<? extends java.lang.Integer> values) {
+        ensureUserSidIsMutable();
+        super.addAll(values, userSid_);
+        
+        return this;
+      }
+      public Builder clearUserSid() {
+        userSid_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:OSMPBF.DenseInfo)
+    }
+    
+    static {
+      defaultInstance = new DenseInfo(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:OSMPBF.DenseInfo)
+  }
+  
+  public interface ChangeSetOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+    
+    // required int64 id = 1;
+    boolean hasId();
+    long getId();
+  }
+  public static final class ChangeSet extends
+      com.google.protobuf.GeneratedMessageLite
+      implements ChangeSetOrBuilder {
+    // Use ChangeSet.newBuilder() to construct.
+    private ChangeSet(Builder builder) {
+      super(builder);
+    }
+    private ChangeSet(boolean noInit) {}
+    
+    private static final ChangeSet defaultInstance;
+    public static ChangeSet getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public ChangeSet getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    private int bitField0_;
+    // required int64 id = 1;
+    public static final int ID_FIELD_NUMBER = 1;
+    private long id_;
+    public boolean hasId() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public long getId() {
+      return id_;
+    }
+    
+    private void initFields() {
+      id_ = 0L;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasId()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeInt64(1, id_);
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, id_);
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.ChangeSet parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.ChangeSet prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.ChangeSet, Builder>
+        implements crosby.binary.Osmformat.ChangeSetOrBuilder {
+      // Construct using crosby.binary.Osmformat.ChangeSet.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        id_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public crosby.binary.Osmformat.ChangeSet getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.ChangeSet.getDefaultInstance();
+      }
+      
+      public crosby.binary.Osmformat.ChangeSet build() {
+        crosby.binary.Osmformat.ChangeSet result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private crosby.binary.Osmformat.ChangeSet buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        crosby.binary.Osmformat.ChangeSet result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public crosby.binary.Osmformat.ChangeSet buildPartial() {
+        crosby.binary.Osmformat.ChangeSet result = new crosby.binary.Osmformat.ChangeSet(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.id_ = id_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+      
+      public Builder mergeFrom(crosby.binary.Osmformat.ChangeSet other) {
+        if (other == crosby.binary.Osmformat.ChangeSet.getDefaultInstance()) return this;
+        if (other.hasId()) {
+          setId(other.getId());
+        }
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasId()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              
+              return this;
+            default: {
+              if (!parseUnknownField(input, extensionRegistry, tag)) {
+                
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              id_ = input.readInt64();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required int64 id = 1;
+      private long id_ ;
+      public boolean hasId() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public long getId() {
+        return id_;
+      }
+      public Builder setId(long value) {
+        bitField0_ |= 0x00000001;
+        id_ = value;
+        
+        return this;
+      }
+      public Builder clearId() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        id_ = 0L;
+        
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:OSMPBF.ChangeSet)
+    }
+    
+    static {
+      defaultInstance = new ChangeSet(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:OSMPBF.ChangeSet)
+  }
+  
+  public interface NodeOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+    
+    // required sint64 id = 1;
+    boolean hasId();
+    long getId();
+    
+    // repeated uint32 keys = 2 [packed = true];
+    java.util.List<java.lang.Integer> getKeysList();
+    int getKeysCount();
+    int getKeys(int index);
+    
+    // repeated uint32 vals = 3 [packed = true];
+    java.util.List<java.lang.Integer> getValsList();
+    int getValsCount();
+    int getVals(int index);
+    
+    // optional .OSMPBF.Info info = 4;
+    boolean hasInfo();
+    crosby.binary.Osmformat.Info getInfo();
+    
+    // required sint64 lat = 8;
+    boolean hasLat();
+    long getLat();
+    
+    // required sint64 lon = 9;
+    boolean hasLon();
+    long getLon();
+  }
+  public static final class Node extends
+      com.google.protobuf.GeneratedMessageLite
+      implements NodeOrBuilder {
+    // Use Node.newBuilder() to construct.
+    private Node(Builder builder) {
+      super(builder);
+    }
+    private Node(boolean noInit) {}
+    
+    private static final Node defaultInstance;
+    public static Node getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public Node getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    private int bitField0_;
+    // required sint64 id = 1;
+    public static final int ID_FIELD_NUMBER = 1;
+    private long id_;
+    public boolean hasId() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public long getId() {
+      return id_;
+    }
+    
+    // repeated uint32 keys = 2 [packed = true];
+    public static final int KEYS_FIELD_NUMBER = 2;
+    private java.util.List<java.lang.Integer> keys_;
+    public java.util.List<java.lang.Integer>
+        getKeysList() {
+      return keys_;
+    }
+    public int getKeysCount() {
+      return keys_.size();
+    }
+    public int getKeys(int index) {
+      return keys_.get(index);
+    }
+    private int keysMemoizedSerializedSize = -1;
+    
+    // repeated uint32 vals = 3 [packed = true];
+    public static final int VALS_FIELD_NUMBER = 3;
+    private java.util.List<java.lang.Integer> vals_;
+    public java.util.List<java.lang.Integer>
+        getValsList() {
+      return vals_;
+    }
+    public int getValsCount() {
+      return vals_.size();
+    }
+    public int getVals(int index) {
+      return vals_.get(index);
+    }
+    private int valsMemoizedSerializedSize = -1;
+    
+    // optional .OSMPBF.Info info = 4;
+    public static final int INFO_FIELD_NUMBER = 4;
+    private crosby.binary.Osmformat.Info info_;
+    public boolean hasInfo() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public crosby.binary.Osmformat.Info getInfo() {
+      return info_;
+    }
+    
+    // required sint64 lat = 8;
+    public static final int LAT_FIELD_NUMBER = 8;
+    private long lat_;
+    public boolean hasLat() {
+      return ((bitField0_ & 0x00000004) == 0x00000004);
+    }
+    public long getLat() {
+      return lat_;
+    }
+    
+    // required sint64 lon = 9;
+    public static final int LON_FIELD_NUMBER = 9;
+    private long lon_;
+    public boolean hasLon() {
+      return ((bitField0_ & 0x00000008) == 0x00000008);
+    }
+    public long getLon() {
+      return lon_;
+    }
+    
+    private void initFields() {
+      id_ = 0L;
+      keys_ = java.util.Collections.emptyList();;
+      vals_ = java.util.Collections.emptyList();;
+      info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+      lat_ = 0L;
+      lon_ = 0L;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasId()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasLat()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      if (!hasLon()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeSInt64(1, id_);
+      }
+      if (getKeysList().size() > 0) {
+        output.writeRawVarint32(18);
+        output.writeRawVarint32(keysMemoizedSerializedSize);
+      }
+      for (int i = 0; i < keys_.size(); i++) {
+        output.writeUInt32NoTag(keys_.get(i));
+      }
+      if (getValsList().size() > 0) {
+        output.writeRawVarint32(26);
+        output.writeRawVarint32(valsMemoizedSerializedSize);
+      }
+      for (int i = 0; i < vals_.size(); i++) {
+        output.writeUInt32NoTag(vals_.get(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeMessage(4, info_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        output.writeSInt64(8, lat_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        output.writeSInt64(9, lon_);
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeSInt64Size(1, id_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < keys_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(keys_.get(i));
+        }
+        size += dataSize;
+        if (!getKeysList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        keysMemoizedSerializedSize = dataSize;
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < vals_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(vals_.get(i));
+        }
+        size += dataSize;
+        if (!getValsList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        valsMemoizedSerializedSize = dataSize;
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, info_);
+      }
+      if (((bitField0_ & 0x00000004) == 0x00000004)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeSInt64Size(8, lat_);
+      }
+      if (((bitField0_ & 0x00000008) == 0x00000008)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeSInt64Size(9, lon_);
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static crosby.binary.Osmformat.Node parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Node parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.Node parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Node parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.Node parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Node parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.Node parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.Node parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.Node parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Node parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.Node prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.Node, Builder>
+        implements crosby.binary.Osmformat.NodeOrBuilder {
+      // Construct using crosby.binary.Osmformat.Node.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        id_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        keys_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        vals_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+        bitField0_ = (bitField0_ & ~0x00000008);
+        lat_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        lon_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000020);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public crosby.binary.Osmformat.Node getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.Node.getDefaultInstance();
+      }
+      
+      public crosby.binary.Osmformat.Node build() {
+        crosby.binary.Osmformat.Node result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private crosby.binary.Osmformat.Node buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        crosby.binary.Osmformat.Node result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public crosby.binary.Osmformat.Node buildPartial() {
+        crosby.binary.Osmformat.Node result = new crosby.binary.Osmformat.Node(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.id_ = id_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          keys_ = java.util.Collections.unmodifiableList(keys_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.keys_ = keys_;
+        if (((bitField0_ & 0x00000004) == 0x00000004)) {
+          vals_ = java.util.Collections.unmodifiableList(vals_);
+          bitField0_ = (bitField0_ & ~0x00000004);
+        }
+        result.vals_ = vals_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.info_ = info_;
+        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
+          to_bitField0_ |= 0x00000004;
+        }
+        result.lat_ = lat_;
+        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
+          to_bitField0_ |= 0x00000008;
+        }
+        result.lon_ = lon_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+      
+      public Builder mergeFrom(crosby.binary.Osmformat.Node other) {
+        if (other == crosby.binary.Osmformat.Node.getDefaultInstance()) return this;
+        if (other.hasId()) {
+          setId(other.getId());
+        }
+        if (!other.keys_.isEmpty()) {
+          if (keys_.isEmpty()) {
+            keys_ = other.keys_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensureKeysIsMutable();
+            keys_.addAll(other.keys_);
+          }
+          
+        }
+        if (!other.vals_.isEmpty()) {
+          if (vals_.isEmpty()) {
+            vals_ = other.vals_;
+            bitField0_ = (bitField0_ & ~0x00000004);
+          } else {
+            ensureValsIsMutable();
+            vals_.addAll(other.vals_);
+          }
+          
+        }
+        if (other.hasInfo()) {
+          mergeInfo(other.getInfo());
+        }
+        if (other.hasLat()) {
+          setLat(other.getLat());
+        }
+        if (other.hasLon()) {
+          setLon(other.getLon());
+        }
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasId()) {
+          
+          return false;
+        }
+        if (!hasLat()) {
+          
+          return false;
+        }
+        if (!hasLon()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              
+              return this;
+            default: {
+              if (!parseUnknownField(input, extensionRegistry, tag)) {
+                
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              id_ = input.readSInt64();
+              break;
+            }
+            case 16: {
+              ensureKeysIsMutable();
+              keys_.add(input.readUInt32());
+              break;
+            }
+            case 18: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addKeys(input.readUInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 24: {
+              ensureValsIsMutable();
+              vals_.add(input.readUInt32());
+              break;
+            }
+            case 26: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addVals(input.readUInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 34: {
+              crosby.binary.Osmformat.Info.Builder subBuilder = crosby.binary.Osmformat.Info.newBuilder();
+              if (hasInfo()) {
+                subBuilder.mergeFrom(getInfo());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setInfo(subBuilder.buildPartial());
+              break;
+            }
+            case 64: {
+              bitField0_ |= 0x00000010;
+              lat_ = input.readSInt64();
+              break;
+            }
+            case 72: {
+              bitField0_ |= 0x00000020;
+              lon_ = input.readSInt64();
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required sint64 id = 1;
+      private long id_ ;
+      public boolean hasId() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public long getId() {
+        return id_;
+      }
+      public Builder setId(long value) {
+        bitField0_ |= 0x00000001;
+        id_ = value;
+        
+        return this;
+      }
+      public Builder clearId() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        id_ = 0L;
+        
+        return this;
+      }
+      
+      // repeated uint32 keys = 2 [packed = true];
+      private java.util.List<java.lang.Integer> keys_ = java.util.Collections.emptyList();;
+      private void ensureKeysIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          keys_ = new java.util.ArrayList<java.lang.Integer>(keys_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      public java.util.List<java.lang.Integer>
+          getKeysList() {
+        return java.util.Collections.unmodifiableList(keys_);
+      }
+      public int getKeysCount() {
+        return keys_.size();
+      }
+      public int getKeys(int index) {
+        return keys_.get(index);
+      }
+      public Builder setKeys(
+          int index, int value) {
+        ensureKeysIsMutable();
+        keys_.set(index, value);
+        
+        return this;
+      }
+      public Builder addKeys(int value) {
+        ensureKeysIsMutable();
+        keys_.add(value);
+        
+        return this;
+      }
+      public Builder addAllKeys(
+          java.lang.Iterable<? extends java.lang.Integer> values) {
+        ensureKeysIsMutable();
+        super.addAll(values, keys_);
+        
+        return this;
+      }
+      public Builder clearKeys() {
+        keys_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        
+        return this;
+      }
+      
+      // repeated uint32 vals = 3 [packed = true];
+      private java.util.List<java.lang.Integer> vals_ = java.util.Collections.emptyList();;
+      private void ensureValsIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          vals_ = new java.util.ArrayList<java.lang.Integer>(vals_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      public java.util.List<java.lang.Integer>
+          getValsList() {
+        return java.util.Collections.unmodifiableList(vals_);
+      }
+      public int getValsCount() {
+        return vals_.size();
+      }
+      public int getVals(int index) {
+        return vals_.get(index);
+      }
+      public Builder setVals(
+          int index, int value) {
+        ensureValsIsMutable();
+        vals_.set(index, value);
+        
+        return this;
+      }
+      public Builder addVals(int value) {
+        ensureValsIsMutable();
+        vals_.add(value);
+        
+        return this;
+      }
+      public Builder addAllVals(
+          java.lang.Iterable<? extends java.lang.Integer> values) {
+        ensureValsIsMutable();
+        super.addAll(values, vals_);
+        
+        return this;
+      }
+      public Builder clearVals() {
+        vals_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        
+        return this;
+      }
+      
+      // optional .OSMPBF.Info info = 4;
+      private crosby.binary.Osmformat.Info info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+      public boolean hasInfo() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public crosby.binary.Osmformat.Info getInfo() {
+        return info_;
+      }
+      public Builder setInfo(crosby.binary.Osmformat.Info value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        info_ = value;
+        
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder setInfo(
+          crosby.binary.Osmformat.Info.Builder builderForValue) {
+        info_ = builderForValue.build();
+        
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder mergeInfo(crosby.binary.Osmformat.Info value) {
+        if (((bitField0_ & 0x00000008) == 0x00000008) &&
+            info_ != crosby.binary.Osmformat.Info.getDefaultInstance()) {
+          info_ =
+            crosby.binary.Osmformat.Info.newBuilder(info_).mergeFrom(value).buildPartial();
+        } else {
+          info_ = value;
+        }
+        
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder clearInfo() {
+        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+        
+        bitField0_ = (bitField0_ & ~0x00000008);
+        return this;
+      }
+      
+      // required sint64 lat = 8;
+      private long lat_ ;
+      public boolean hasLat() {
+        return ((bitField0_ & 0x00000010) == 0x00000010);
+      }
+      public long getLat() {
+        return lat_;
+      }
+      public Builder setLat(long value) {
+        bitField0_ |= 0x00000010;
+        lat_ = value;
+        
+        return this;
+      }
+      public Builder clearLat() {
+        bitField0_ = (bitField0_ & ~0x00000010);
+        lat_ = 0L;
+        
+        return this;
+      }
+      
+      // required sint64 lon = 9;
+      private long lon_ ;
+      public boolean hasLon() {
+        return ((bitField0_ & 0x00000020) == 0x00000020);
+      }
+      public long getLon() {
+        return lon_;
+      }
+      public Builder setLon(long value) {
+        bitField0_ |= 0x00000020;
+        lon_ = value;
+        
+        return this;
+      }
+      public Builder clearLon() {
+        bitField0_ = (bitField0_ & ~0x00000020);
+        lon_ = 0L;
+        
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:OSMPBF.Node)
+    }
+    
+    static {
+      defaultInstance = new Node(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:OSMPBF.Node)
+  }
+  
+  public interface DenseNodesOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+    
+    // repeated sint64 id = 1 [packed = true];
+    java.util.List<java.lang.Long> getIdList();
+    int getIdCount();
+    long getId(int index);
+    
+    // optional .OSMPBF.DenseInfo denseinfo = 5;
+    boolean hasDenseinfo();
+    crosby.binary.Osmformat.DenseInfo getDenseinfo();
+    
+    // repeated sint64 lat = 8 [packed = true];
+    java.util.List<java.lang.Long> getLatList();
+    int getLatCount();
+    long getLat(int index);
+    
+    // repeated sint64 lon = 9 [packed = true];
+    java.util.List<java.lang.Long> getLonList();
+    int getLonCount();
+    long getLon(int index);
+    
+    // repeated int32 keys_vals = 10 [packed = true];
+    java.util.List<java.lang.Integer> getKeysValsList();
+    int getKeysValsCount();
+    int getKeysVals(int index);
+  }
+  public static final class DenseNodes extends
+      com.google.protobuf.GeneratedMessageLite
+      implements DenseNodesOrBuilder {
+    // Use DenseNodes.newBuilder() to construct.
+    private DenseNodes(Builder builder) {
+      super(builder);
+    }
+    private DenseNodes(boolean noInit) {}
+    
+    private static final DenseNodes defaultInstance;
+    public static DenseNodes getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public DenseNodes getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    private int bitField0_;
+    // repeated sint64 id = 1 [packed = true];
+    public static final int ID_FIELD_NUMBER = 1;
+    private java.util.List<java.lang.Long> id_;
+    public java.util.List<java.lang.Long>
+        getIdList() {
+      return id_;
+    }
+    public int getIdCount() {
+      return id_.size();
+    }
+    public long getId(int index) {
+      return id_.get(index);
+    }
+    private int idMemoizedSerializedSize = -1;
+    
+    // optional .OSMPBF.DenseInfo denseinfo = 5;
+    public static final int DENSEINFO_FIELD_NUMBER = 5;
+    private crosby.binary.Osmformat.DenseInfo denseinfo_;
+    public boolean hasDenseinfo() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public crosby.binary.Osmformat.DenseInfo getDenseinfo() {
+      return denseinfo_;
+    }
+    
+    // repeated sint64 lat = 8 [packed = true];
+    public static final int LAT_FIELD_NUMBER = 8;
+    private java.util.List<java.lang.Long> lat_;
+    public java.util.List<java.lang.Long>
+        getLatList() {
+      return lat_;
+    }
+    public int getLatCount() {
+      return lat_.size();
+    }
+    public long getLat(int index) {
+      return lat_.get(index);
+    }
+    private int latMemoizedSerializedSize = -1;
+    
+    // repeated sint64 lon = 9 [packed = true];
+    public static final int LON_FIELD_NUMBER = 9;
+    private java.util.List<java.lang.Long> lon_;
+    public java.util.List<java.lang.Long>
+        getLonList() {
+      return lon_;
+    }
+    public int getLonCount() {
+      return lon_.size();
+    }
+    public long getLon(int index) {
+      return lon_.get(index);
+    }
+    private int lonMemoizedSerializedSize = -1;
+    
+    // repeated int32 keys_vals = 10 [packed = true];
+    public static final int KEYS_VALS_FIELD_NUMBER = 10;
+    private java.util.List<java.lang.Integer> keysVals_;
+    public java.util.List<java.lang.Integer>
+        getKeysValsList() {
+      return keysVals_;
+    }
+    public int getKeysValsCount() {
+      return keysVals_.size();
+    }
+    public int getKeysVals(int index) {
+      return keysVals_.get(index);
+    }
+    private int keysValsMemoizedSerializedSize = -1;
+    
+    private void initFields() {
+      id_ = java.util.Collections.emptyList();;
+      denseinfo_ = crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
+      lat_ = java.util.Collections.emptyList();;
+      lon_ = java.util.Collections.emptyList();;
+      keysVals_ = java.util.Collections.emptyList();;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (getIdList().size() > 0) {
+        output.writeRawVarint32(10);
+        output.writeRawVarint32(idMemoizedSerializedSize);
+      }
+      for (int i = 0; i < id_.size(); i++) {
+        output.writeSInt64NoTag(id_.get(i));
+      }
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeMessage(5, denseinfo_);
+      }
+      if (getLatList().size() > 0) {
+        output.writeRawVarint32(66);
+        output.writeRawVarint32(latMemoizedSerializedSize);
+      }
+      for (int i = 0; i < lat_.size(); i++) {
+        output.writeSInt64NoTag(lat_.get(i));
+      }
+      if (getLonList().size() > 0) {
+        output.writeRawVarint32(74);
+        output.writeRawVarint32(lonMemoizedSerializedSize);
+      }
+      for (int i = 0; i < lon_.size(); i++) {
+        output.writeSInt64NoTag(lon_.get(i));
+      }
+      if (getKeysValsList().size() > 0) {
+        output.writeRawVarint32(82);
+        output.writeRawVarint32(keysValsMemoizedSerializedSize);
+      }
+      for (int i = 0; i < keysVals_.size(); i++) {
+        output.writeInt32NoTag(keysVals_.get(i));
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      {
+        int dataSize = 0;
+        for (int i = 0; i < id_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeSInt64SizeNoTag(id_.get(i));
+        }
+        size += dataSize;
+        if (!getIdList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        idMemoizedSerializedSize = dataSize;
+      }
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, denseinfo_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < lat_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeSInt64SizeNoTag(lat_.get(i));
+        }
+        size += dataSize;
+        if (!getLatList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        latMemoizedSerializedSize = dataSize;
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < lon_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeSInt64SizeNoTag(lon_.get(i));
+        }
+        size += dataSize;
+        if (!getLonList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        lonMemoizedSerializedSize = dataSize;
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < keysVals_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(keysVals_.get(i));
+        }
+        size += dataSize;
+        if (!getKeysValsList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        keysValsMemoizedSerializedSize = dataSize;
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static crosby.binary.Osmformat.DenseNodes parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.DenseNodes parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.DenseNodes parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.DenseNodes parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.DenseNodes parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.DenseNodes parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.DenseNodes parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.DenseNodes parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.DenseNodes parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.DenseNodes parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.DenseNodes prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.DenseNodes, Builder>
+        implements crosby.binary.Osmformat.DenseNodesOrBuilder {
+      // Construct using crosby.binary.Osmformat.DenseNodes.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        id_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        denseinfo_ = crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
+        bitField0_ = (bitField0_ & ~0x00000002);
+        lat_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        lon_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        keysVals_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public crosby.binary.Osmformat.DenseNodes getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.DenseNodes.getDefaultInstance();
+      }
+      
+      public crosby.binary.Osmformat.DenseNodes build() {
+        crosby.binary.Osmformat.DenseNodes result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private crosby.binary.Osmformat.DenseNodes buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        crosby.binary.Osmformat.DenseNodes result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public crosby.binary.Osmformat.DenseNodes buildPartial() {
+        crosby.binary.Osmformat.DenseNodes result = new crosby.binary.Osmformat.DenseNodes(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((bitField0_ & 0x00000001) == 0x00000001)) {
+          id_ = java.util.Collections.unmodifiableList(id_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.id_ = id_;
+        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.denseinfo_ = denseinfo_;
+        if (((bitField0_ & 0x00000004) == 0x00000004)) {
+          lat_ = java.util.Collections.unmodifiableList(lat_);
+          bitField0_ = (bitField0_ & ~0x00000004);
+        }
+        result.lat_ = lat_;
+        if (((bitField0_ & 0x00000008) == 0x00000008)) {
+          lon_ = java.util.Collections.unmodifiableList(lon_);
+          bitField0_ = (bitField0_ & ~0x00000008);
+        }
+        result.lon_ = lon_;
+        if (((bitField0_ & 0x00000010) == 0x00000010)) {
+          keysVals_ = java.util.Collections.unmodifiableList(keysVals_);
+          bitField0_ = (bitField0_ & ~0x00000010);
+        }
+        result.keysVals_ = keysVals_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+      
+      public Builder mergeFrom(crosby.binary.Osmformat.DenseNodes other) {
+        if (other == crosby.binary.Osmformat.DenseNodes.getDefaultInstance()) return this;
+        if (!other.id_.isEmpty()) {
+          if (id_.isEmpty()) {
+            id_ = other.id_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureIdIsMutable();
+            id_.addAll(other.id_);
+          }
+          
+        }
+        if (other.hasDenseinfo()) {
+          mergeDenseinfo(other.getDenseinfo());
+        }
+        if (!other.lat_.isEmpty()) {
+          if (lat_.isEmpty()) {
+            lat_ = other.lat_;
+            bitField0_ = (bitField0_ & ~0x00000004);
+          } else {
+            ensureLatIsMutable();
+            lat_.addAll(other.lat_);
+          }
+          
+        }
+        if (!other.lon_.isEmpty()) {
+          if (lon_.isEmpty()) {
+            lon_ = other.lon_;
+            bitField0_ = (bitField0_ & ~0x00000008);
+          } else {
+            ensureLonIsMutable();
+            lon_.addAll(other.lon_);
+          }
+          
+        }
+        if (!other.keysVals_.isEmpty()) {
+          if (keysVals_.isEmpty()) {
+            keysVals_ = other.keysVals_;
+            bitField0_ = (bitField0_ & ~0x00000010);
+          } else {
+            ensureKeysValsIsMutable();
+            keysVals_.addAll(other.keysVals_);
+          }
+          
+        }
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              
+              return this;
+            default: {
+              if (!parseUnknownField(input, extensionRegistry, tag)) {
+                
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              ensureIdIsMutable();
+              id_.add(input.readSInt64());
+              break;
+            }
+            case 10: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addId(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 42: {
+              crosby.binary.Osmformat.DenseInfo.Builder subBuilder = crosby.binary.Osmformat.DenseInfo.newBuilder();
+              if (hasDenseinfo()) {
+                subBuilder.mergeFrom(getDenseinfo());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setDenseinfo(subBuilder.buildPartial());
+              break;
+            }
+            case 64: {
+              ensureLatIsMutable();
+              lat_.add(input.readSInt64());
+              break;
+            }
+            case 66: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addLat(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 72: {
+              ensureLonIsMutable();
+              lon_.add(input.readSInt64());
+              break;
+            }
+            case 74: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addLon(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 80: {
+              ensureKeysValsIsMutable();
+              keysVals_.add(input.readInt32());
+              break;
+            }
+            case 82: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addKeysVals(input.readInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // repeated sint64 id = 1 [packed = true];
+      private java.util.List<java.lang.Long> id_ = java.util.Collections.emptyList();;
+      private void ensureIdIsMutable() {
+        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
+          id_ = new java.util.ArrayList<java.lang.Long>(id_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+      public java.util.List<java.lang.Long>
+          getIdList() {
+        return java.util.Collections.unmodifiableList(id_);
+      }
+      public int getIdCount() {
+        return id_.size();
+      }
+      public long getId(int index) {
+        return id_.get(index);
+      }
+      public Builder setId(
+          int index, long value) {
+        ensureIdIsMutable();
+        id_.set(index, value);
+        
+        return this;
+      }
+      public Builder addId(long value) {
+        ensureIdIsMutable();
+        id_.add(value);
+        
+        return this;
+      }
+      public Builder addAllId(
+          java.lang.Iterable<? extends java.lang.Long> values) {
+        ensureIdIsMutable();
+        super.addAll(values, id_);
+        
+        return this;
+      }
+      public Builder clearId() {
+        id_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        
+        return this;
+      }
+      
+      // optional .OSMPBF.DenseInfo denseinfo = 5;
+      private crosby.binary.Osmformat.DenseInfo denseinfo_ = crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
+      public boolean hasDenseinfo() {
+        return ((bitField0_ & 0x00000002) == 0x00000002);
+      }
+      public crosby.binary.Osmformat.DenseInfo getDenseinfo() {
+        return denseinfo_;
+      }
+      public Builder setDenseinfo(crosby.binary.Osmformat.DenseInfo value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        denseinfo_ = value;
+        
+        bitField0_ |= 0x00000002;
+        return this;
+      }
+      public Builder setDenseinfo(
+          crosby.binary.Osmformat.DenseInfo.Builder builderForValue) {
+        denseinfo_ = builderForValue.build();
+        
+        bitField0_ |= 0x00000002;
+        return this;
+      }
+      public Builder mergeDenseinfo(crosby.binary.Osmformat.DenseInfo value) {
+        if (((bitField0_ & 0x00000002) == 0x00000002) &&
+            denseinfo_ != crosby.binary.Osmformat.DenseInfo.getDefaultInstance()) {
+          denseinfo_ =
+            crosby.binary.Osmformat.DenseInfo.newBuilder(denseinfo_).mergeFrom(value).buildPartial();
+        } else {
+          denseinfo_ = value;
+        }
+        
+        bitField0_ |= 0x00000002;
+        return this;
+      }
+      public Builder clearDenseinfo() {
+        denseinfo_ = crosby.binary.Osmformat.DenseInfo.getDefaultInstance();
+        
+        bitField0_ = (bitField0_ & ~0x00000002);
+        return this;
+      }
+      
+      // repeated sint64 lat = 8 [packed = true];
+      private java.util.List<java.lang.Long> lat_ = java.util.Collections.emptyList();;
+      private void ensureLatIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          lat_ = new java.util.ArrayList<java.lang.Long>(lat_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      public java.util.List<java.lang.Long>
+          getLatList() {
+        return java.util.Collections.unmodifiableList(lat_);
+      }
+      public int getLatCount() {
+        return lat_.size();
+      }
+      public long getLat(int index) {
+        return lat_.get(index);
+      }
+      public Builder setLat(
+          int index, long value) {
+        ensureLatIsMutable();
+        lat_.set(index, value);
+        
+        return this;
+      }
+      public Builder addLat(long value) {
+        ensureLatIsMutable();
+        lat_.add(value);
+        
+        return this;
+      }
+      public Builder addAllLat(
+          java.lang.Iterable<? extends java.lang.Long> values) {
+        ensureLatIsMutable();
+        super.addAll(values, lat_);
+        
+        return this;
+      }
+      public Builder clearLat() {
+        lat_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        
+        return this;
+      }
+      
+      // repeated sint64 lon = 9 [packed = true];
+      private java.util.List<java.lang.Long> lon_ = java.util.Collections.emptyList();;
+      private void ensureLonIsMutable() {
+        if (!((bitField0_ & 0x00000008) == 0x00000008)) {
+          lon_ = new java.util.ArrayList<java.lang.Long>(lon_);
+          bitField0_ |= 0x00000008;
+         }
+      }
+      public java.util.List<java.lang.Long>
+          getLonList() {
+        return java.util.Collections.unmodifiableList(lon_);
+      }
+      public int getLonCount() {
+        return lon_.size();
+      }
+      public long getLon(int index) {
+        return lon_.get(index);
+      }
+      public Builder setLon(
+          int index, long value) {
+        ensureLonIsMutable();
+        lon_.set(index, value);
+        
+        return this;
+      }
+      public Builder addLon(long value) {
+        ensureLonIsMutable();
+        lon_.add(value);
+        
+        return this;
+      }
+      public Builder addAllLon(
+          java.lang.Iterable<? extends java.lang.Long> values) {
+        ensureLonIsMutable();
+        super.addAll(values, lon_);
+        
+        return this;
+      }
+      public Builder clearLon() {
+        lon_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000008);
+        
+        return this;
+      }
+      
+      // repeated int32 keys_vals = 10 [packed = true];
+      private java.util.List<java.lang.Integer> keysVals_ = java.util.Collections.emptyList();;
+      private void ensureKeysValsIsMutable() {
+        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
+          keysVals_ = new java.util.ArrayList<java.lang.Integer>(keysVals_);
+          bitField0_ |= 0x00000010;
+         }
+      }
+      public java.util.List<java.lang.Integer>
+          getKeysValsList() {
+        return java.util.Collections.unmodifiableList(keysVals_);
+      }
+      public int getKeysValsCount() {
+        return keysVals_.size();
+      }
+      public int getKeysVals(int index) {
+        return keysVals_.get(index);
+      }
+      public Builder setKeysVals(
+          int index, int value) {
+        ensureKeysValsIsMutable();
+        keysVals_.set(index, value);
+        
+        return this;
+      }
+      public Builder addKeysVals(int value) {
+        ensureKeysValsIsMutable();
+        keysVals_.add(value);
+        
+        return this;
+      }
+      public Builder addAllKeysVals(
+          java.lang.Iterable<? extends java.lang.Integer> values) {
+        ensureKeysValsIsMutable();
+        super.addAll(values, keysVals_);
+        
+        return this;
+      }
+      public Builder clearKeysVals() {
+        keysVals_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:OSMPBF.DenseNodes)
+    }
+    
+    static {
+      defaultInstance = new DenseNodes(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:OSMPBF.DenseNodes)
+  }
+  
+  public interface WayOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+    
+    // required int64 id = 1;
+    boolean hasId();
+    long getId();
+    
+    // repeated uint32 keys = 2 [packed = true];
+    java.util.List<java.lang.Integer> getKeysList();
+    int getKeysCount();
+    int getKeys(int index);
+    
+    // repeated uint32 vals = 3 [packed = true];
+    java.util.List<java.lang.Integer> getValsList();
+    int getValsCount();
+    int getVals(int index);
+    
+    // optional .OSMPBF.Info info = 4;
+    boolean hasInfo();
+    crosby.binary.Osmformat.Info getInfo();
+    
+    // repeated sint64 refs = 8 [packed = true];
+    java.util.List<java.lang.Long> getRefsList();
+    int getRefsCount();
+    long getRefs(int index);
+  }
+  public static final class Way extends
+      com.google.protobuf.GeneratedMessageLite
+      implements WayOrBuilder {
+    // Use Way.newBuilder() to construct.
+    private Way(Builder builder) {
+      super(builder);
+    }
+    private Way(boolean noInit) {}
+    
+    private static final Way defaultInstance;
+    public static Way getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public Way getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    private int bitField0_;
+    // required int64 id = 1;
+    public static final int ID_FIELD_NUMBER = 1;
+    private long id_;
+    public boolean hasId() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public long getId() {
+      return id_;
+    }
+    
+    // repeated uint32 keys = 2 [packed = true];
+    public static final int KEYS_FIELD_NUMBER = 2;
+    private java.util.List<java.lang.Integer> keys_;
+    public java.util.List<java.lang.Integer>
+        getKeysList() {
+      return keys_;
+    }
+    public int getKeysCount() {
+      return keys_.size();
+    }
+    public int getKeys(int index) {
+      return keys_.get(index);
+    }
+    private int keysMemoizedSerializedSize = -1;
+    
+    // repeated uint32 vals = 3 [packed = true];
+    public static final int VALS_FIELD_NUMBER = 3;
+    private java.util.List<java.lang.Integer> vals_;
+    public java.util.List<java.lang.Integer>
+        getValsList() {
+      return vals_;
+    }
+    public int getValsCount() {
+      return vals_.size();
+    }
+    public int getVals(int index) {
+      return vals_.get(index);
+    }
+    private int valsMemoizedSerializedSize = -1;
+    
+    // optional .OSMPBF.Info info = 4;
+    public static final int INFO_FIELD_NUMBER = 4;
+    private crosby.binary.Osmformat.Info info_;
+    public boolean hasInfo() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public crosby.binary.Osmformat.Info getInfo() {
+      return info_;
+    }
+    
+    // repeated sint64 refs = 8 [packed = true];
+    public static final int REFS_FIELD_NUMBER = 8;
+    private java.util.List<java.lang.Long> refs_;
+    public java.util.List<java.lang.Long>
+        getRefsList() {
+      return refs_;
+    }
+    public int getRefsCount() {
+      return refs_.size();
+    }
+    public long getRefs(int index) {
+      return refs_.get(index);
+    }
+    private int refsMemoizedSerializedSize = -1;
+    
+    private void initFields() {
+      id_ = 0L;
+      keys_ = java.util.Collections.emptyList();;
+      vals_ = java.util.Collections.emptyList();;
+      info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+      refs_ = java.util.Collections.emptyList();;
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasId()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeInt64(1, id_);
+      }
+      if (getKeysList().size() > 0) {
+        output.writeRawVarint32(18);
+        output.writeRawVarint32(keysMemoizedSerializedSize);
+      }
+      for (int i = 0; i < keys_.size(); i++) {
+        output.writeUInt32NoTag(keys_.get(i));
+      }
+      if (getValsList().size() > 0) {
+        output.writeRawVarint32(26);
+        output.writeRawVarint32(valsMemoizedSerializedSize);
+      }
+      for (int i = 0; i < vals_.size(); i++) {
+        output.writeUInt32NoTag(vals_.get(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeMessage(4, info_);
+      }
+      if (getRefsList().size() > 0) {
+        output.writeRawVarint32(66);
+        output.writeRawVarint32(refsMemoizedSerializedSize);
+      }
+      for (int i = 0; i < refs_.size(); i++) {
+        output.writeSInt64NoTag(refs_.get(i));
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, id_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < keys_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(keys_.get(i));
+        }
+        size += dataSize;
+        if (!getKeysList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        keysMemoizedSerializedSize = dataSize;
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < vals_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(vals_.get(i));
+        }
+        size += dataSize;
+        if (!getValsList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        valsMemoizedSerializedSize = dataSize;
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, info_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < refs_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeSInt64SizeNoTag(refs_.get(i));
+        }
+        size += dataSize;
+        if (!getRefsList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        refsMemoizedSerializedSize = dataSize;
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static crosby.binary.Osmformat.Way parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Way parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.Way parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Way parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.Way parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Way parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.Way parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.Way parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.Way parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Way parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.Way prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.Way, Builder>
+        implements crosby.binary.Osmformat.WayOrBuilder {
+      // Construct using crosby.binary.Osmformat.Way.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        id_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        keys_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        vals_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+        bitField0_ = (bitField0_ & ~0x00000008);
+        refs_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public crosby.binary.Osmformat.Way getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.Way.getDefaultInstance();
+      }
+      
+      public crosby.binary.Osmformat.Way build() {
+        crosby.binary.Osmformat.Way result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private crosby.binary.Osmformat.Way buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        crosby.binary.Osmformat.Way result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public crosby.binary.Osmformat.Way buildPartial() {
+        crosby.binary.Osmformat.Way result = new crosby.binary.Osmformat.Way(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.id_ = id_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          keys_ = java.util.Collections.unmodifiableList(keys_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.keys_ = keys_;
+        if (((bitField0_ & 0x00000004) == 0x00000004)) {
+          vals_ = java.util.Collections.unmodifiableList(vals_);
+          bitField0_ = (bitField0_ & ~0x00000004);
+        }
+        result.vals_ = vals_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.info_ = info_;
+        if (((bitField0_ & 0x00000010) == 0x00000010)) {
+          refs_ = java.util.Collections.unmodifiableList(refs_);
+          bitField0_ = (bitField0_ & ~0x00000010);
+        }
+        result.refs_ = refs_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+      
+      public Builder mergeFrom(crosby.binary.Osmformat.Way other) {
+        if (other == crosby.binary.Osmformat.Way.getDefaultInstance()) return this;
+        if (other.hasId()) {
+          setId(other.getId());
+        }
+        if (!other.keys_.isEmpty()) {
+          if (keys_.isEmpty()) {
+            keys_ = other.keys_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensureKeysIsMutable();
+            keys_.addAll(other.keys_);
+          }
+          
+        }
+        if (!other.vals_.isEmpty()) {
+          if (vals_.isEmpty()) {
+            vals_ = other.vals_;
+            bitField0_ = (bitField0_ & ~0x00000004);
+          } else {
+            ensureValsIsMutable();
+            vals_.addAll(other.vals_);
+          }
+          
+        }
+        if (other.hasInfo()) {
+          mergeInfo(other.getInfo());
+        }
+        if (!other.refs_.isEmpty()) {
+          if (refs_.isEmpty()) {
+            refs_ = other.refs_;
+            bitField0_ = (bitField0_ & ~0x00000010);
+          } else {
+            ensureRefsIsMutable();
+            refs_.addAll(other.refs_);
+          }
+          
+        }
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasId()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              
+              return this;
+            default: {
+              if (!parseUnknownField(input, extensionRegistry, tag)) {
+                
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              id_ = input.readInt64();
+              break;
+            }
+            case 16: {
+              ensureKeysIsMutable();
+              keys_.add(input.readUInt32());
+              break;
+            }
+            case 18: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addKeys(input.readUInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 24: {
+              ensureValsIsMutable();
+              vals_.add(input.readUInt32());
+              break;
+            }
+            case 26: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addVals(input.readUInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 34: {
+              crosby.binary.Osmformat.Info.Builder subBuilder = crosby.binary.Osmformat.Info.newBuilder();
+              if (hasInfo()) {
+                subBuilder.mergeFrom(getInfo());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setInfo(subBuilder.buildPartial());
+              break;
+            }
+            case 64: {
+              ensureRefsIsMutable();
+              refs_.add(input.readSInt64());
+              break;
+            }
+            case 66: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addRefs(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required int64 id = 1;
+      private long id_ ;
+      public boolean hasId() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public long getId() {
+        return id_;
+      }
+      public Builder setId(long value) {
+        bitField0_ |= 0x00000001;
+        id_ = value;
+        
+        return this;
+      }
+      public Builder clearId() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        id_ = 0L;
+        
+        return this;
+      }
+      
+      // repeated uint32 keys = 2 [packed = true];
+      private java.util.List<java.lang.Integer> keys_ = java.util.Collections.emptyList();;
+      private void ensureKeysIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          keys_ = new java.util.ArrayList<java.lang.Integer>(keys_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      public java.util.List<java.lang.Integer>
+          getKeysList() {
+        return java.util.Collections.unmodifiableList(keys_);
+      }
+      public int getKeysCount() {
+        return keys_.size();
+      }
+      public int getKeys(int index) {
+        return keys_.get(index);
+      }
+      public Builder setKeys(
+          int index, int value) {
+        ensureKeysIsMutable();
+        keys_.set(index, value);
+        
+        return this;
+      }
+      public Builder addKeys(int value) {
+        ensureKeysIsMutable();
+        keys_.add(value);
+        
+        return this;
+      }
+      public Builder addAllKeys(
+          java.lang.Iterable<? extends java.lang.Integer> values) {
+        ensureKeysIsMutable();
+        super.addAll(values, keys_);
+        
+        return this;
+      }
+      public Builder clearKeys() {
+        keys_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        
+        return this;
+      }
+      
+      // repeated uint32 vals = 3 [packed = true];
+      private java.util.List<java.lang.Integer> vals_ = java.util.Collections.emptyList();;
+      private void ensureValsIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          vals_ = new java.util.ArrayList<java.lang.Integer>(vals_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      public java.util.List<java.lang.Integer>
+          getValsList() {
+        return java.util.Collections.unmodifiableList(vals_);
+      }
+      public int getValsCount() {
+        return vals_.size();
+      }
+      public int getVals(int index) {
+        return vals_.get(index);
+      }
+      public Builder setVals(
+          int index, int value) {
+        ensureValsIsMutable();
+        vals_.set(index, value);
+        
+        return this;
+      }
+      public Builder addVals(int value) {
+        ensureValsIsMutable();
+        vals_.add(value);
+        
+        return this;
+      }
+      public Builder addAllVals(
+          java.lang.Iterable<? extends java.lang.Integer> values) {
+        ensureValsIsMutable();
+        super.addAll(values, vals_);
+        
+        return this;
+      }
+      public Builder clearVals() {
+        vals_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        
+        return this;
+      }
+      
+      // optional .OSMPBF.Info info = 4;
+      private crosby.binary.Osmformat.Info info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+      public boolean hasInfo() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public crosby.binary.Osmformat.Info getInfo() {
+        return info_;
+      }
+      public Builder setInfo(crosby.binary.Osmformat.Info value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        info_ = value;
+        
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder setInfo(
+          crosby.binary.Osmformat.Info.Builder builderForValue) {
+        info_ = builderForValue.build();
+        
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder mergeInfo(crosby.binary.Osmformat.Info value) {
+        if (((bitField0_ & 0x00000008) == 0x00000008) &&
+            info_ != crosby.binary.Osmformat.Info.getDefaultInstance()) {
+          info_ =
+            crosby.binary.Osmformat.Info.newBuilder(info_).mergeFrom(value).buildPartial();
+        } else {
+          info_ = value;
+        }
+        
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder clearInfo() {
+        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+        
+        bitField0_ = (bitField0_ & ~0x00000008);
+        return this;
+      }
+      
+      // repeated sint64 refs = 8 [packed = true];
+      private java.util.List<java.lang.Long> refs_ = java.util.Collections.emptyList();;
+      private void ensureRefsIsMutable() {
+        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
+          refs_ = new java.util.ArrayList<java.lang.Long>(refs_);
+          bitField0_ |= 0x00000010;
+         }
+      }
+      public java.util.List<java.lang.Long>
+          getRefsList() {
+        return java.util.Collections.unmodifiableList(refs_);
+      }
+      public int getRefsCount() {
+        return refs_.size();
+      }
+      public long getRefs(int index) {
+        return refs_.get(index);
+      }
+      public Builder setRefs(
+          int index, long value) {
+        ensureRefsIsMutable();
+        refs_.set(index, value);
+        
+        return this;
+      }
+      public Builder addRefs(long value) {
+        ensureRefsIsMutable();
+        refs_.add(value);
+        
+        return this;
+      }
+      public Builder addAllRefs(
+          java.lang.Iterable<? extends java.lang.Long> values) {
+        ensureRefsIsMutable();
+        super.addAll(values, refs_);
+        
+        return this;
+      }
+      public Builder clearRefs() {
+        refs_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:OSMPBF.Way)
+    }
+    
+    static {
+      defaultInstance = new Way(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:OSMPBF.Way)
+  }
+  
+  public interface RelationOrBuilder
+      extends com.google.protobuf.MessageLiteOrBuilder {
+    
+    // required int64 id = 1;
+    boolean hasId();
+    long getId();
+    
+    // repeated uint32 keys = 2 [packed = true];
+    java.util.List<java.lang.Integer> getKeysList();
+    int getKeysCount();
+    int getKeys(int index);
+    
+    // repeated uint32 vals = 3 [packed = true];
+    java.util.List<java.lang.Integer> getValsList();
+    int getValsCount();
+    int getVals(int index);
+    
+    // optional .OSMPBF.Info info = 4;
+    boolean hasInfo();
+    crosby.binary.Osmformat.Info getInfo();
+    
+    // repeated int32 roles_sid = 8 [packed = true];
+    java.util.List<java.lang.Integer> getRolesSidList();
+    int getRolesSidCount();
+    int getRolesSid(int index);
+    
+    // repeated sint64 memids = 9 [packed = true];
+    java.util.List<java.lang.Long> getMemidsList();
+    int getMemidsCount();
+    long getMemids(int index);
+    
+    // repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];
+    java.util.List<crosby.binary.Osmformat.Relation.MemberType> getTypesList();
+    int getTypesCount();
+    crosby.binary.Osmformat.Relation.MemberType getTypes(int index);
+  }
+  public static final class Relation extends
+      com.google.protobuf.GeneratedMessageLite
+      implements RelationOrBuilder {
+    // Use Relation.newBuilder() to construct.
+    private Relation(Builder builder) {
+      super(builder);
+    }
+    private Relation(boolean noInit) {}
+    
+    private static final Relation defaultInstance;
+    public static Relation getDefaultInstance() {
+      return defaultInstance;
+    }
+    
+    public Relation getDefaultInstanceForType() {
+      return defaultInstance;
+    }
+    
+    public enum MemberType
+        implements com.google.protobuf.Internal.EnumLite {
+      NODE(0, 0),
+      WAY(1, 1),
+      RELATION(2, 2),
+      ;
+      
+      public static final int NODE_VALUE = 0;
+      public static final int WAY_VALUE = 1;
+      public static final int RELATION_VALUE = 2;
+      
+      
+      public final int getNumber() { return value; }
+      
+      public static MemberType valueOf(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 com.google.protobuf.Internal.EnumLiteMap<MemberType>
+          internalValueMap =
+            new com.google.protobuf.Internal.EnumLiteMap<MemberType>() {
+              public MemberType findValueByNumber(int number) {
+                return MemberType.valueOf(number);
+              }
+            };
+      
+      private final int value;
+      
+      private MemberType(int index, int value) {
+        this.value = value;
+      }
+      
+      // @@protoc_insertion_point(enum_scope:OSMPBF.Relation.MemberType)
+    }
+    
+    private int bitField0_;
+    // required int64 id = 1;
+    public static final int ID_FIELD_NUMBER = 1;
+    private long id_;
+    public boolean hasId() {
+      return ((bitField0_ & 0x00000001) == 0x00000001);
+    }
+    public long getId() {
+      return id_;
+    }
+    
+    // repeated uint32 keys = 2 [packed = true];
+    public static final int KEYS_FIELD_NUMBER = 2;
+    private java.util.List<java.lang.Integer> keys_;
+    public java.util.List<java.lang.Integer>
+        getKeysList() {
+      return keys_;
+    }
+    public int getKeysCount() {
+      return keys_.size();
+    }
+    public int getKeys(int index) {
+      return keys_.get(index);
+    }
+    private int keysMemoizedSerializedSize = -1;
+    
+    // repeated uint32 vals = 3 [packed = true];
+    public static final int VALS_FIELD_NUMBER = 3;
+    private java.util.List<java.lang.Integer> vals_;
+    public java.util.List<java.lang.Integer>
+        getValsList() {
+      return vals_;
+    }
+    public int getValsCount() {
+      return vals_.size();
+    }
+    public int getVals(int index) {
+      return vals_.get(index);
+    }
+    private int valsMemoizedSerializedSize = -1;
+    
+    // optional .OSMPBF.Info info = 4;
+    public static final int INFO_FIELD_NUMBER = 4;
+    private crosby.binary.Osmformat.Info info_;
+    public boolean hasInfo() {
+      return ((bitField0_ & 0x00000002) == 0x00000002);
+    }
+    public crosby.binary.Osmformat.Info getInfo() {
+      return info_;
+    }
+    
+    // repeated int32 roles_sid = 8 [packed = true];
+    public static final int ROLES_SID_FIELD_NUMBER = 8;
+    private java.util.List<java.lang.Integer> rolesSid_;
+    public java.util.List<java.lang.Integer>
+        getRolesSidList() {
+      return rolesSid_;
+    }
+    public int getRolesSidCount() {
+      return rolesSid_.size();
+    }
+    public int getRolesSid(int index) {
+      return rolesSid_.get(index);
+    }
+    private int rolesSidMemoizedSerializedSize = -1;
+    
+    // repeated sint64 memids = 9 [packed = true];
+    public static final int MEMIDS_FIELD_NUMBER = 9;
+    private java.util.List<java.lang.Long> memids_;
+    public java.util.List<java.lang.Long>
+        getMemidsList() {
+      return memids_;
+    }
+    public int getMemidsCount() {
+      return memids_.size();
+    }
+    public long getMemids(int index) {
+      return memids_.get(index);
+    }
+    private int memidsMemoizedSerializedSize = -1;
+    
+    // repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];
+    public static final int TYPES_FIELD_NUMBER = 10;
+    private java.util.List<crosby.binary.Osmformat.Relation.MemberType> types_;
+    public java.util.List<crosby.binary.Osmformat.Relation.MemberType> getTypesList() {
+      return types_;
+    }
+    public int getTypesCount() {
+      return types_.size();
+    }
+    public crosby.binary.Osmformat.Relation.MemberType getTypes(int index) {
+      return types_.get(index);
+    }
+    private int typesMemoizedSerializedSize;
+    
+    private void initFields() {
+      id_ = 0L;
+      keys_ = java.util.Collections.emptyList();;
+      vals_ = java.util.Collections.emptyList();;
+      info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+      rolesSid_ = java.util.Collections.emptyList();;
+      memids_ = java.util.Collections.emptyList();;
+      types_ = java.util.Collections.emptyList();
+    }
+    private byte memoizedIsInitialized = -1;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized != -1) return isInitialized == 1;
+      
+      if (!hasId()) {
+        memoizedIsInitialized = 0;
+        return false;
+      }
+      memoizedIsInitialized = 1;
+      return true;
+    }
+    
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      getSerializedSize();
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        output.writeInt64(1, id_);
+      }
+      if (getKeysList().size() > 0) {
+        output.writeRawVarint32(18);
+        output.writeRawVarint32(keysMemoizedSerializedSize);
+      }
+      for (int i = 0; i < keys_.size(); i++) {
+        output.writeUInt32NoTag(keys_.get(i));
+      }
+      if (getValsList().size() > 0) {
+        output.writeRawVarint32(26);
+        output.writeRawVarint32(valsMemoizedSerializedSize);
+      }
+      for (int i = 0; i < vals_.size(); i++) {
+        output.writeUInt32NoTag(vals_.get(i));
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        output.writeMessage(4, info_);
+      }
+      if (getRolesSidList().size() > 0) {
+        output.writeRawVarint32(66);
+        output.writeRawVarint32(rolesSidMemoizedSerializedSize);
+      }
+      for (int i = 0; i < rolesSid_.size(); i++) {
+        output.writeInt32NoTag(rolesSid_.get(i));
+      }
+      if (getMemidsList().size() > 0) {
+        output.writeRawVarint32(74);
+        output.writeRawVarint32(memidsMemoizedSerializedSize);
+      }
+      for (int i = 0; i < memids_.size(); i++) {
+        output.writeSInt64NoTag(memids_.get(i));
+      }
+      if (getTypesList().size() > 0) {
+        output.writeRawVarint32(82);
+        output.writeRawVarint32(typesMemoizedSerializedSize);
+      }
+      for (int i = 0; i < types_.size(); i++) {
+        output.writeEnumNoTag(types_.get(i).getNumber());
+      }
+    }
+    
+    private int memoizedSerializedSize = -1;
+    public int getSerializedSize() {
+      int size = memoizedSerializedSize;
+      if (size != -1) return size;
+    
+      size = 0;
+      if (((bitField0_ & 0x00000001) == 0x00000001)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, id_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < keys_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(keys_.get(i));
+        }
+        size += dataSize;
+        if (!getKeysList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        keysMemoizedSerializedSize = dataSize;
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < vals_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(vals_.get(i));
+        }
+        size += dataSize;
+        if (!getValsList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        valsMemoizedSerializedSize = dataSize;
+      }
+      if (((bitField0_ & 0x00000002) == 0x00000002)) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, info_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < rolesSid_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(rolesSid_.get(i));
+        }
+        size += dataSize;
+        if (!getRolesSidList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        rolesSidMemoizedSerializedSize = dataSize;
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < memids_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeSInt64SizeNoTag(memids_.get(i));
+        }
+        size += dataSize;
+        if (!getMemidsList().isEmpty()) {
+          size += 1;
+          size += com.google.protobuf.CodedOutputStream
+              .computeInt32SizeNoTag(dataSize);
+        }
+        memidsMemoizedSerializedSize = dataSize;
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < types_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(types_.get(i).getNumber());
+        }
+        size += dataSize;
+        if (!getTypesList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeRawVarint32Size(dataSize);
+        }typesMemoizedSerializedSize = dataSize;
+      }
+      memoizedSerializedSize = size;
+      return size;
+    }
+    
+    private static final long serialVersionUID = 0L;
+    @java.lang.Override
+    protected java.lang.Object writeReplace()
+        throws java.io.ObjectStreamException {
+      return super.writeReplace();
+    }
+    
+    public static crosby.binary.Osmformat.Relation parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Relation parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.Relation parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Relation parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return newBuilder().mergeFrom(data, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.Relation parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Relation parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    public static crosby.binary.Osmformat.Relation parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.Relation parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      Builder builder = newBuilder();
+      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
+        return builder.buildParsed();
+      } else {
+        return null;
+      }
+    }
+    public static crosby.binary.Osmformat.Relation parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input).buildParsed();
+    }
+    public static crosby.binary.Osmformat.Relation parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return newBuilder().mergeFrom(input, extensionRegistry)
+               .buildParsed();
+    }
+    
+    public static Builder newBuilder() { return Builder.create(); }
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder(crosby.binary.Osmformat.Relation prototype) {
+      return newBuilder().mergeFrom(prototype);
+    }
+    public Builder toBuilder() { return newBuilder(this); }
+    
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageLite.Builder<
+          crosby.binary.Osmformat.Relation, Builder>
+        implements crosby.binary.Osmformat.RelationOrBuilder {
+      // Construct using crosby.binary.Osmformat.Relation.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+      
+      private void maybeForceBuilderInitialization() {
+      }
+      private static Builder create() {
+        return new Builder();
+      }
+      
+      public Builder clear() {
+        super.clear();
+        id_ = 0L;
+        bitField0_ = (bitField0_ & ~0x00000001);
+        keys_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        vals_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+        bitField0_ = (bitField0_ & ~0x00000008);
+        rolesSid_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        memids_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000020);
+        types_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000040);
+        return this;
+      }
+      
+      public Builder clone() {
+        return create().mergeFrom(buildPartial());
+      }
+      
+      public crosby.binary.Osmformat.Relation getDefaultInstanceForType() {
+        return crosby.binary.Osmformat.Relation.getDefaultInstance();
+      }
+      
+      public crosby.binary.Osmformat.Relation build() {
+        crosby.binary.Osmformat.Relation result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+      
+      private crosby.binary.Osmformat.Relation buildParsed()
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        crosby.binary.Osmformat.Relation result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(
+            result).asInvalidProtocolBufferException();
+        }
+        return result;
+      }
+      
+      public crosby.binary.Osmformat.Relation buildPartial() {
+        crosby.binary.Osmformat.Relation result = new crosby.binary.Osmformat.Relation(this);
+        int from_bitField0_ = bitField0_;
+        int to_bitField0_ = 0;
+        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
+          to_bitField0_ |= 0x00000001;
+        }
+        result.id_ = id_;
+        if (((bitField0_ & 0x00000002) == 0x00000002)) {
+          keys_ = java.util.Collections.unmodifiableList(keys_);
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.keys_ = keys_;
+        if (((bitField0_ & 0x00000004) == 0x00000004)) {
+          vals_ = java.util.Collections.unmodifiableList(vals_);
+          bitField0_ = (bitField0_ & ~0x00000004);
+        }
+        result.vals_ = vals_;
+        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
+          to_bitField0_ |= 0x00000002;
+        }
+        result.info_ = info_;
+        if (((bitField0_ & 0x00000010) == 0x00000010)) {
+          rolesSid_ = java.util.Collections.unmodifiableList(rolesSid_);
+          bitField0_ = (bitField0_ & ~0x00000010);
+        }
+        result.rolesSid_ = rolesSid_;
+        if (((bitField0_ & 0x00000020) == 0x00000020)) {
+          memids_ = java.util.Collections.unmodifiableList(memids_);
+          bitField0_ = (bitField0_ & ~0x00000020);
+        }
+        result.memids_ = memids_;
+        if (((bitField0_ & 0x00000040) == 0x00000040)) {
+          types_ = java.util.Collections.unmodifiableList(types_);
+          bitField0_ = (bitField0_ & ~0x00000040);
+        }
+        result.types_ = types_;
+        result.bitField0_ = to_bitField0_;
+        return result;
+      }
+      
+      public Builder mergeFrom(crosby.binary.Osmformat.Relation other) {
+        if (other == crosby.binary.Osmformat.Relation.getDefaultInstance()) return this;
+        if (other.hasId()) {
+          setId(other.getId());
+        }
+        if (!other.keys_.isEmpty()) {
+          if (keys_.isEmpty()) {
+            keys_ = other.keys_;
+            bitField0_ = (bitField0_ & ~0x00000002);
+          } else {
+            ensureKeysIsMutable();
+            keys_.addAll(other.keys_);
+          }
+          
+        }
+        if (!other.vals_.isEmpty()) {
+          if (vals_.isEmpty()) {
+            vals_ = other.vals_;
+            bitField0_ = (bitField0_ & ~0x00000004);
+          } else {
+            ensureValsIsMutable();
+            vals_.addAll(other.vals_);
+          }
+          
+        }
+        if (other.hasInfo()) {
+          mergeInfo(other.getInfo());
+        }
+        if (!other.rolesSid_.isEmpty()) {
+          if (rolesSid_.isEmpty()) {
+            rolesSid_ = other.rolesSid_;
+            bitField0_ = (bitField0_ & ~0x00000010);
+          } else {
+            ensureRolesSidIsMutable();
+            rolesSid_.addAll(other.rolesSid_);
+          }
+          
+        }
+        if (!other.memids_.isEmpty()) {
+          if (memids_.isEmpty()) {
+            memids_ = other.memids_;
+            bitField0_ = (bitField0_ & ~0x00000020);
+          } else {
+            ensureMemidsIsMutable();
+            memids_.addAll(other.memids_);
+          }
+          
+        }
+        if (!other.types_.isEmpty()) {
+          if (types_.isEmpty()) {
+            types_ = other.types_;
+            bitField0_ = (bitField0_ & ~0x00000040);
+          } else {
+            ensureTypesIsMutable();
+            types_.addAll(other.types_);
+          }
+          
+        }
+        return this;
+      }
+      
+      public final boolean isInitialized() {
+        if (!hasId()) {
+          
+          return false;
+        }
+        return true;
+      }
+      
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        while (true) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              
+              return this;
+            default: {
+              if (!parseUnknownField(input, extensionRegistry, tag)) {
+                
+                return this;
+              }
+              break;
+            }
+            case 8: {
+              bitField0_ |= 0x00000001;
+              id_ = input.readInt64();
+              break;
+            }
+            case 16: {
+              ensureKeysIsMutable();
+              keys_.add(input.readUInt32());
+              break;
+            }
+            case 18: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addKeys(input.readUInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 24: {
+              ensureValsIsMutable();
+              vals_.add(input.readUInt32());
+              break;
+            }
+            case 26: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addVals(input.readUInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 34: {
+              crosby.binary.Osmformat.Info.Builder subBuilder = crosby.binary.Osmformat.Info.newBuilder();
+              if (hasInfo()) {
+                subBuilder.mergeFrom(getInfo());
+              }
+              input.readMessage(subBuilder, extensionRegistry);
+              setInfo(subBuilder.buildPartial());
+              break;
+            }
+            case 64: {
+              ensureRolesSidIsMutable();
+              rolesSid_.add(input.readInt32());
+              break;
+            }
+            case 66: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addRolesSid(input.readInt32());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 72: {
+              ensureMemidsIsMutable();
+              memids_.add(input.readSInt64());
+              break;
+            }
+            case 74: {
+              int length = input.readRawVarint32();
+              int limit = input.pushLimit(length);
+              while (input.getBytesUntilLimit() > 0) {
+                addMemids(input.readSInt64());
+              }
+              input.popLimit(limit);
+              break;
+            }
+            case 80: {
+              int rawValue = input.readEnum();
+              crosby.binary.Osmformat.Relation.MemberType value = crosby.binary.Osmformat.Relation.MemberType.valueOf(rawValue);
+              if (value != null) {
+                addTypes(value);
+              }
+              break;
+            }
+            case 82: {
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                crosby.binary.Osmformat.Relation.MemberType value = crosby.binary.Osmformat.Relation.MemberType.valueOf(rawValue);
+                if (value != null) {
+                  addTypes(value);
+                }
+              }
+              input.popLimit(oldLimit);
+              break;
+            }
+          }
+        }
+      }
+      
+      private int bitField0_;
+      
+      // required int64 id = 1;
+      private long id_ ;
+      public boolean hasId() {
+        return ((bitField0_ & 0x00000001) == 0x00000001);
+      }
+      public long getId() {
+        return id_;
+      }
+      public Builder setId(long value) {
+        bitField0_ |= 0x00000001;
+        id_ = value;
+        
+        return this;
+      }
+      public Builder clearId() {
+        bitField0_ = (bitField0_ & ~0x00000001);
+        id_ = 0L;
+        
+        return this;
+      }
+      
+      // repeated uint32 keys = 2 [packed = true];
+      private java.util.List<java.lang.Integer> keys_ = java.util.Collections.emptyList();;
+      private void ensureKeysIsMutable() {
+        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
+          keys_ = new java.util.ArrayList<java.lang.Integer>(keys_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+      public java.util.List<java.lang.Integer>
+          getKeysList() {
+        return java.util.Collections.unmodifiableList(keys_);
+      }
+      public int getKeysCount() {
+        return keys_.size();
+      }
+      public int getKeys(int index) {
+        return keys_.get(index);
+      }
+      public Builder setKeys(
+          int index, int value) {
+        ensureKeysIsMutable();
+        keys_.set(index, value);
+        
+        return this;
+      }
+      public Builder addKeys(int value) {
+        ensureKeysIsMutable();
+        keys_.add(value);
+        
+        return this;
+      }
+      public Builder addAllKeys(
+          java.lang.Iterable<? extends java.lang.Integer> values) {
+        ensureKeysIsMutable();
+        super.addAll(values, keys_);
+        
+        return this;
+      }
+      public Builder clearKeys() {
+        keys_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000002);
+        
+        return this;
+      }
+      
+      // repeated uint32 vals = 3 [packed = true];
+      private java.util.List<java.lang.Integer> vals_ = java.util.Collections.emptyList();;
+      private void ensureValsIsMutable() {
+        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
+          vals_ = new java.util.ArrayList<java.lang.Integer>(vals_);
+          bitField0_ |= 0x00000004;
+         }
+      }
+      public java.util.List<java.lang.Integer>
+          getValsList() {
+        return java.util.Collections.unmodifiableList(vals_);
+      }
+      public int getValsCount() {
+        return vals_.size();
+      }
+      public int getVals(int index) {
+        return vals_.get(index);
+      }
+      public Builder setVals(
+          int index, int value) {
+        ensureValsIsMutable();
+        vals_.set(index, value);
+        
+        return this;
+      }
+      public Builder addVals(int value) {
+        ensureValsIsMutable();
+        vals_.add(value);
+        
+        return this;
+      }
+      public Builder addAllVals(
+          java.lang.Iterable<? extends java.lang.Integer> values) {
+        ensureValsIsMutable();
+        super.addAll(values, vals_);
+        
+        return this;
+      }
+      public Builder clearVals() {
+        vals_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000004);
+        
+        return this;
+      }
+      
+      // optional .OSMPBF.Info info = 4;
+      private crosby.binary.Osmformat.Info info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+      public boolean hasInfo() {
+        return ((bitField0_ & 0x00000008) == 0x00000008);
+      }
+      public crosby.binary.Osmformat.Info getInfo() {
+        return info_;
+      }
+      public Builder setInfo(crosby.binary.Osmformat.Info value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        info_ = value;
+        
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder setInfo(
+          crosby.binary.Osmformat.Info.Builder builderForValue) {
+        info_ = builderForValue.build();
+        
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder mergeInfo(crosby.binary.Osmformat.Info value) {
+        if (((bitField0_ & 0x00000008) == 0x00000008) &&
+            info_ != crosby.binary.Osmformat.Info.getDefaultInstance()) {
+          info_ =
+            crosby.binary.Osmformat.Info.newBuilder(info_).mergeFrom(value).buildPartial();
+        } else {
+          info_ = value;
+        }
+        
+        bitField0_ |= 0x00000008;
+        return this;
+      }
+      public Builder clearInfo() {
+        info_ = crosby.binary.Osmformat.Info.getDefaultInstance();
+        
+        bitField0_ = (bitField0_ & ~0x00000008);
+        return this;
+      }
+      
+      // repeated int32 roles_sid = 8 [packed = true];
+      private java.util.List<java.lang.Integer> rolesSid_ = java.util.Collections.emptyList();;
+      private void ensureRolesSidIsMutable() {
+        if (!((bitField0_ & 0x00000010) == 0x00000010)) {
+          rolesSid_ = new java.util.ArrayList<java.lang.Integer>(rolesSid_);
+          bitField0_ |= 0x00000010;
+         }
+      }
+      public java.util.List<java.lang.Integer>
+          getRolesSidList() {
+        return java.util.Collections.unmodifiableList(rolesSid_);
+      }
+      public int getRolesSidCount() {
+        return rolesSid_.size();
+      }
+      public int getRolesSid(int index) {
+        return rolesSid_.get(index);
+      }
+      public Builder setRolesSid(
+          int index, int value) {
+        ensureRolesSidIsMutable();
+        rolesSid_.set(index, value);
+        
+        return this;
+      }
+      public Builder addRolesSid(int value) {
+        ensureRolesSidIsMutable();
+        rolesSid_.add(value);
+        
+        return this;
+      }
+      public Builder addAllRolesSid(
+          java.lang.Iterable<? extends java.lang.Integer> values) {
+        ensureRolesSidIsMutable();
+        super.addAll(values, rolesSid_);
+        
+        return this;
+      }
+      public Builder clearRolesSid() {
+        rolesSid_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000010);
+        
+        return this;
+      }
+      
+      // repeated sint64 memids = 9 [packed = true];
+      private java.util.List<java.lang.Long> memids_ = java.util.Collections.emptyList();;
+      private void ensureMemidsIsMutable() {
+        if (!((bitField0_ & 0x00000020) == 0x00000020)) {
+          memids_ = new java.util.ArrayList<java.lang.Long>(memids_);
+          bitField0_ |= 0x00000020;
+         }
+      }
+      public java.util.List<java.lang.Long>
+          getMemidsList() {
+        return java.util.Collections.unmodifiableList(memids_);
+      }
+      public int getMemidsCount() {
+        return memids_.size();
+      }
+      public long getMemids(int index) {
+        return memids_.get(index);
+      }
+      public Builder setMemids(
+          int index, long value) {
+        ensureMemidsIsMutable();
+        memids_.set(index, value);
+        
+        return this;
+      }
+      public Builder addMemids(long value) {
+        ensureMemidsIsMutable();
+        memids_.add(value);
+        
+        return this;
+      }
+      public Builder addAllMemids(
+          java.lang.Iterable<? extends java.lang.Long> values) {
+        ensureMemidsIsMutable();
+        super.addAll(values, memids_);
+        
+        return this;
+      }
+      public Builder clearMemids() {
+        memids_ = java.util.Collections.emptyList();;
+        bitField0_ = (bitField0_ & ~0x00000020);
+        
+        return this;
+      }
+      
+      // repeated .OSMPBF.Relation.MemberType types = 10 [packed = true];
+      private java.util.List<crosby.binary.Osmformat.Relation.MemberType> types_ =
+        java.util.Collections.emptyList();
+      private void ensureTypesIsMutable() {
+        if (!((bitField0_ & 0x00000040) == 0x00000040)) {
+          types_ = new java.util.ArrayList<crosby.binary.Osmformat.Relation.MemberType>(types_);
+          bitField0_ |= 0x00000040;
+        }
+      }
+      public java.util.List<crosby.binary.Osmformat.Relation.MemberType> getTypesList() {
+        return java.util.Collections.unmodifiableList(types_);
+      }
+      public int getTypesCount() {
+        return types_.size();
+      }
+      public crosby.binary.Osmformat.Relation.MemberType getTypes(int index) {
+        return types_.get(index);
+      }
+      public Builder setTypes(
+          int index, crosby.binary.Osmformat.Relation.MemberType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureTypesIsMutable();
+        types_.set(index, value);
+        
+        return this;
+      }
+      public Builder addTypes(crosby.binary.Osmformat.Relation.MemberType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureTypesIsMutable();
+        types_.add(value);
+        
+        return this;
+      }
+      public Builder addAllTypes(
+          java.lang.Iterable<? extends crosby.binary.Osmformat.Relation.MemberType> values) {
+        ensureTypesIsMutable();
+        super.addAll(values, types_);
+        
+        return this;
+      }
+      public Builder clearTypes() {
+        types_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000040);
+        
+        return this;
+      }
+      
+      // @@protoc_insertion_point(builder_scope:OSMPBF.Relation)
+    }
+    
+    static {
+      defaultInstance = new Relation(true);
+      defaultInstance.initFields();
+    }
+    
+    // @@protoc_insertion_point(class_scope:OSMPBF.Relation)
+  }
+  
+  
+  static {
+  }
+  
+  // @@protoc_insertion_point(outer_class_scope)
+}
Index: /applications/editors/josm/plugins/pbf/lgpl-3.0.txt
===================================================================
--- /applications/editors/josm/plugins/pbf/lgpl-3.0.txt	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/lgpl-3.0.txt	(revision 26961)
@@ -0,0 +1,165 @@
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/BinaryParser.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/BinaryParser.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/BinaryParser.java	(revision 26961)
@@ -0,0 +1,139 @@
+/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as 
+   published by the Free Software Foundation, either version 3 of the 
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+package crosby.binary;
+
+
+import java.util.Date;
+import java.util.List;
+
+import com.google.protobuf.InvalidProtocolBufferException;
+
+import crosby.binary.Osmformat;
+import crosby.binary.file.BlockReaderAdapter;
+import crosby.binary.file.FileBlock;
+import crosby.binary.file.FileBlockPosition;
+
+public abstract class BinaryParser implements BlockReaderAdapter {
+    protected int granularity;
+    private long lat_offset;
+    private long lon_offset;
+    protected int date_granularity;
+    private String strings[];
+
+    /** Take a Info protocol buffer containing a date and convert it into a java Date object */
+    protected Date getDate(Osmformat.Info info) {
+      if (info.hasTimestamp()) {
+          return new Date(date_granularity * (long) info.getTimestamp());
+      } else
+          return NODATE;
+    }
+    public static final Date NODATE = new Date(-1);
+
+    /** Get a string based on the index used. 
+     * 
+     * Index 0 is reserved to use as a delimiter, therefore, index 1 corresponds to the first string in the table 
+     * @param id
+     * @return
+     */
+    protected String getStringById(int id) {
+      return strings[id];
+    }
+    
+    //@Override
+    public void handleBlock(FileBlock message) {
+        // TODO Auto-generated method stub
+        try {
+            if (message.getType().equals("OSMHeader")) {
+                Osmformat.HeaderBlock headerblock = Osmformat.HeaderBlock
+                        .parseFrom(message.getData());
+                parse(headerblock);
+            } else if (message.getType().equals("OSMData")) {
+                Osmformat.PrimitiveBlock primblock = Osmformat.PrimitiveBlock
+                        .parseFrom(message.getData());
+                parse(primblock);
+            }
+        } catch (InvalidProtocolBufferException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            throw new Error("ParseError"); // TODO
+        }
+
+    }
+
+
+    //@Override
+    public boolean skipBlock(FileBlockPosition block) {
+        // System.out.println("Seeing block of type: "+block.getType());
+        if (block.getType().equals("OSMData"))
+            return false;
+        if (block.getType().equals("OSMHeader"))
+            return false;
+        System.out.println("Skipped block of type: " + block.getType());
+        return true;
+    }
+    
+    
+    /** Convert a latitude value stored in a protobuf into a double, compensating for granularity and latitude offset */
+    public double parseLat(long degree) {
+      // Support non-zero offsets. (We don't currently generate them)
+      return (granularity * degree + lat_offset) * .000000001;
+    }
+
+    /** Convert a longitude value stored in a protobuf into a double, compensating for granularity and longitude offset */
+    public double parseLon(long degree) {
+      // Support non-zero offsets. (We don't currently generate them)
+       return (granularity * degree + lon_offset) * .000000001;
+    }
+   
+    /** Parse a Primitive block (containing a string table, other paramaters, and PrimitiveGroups */
+    public void parse(Osmformat.PrimitiveBlock block) {
+        Osmformat.StringTable stablemessage = block.getStringtable();
+        strings = new String[stablemessage.getSCount()];
+
+        for (int i = 0; i < strings.length; i++) {
+            strings[i] = stablemessage.getS(i).toStringUtf8();
+        }
+
+        granularity = block.getGranularity();
+        lat_offset = block.getLatOffset();
+        lon_offset = block.getLonOffset();
+        date_granularity = block.getDateGranularity();
+
+        for (Osmformat.PrimitiveGroup groupmessage : block
+                .getPrimitivegroupList()) {
+            // Exactly one of these should trigger on each loop.
+            parseNodes(groupmessage.getNodesList());
+            parseWays(groupmessage.getWaysList());
+            parseRelations(groupmessage.getRelationsList());
+            if (groupmessage.hasDense())
+                parseDense(groupmessage.getDense());
+        }
+    }
+    
+    /** Parse a list of Relation protocol buffers and send the resulting relations to a sink.  */
+    protected abstract void parseRelations(List<Osmformat.Relation> rels);
+    /** Parse a DenseNode protocol buffer and send the resulting nodes to a sink.  */
+    protected abstract void parseDense(Osmformat.DenseNodes nodes);
+    /** Parse a list of Node protocol buffers and send the resulting nodes to a sink.  */
+    protected abstract void parseNodes(List<Osmformat.Node> nodes);
+    /** Parse a list of Way protocol buffers and send the resulting ways to a sink.  */
+    protected abstract void parseWays(List<Osmformat.Way> ways);
+    /** Parse a header message. */
+    protected abstract void parse(Osmformat.HeaderBlock header);
+
+}
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/BinarySerializer.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/BinarySerializer.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/BinarySerializer.java	(revision 26961)
@@ -0,0 +1,161 @@
+/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as 
+   published by the Free Software Foundation, either version 3 of the 
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+package crosby.binary;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import crosby.binary.Osmformat.PrimitiveGroup;
+import crosby.binary.file.BlockOutputStream;
+import crosby.binary.file.FileBlock;
+
+/**
+ * Generic serializer common code
+ * 
+ * Serialize a set of blobs and process them. Subclasses implement handlers for
+ * different API's (osmosis, mkgmap, splitter, etc.)
+ * 
+ * All data is converted into PrimGroupWriterInterface objects, which are then
+ * ordered to process their data at the appropriate time.
+ * */
+
+public class BinarySerializer {
+
+    /**
+     * Interface used to write a group of primitives. One of these for each
+     * group type (Node, Way, Relation, DenseNode, Changeset)
+     */
+    protected interface PrimGroupWriterInterface {
+        /** This callback is invoked on each group that is going into the fileblock in order to give it a chance to 
+         * add to the stringtable pool of strings. */
+        public void addStringsToStringtable();
+
+        /**
+         * This callback is invoked to request that the primgroup serialize itself into the given protocol buffer object.
+         */
+        public Osmformat.PrimitiveGroup serialize();
+    }
+
+    /** Set the granularity (precision of lat/lon, measured in unites of nanodegrees. */
+    public void configGranularity(int granularity) {
+        this.granularity = granularity;
+    }
+
+    /** Set whether metadata is to be omitted */
+    public void configOmit(boolean omit_metadata) {
+        this.omit_metadata = omit_metadata;
+    }
+
+    /** Configure the maximum number of entities in a batch */
+    public void configBatchLimit(int batch_limit) {
+        this.batch_limit = batch_limit;
+    }
+
+    // Paramaters affecting the output size.
+    protected final int MIN_DENSE = 10;
+    protected int batch_limit = 4000;
+
+    // Parmaters affecting the output.
+
+    protected int granularity = 100;
+    protected int date_granularity = 1000;
+    protected boolean omit_metadata = false;
+
+    /** How many primitives have been seen in this batch */
+    protected int batch_size = 0;
+    protected int total_entities = 0;
+    private StringTable stringtable = new StringTable();
+    protected List<PrimGroupWriterInterface> groups = new ArrayList<PrimGroupWriterInterface>();
+    protected BlockOutputStream output;
+
+    public BinarySerializer(BlockOutputStream output) {
+        this.output = output;
+    }
+
+    public StringTable getStringTable() {
+        return stringtable;
+    }
+
+    public void flush() throws IOException {
+        processBatch();
+        output.flush();
+    }
+
+    public void close() throws IOException {
+        flush();
+        output.close();
+    }
+
+    long debug_bytes = 0;
+
+    public void processBatch() {
+        // System.out.format("Batch of %d groups: ",groups.size());
+        if (groups.size() == 0)
+            return;
+        Osmformat.PrimitiveBlock.Builder primblock = Osmformat.PrimitiveBlock
+                .newBuilder();
+        stringtable.clear();
+        // Preprocessing: Figure out the stringtable.
+        for (PrimGroupWriterInterface i : groups)
+            i.addStringsToStringtable();
+
+        stringtable.finish();
+        // Now, start serializing.
+        for (PrimGroupWriterInterface i : groups) {
+         PrimitiveGroup group = i.serialize();
+         if (group != null)
+           primblock.addPrimitivegroup(group);
+        }
+        primblock.setStringtable(stringtable.serialize());
+        primblock.setGranularity(this.granularity);
+        primblock.setDateGranularity(this.date_granularity);
+
+        // Only generate data with offset (0,0)
+        // 
+        Osmformat.PrimitiveBlock message = primblock.build();
+
+        // System.out.println(message);
+        debug_bytes += message.getSerializedSize();
+        // if (message.getSerializedSize() > 1000000)
+        // System.out.println(message);
+
+        try {
+            output.write(FileBlock.newInstance("OSMData", message
+                    .toByteString(), null));
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            throw new Error(e);
+        } finally {
+            batch_size = 0;
+            groups.clear();
+        }
+        // System.out.format("\n");
+    }
+
+    /** Convert from a degrees represented as a double into the serialized offset in nanodegrees.. */
+    public long mapRawDegrees(double degrees) {
+        return (long) ((degrees / .000000001));
+    }
+
+    /** Convert from a degrees represented as a double into the serialized offset. */
+    public int mapDegrees(double degrees) {
+        return (int) ((degrees / .0000001) / (granularity / 100));
+    }
+}
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/StringTable.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/StringTable.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/StringTable.java	(revision 26961)
@@ -0,0 +1,103 @@
+/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as 
+   published by the Free Software Foundation, either version 3 of the 
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+package crosby.binary;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+
+import com.google.protobuf.ByteString;
+
+/**
+ * Class for mapping a set of strings to integers, giving frequently occuring
+ * strings small integers.
+ */
+public class StringTable {
+    public StringTable() {
+        clear();
+    }
+
+    private HashMap<String, Integer> counts;
+    private HashMap<String, Integer> stringmap;
+    private String set[];
+
+    public void incr(String s) {
+        if (counts.containsKey(s)) {
+            counts.put(s, new Integer(counts.get(s).intValue() + 1));
+        } else {
+            counts.put(s, new Integer(1));
+        }
+    }
+
+    /** After the stringtable has been built, return the offset of a string in it.
+     * 
+     * Note, value '0' is reserved for use as a delimiter and will not be returned.
+     * @param s
+     * @return
+     */
+    public int getIndex(String s) {
+        return stringmap.get(s).intValue();
+    }
+
+    public void finish() {
+        Comparator<String> comparator = new Comparator<String>() {
+            //@Override
+            public int compare(final String s1, String s2) {
+                int diff = counts.get(s2) - counts.get(s1);
+                return diff;
+            }
+        };
+
+        set = counts.keySet().toArray(new String[0]);
+        if (set.length > 0) {
+          // Sort based on the frequency.
+          Arrays.sort(set, comparator);
+          // Each group of keys that serializes to the same number of bytes is
+          // sorted lexiconographically.
+          // to maximize deflate compression.
+          
+          // Don't sort the first array. There's not likely to be much benefit, and we want frequent values to be small.
+          //Arrays.sort(set, Math.min(0, set.length-1), Math.min(1 << 7, set.length-1));
+          
+          Arrays.sort(set, Math.min(1 << 7, set.length-1), Math.min(1 << 14,
+              set.length-1));
+          Arrays.sort(set, Math.min(1 << 14, set.length-1), Math.min(1 << 21,
+              set.length-1), comparator);
+        }
+        stringmap = new HashMap<String, Integer>(2 * set.length);
+        for (int i = 0; i < set.length; i++) {
+            stringmap.put(set[i], new Integer(i+1)); // Index 0 is reserved for use as a delimiter.
+        }
+        counts = null;
+    }
+
+    public void clear() {
+        counts = new HashMap<String, Integer>(100);
+        stringmap = null;
+        set = null;
+    }
+
+    public Osmformat.StringTable.Builder serialize() {
+        Osmformat.StringTable.Builder builder = Osmformat.StringTable
+                .newBuilder();
+        builder.addS(ByteString.copyFromUtf8("")); // Add a unused string at offset 0 which is used as a delimiter.
+        for (int i = 0; i < set.length; i++)
+            builder.addS(ByteString.copyFromUtf8(set[i]));
+        return builder;
+    }
+}
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/file/BlockInputStream.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/file/BlockInputStream.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/file/BlockInputStream.java	(revision 26961)
@@ -0,0 +1,47 @@
+/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as 
+   published by the Free Software Foundation, either version 3 of the 
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+package crosby.binary.file;
+
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class BlockInputStream {
+    // TODO: Should be seekable input stream!
+    public BlockInputStream(InputStream input, BlockReaderAdapter adaptor) {
+        this.input = input;
+        this.adaptor = adaptor;
+    }
+
+    public void process() throws IOException {
+      try {
+        while (true) {
+          FileBlock.process(input, adaptor);
+        }
+      } catch (EOFException e) {
+        adaptor.complete();
+      }
+    }
+
+    public void close() throws IOException {
+        input.close();
+    }
+
+    InputStream input;
+    BlockReaderAdapter adaptor;
+}
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/file/BlockOutputStream.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/file/BlockOutputStream.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/file/BlockOutputStream.java	(revision 26961)
@@ -0,0 +1,74 @@
+/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as 
+   published by the Free Software Foundation, either version 3 of the 
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+package crosby.binary.file;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+enum CompressFlags {
+    NONE, DEFLATE
+}
+
+public class BlockOutputStream {
+
+    public BlockOutputStream(OutputStream output) {
+        this.outwrite = new DataOutputStream(output);
+        this.compression = CompressFlags.DEFLATE;
+    }
+
+    public void setCompress(CompressFlags flag) {
+        compression = flag;
+    }
+
+    public void setCompress(String s) {
+        if (s.equals("none"))
+            compression = CompressFlags.NONE;
+        else if (s.equals("deflate"))
+            compression = CompressFlags.DEFLATE;
+        else
+            throw new Error("Unknown compression type: " + s);
+    }
+
+    /** Write a block with the stream's default compression flag */
+    public void write(FileBlock block) throws IOException {
+        this.write(block, compression);
+    }
+
+    /** Write a specific block with a specific compression flags */
+    public void write(FileBlock block, CompressFlags compression)
+            throws IOException {
+        FileBlockPosition ref = block.writeTo(outwrite, compression);
+        writtenblocks.add(ref);
+    }
+
+    public void flush() throws IOException {
+        outwrite.flush();
+    }
+
+    public void close() throws IOException {
+        outwrite.flush();
+        outwrite.close();
+    }
+
+    OutputStream outwrite;
+    List<FileBlockPosition> writtenblocks = new ArrayList<FileBlockPosition>();
+    CompressFlags compression;
+}
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/file/BlockReaderAdapter.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/file/BlockReaderAdapter.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/file/BlockReaderAdapter.java	(revision 26961)
@@ -0,0 +1,40 @@
+/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as 
+   published by the Free Software Foundation, either version 3 of the 
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+package crosby.binary.file;
+
+/** An adaptor that receives blocks from an input stream */
+public interface BlockReaderAdapter {
+    /**
+     * Does the reader understand this block? Does it want the data in it?
+     * 
+     * A reference contains the metadata about a block and can saved --- or
+     * stored ---- for future random access. However, during a strea read of the
+     * file, does the user want this block?
+     * 
+     * handleBlock will be called on all blocks that are not skipped, in file
+     * order.
+     * 
+     * */
+    boolean skipBlock(FileBlockPosition message);
+
+    /** Called with the data in the block. */
+    void handleBlock(FileBlock message);
+
+    /** Called when the file is fully read. */
+    void complete();
+}
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlock.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlock.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlock.java	(revision 26961)
@@ -0,0 +1,142 @@
+/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as 
+   published by the Free Software Foundation, either version 3 of the 
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+package crosby.binary.file;
+
+import java.io.DataOutputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Arrays;
+import java.util.zip.Deflater;
+
+import com.google.protobuf.ByteString;
+
+import crosby.binary.Fileformat;
+import crosby.binary.Fileformat.BlobHeader;
+
+/** A full fileblock object contains both the metadata and data of a fileblock */
+public class FileBlock extends FileBlockBase {
+    /** Contains the contents of a block for use or further processing */
+    ByteString data; // serialized Format.Blob
+
+    /** Don't be noisy unless the warning occurs somewhat often */
+    static int warncount = 0;
+
+    private FileBlock(String type, ByteString blob, ByteString indexdata) {
+        super(type, indexdata);
+        this.data = blob;
+    }
+
+    public static FileBlock newInstance(String type, ByteString blob,
+            ByteString indexdata) {
+      if (blob != null && blob.size() > MAX_BODY_SIZE/2) {
+        System.err.println("Warning: Fileblock has body size too large and may be considered corrupt");
+        if (blob != null && blob.size() > MAX_BODY_SIZE-1024*1024) {
+          throw new Error("This file has too many entities in a block. Parsers will reject it.");
+        }
+      }
+      if (indexdata != null && indexdata.size() > MAX_HEADER_SIZE/2) {
+        System.err.println("Warning: Fileblock has indexdata too large and may be considered corrupt");
+        if (indexdata != null && indexdata.size() > MAX_HEADER_SIZE-512) {
+          throw new Error("This file header is too large. Parsers will reject it.");
+        }
+      }
+      return new FileBlock(type, blob, indexdata);
+    }
+
+     protected void deflateInto(crosby.binary.Fileformat.Blob.Builder blobbuilder) {
+        int size = data.size();
+        Deflater deflater = new Deflater();
+        deflater.setInput(data.toByteArray());
+        deflater.finish();
+        byte out[] = new byte[size];
+        deflater.deflate(out);
+        
+        if (!deflater.finished()) {
+            // Buffer wasn't long enough. Be noisy.
+          ++warncount;
+          if (warncount > 10 && warncount%100 == 0)
+               System.out.println("Compressed buffers are too short, causing extra copy");
+            out = Arrays.copyOf(out, size + size / 64 + 16);
+            deflater.deflate(out, deflater.getTotalOut(), out.length
+                    - deflater.getTotalOut());
+            if (!deflater.finished()) {
+              throw new Error("Internal error in compressor");
+            }
+        }
+        ByteString compressed = ByteString.copyFrom(out, 0, deflater
+                .getTotalOut());
+        blobbuilder.setZlibData(compressed);
+        deflater.end();
+    }
+
+    public FileBlockPosition writeTo(OutputStream outwrite, CompressFlags flags)
+            throws IOException {
+        BlobHeader.Builder builder = Fileformat.BlobHeader
+                .newBuilder();
+        if (indexdata != null)
+            builder.setIndexdata(indexdata);
+        builder.setType(type);
+
+        Fileformat.Blob.Builder blobbuilder = Fileformat.Blob.newBuilder();
+        if (flags == CompressFlags.NONE) {
+            blobbuilder.setRaw(data);
+            blobbuilder.setRawSize(data.size());
+        } else {
+            blobbuilder.setRawSize(data.size());
+            if (flags == CompressFlags.DEFLATE)
+                deflateInto(blobbuilder);
+            else
+                throw new Error("Compression flag not understood");
+        }
+        Fileformat.Blob blob = blobbuilder.build();
+
+        builder.setDatasize(blob.getSerializedSize());
+        Fileformat.BlobHeader message = builder.build();
+        int size = message.getSerializedSize();
+
+        // System.out.format("Outputed header size %d bytes, header of %d bytes, and blob of %d bytes\n",
+        // size,message.getSerializedSize(),blob.getSerializedSize());
+        (new DataOutputStream(outwrite)).writeInt(size);
+        message.writeTo(outwrite);
+        long offset = -1;
+
+        if (outwrite instanceof FileOutputStream)
+            offset = ((FileOutputStream) outwrite).getChannel().position();
+
+        blob.writeTo(outwrite);
+        return FileBlockPosition.newInstance(this, offset, size);
+    }
+
+    /** Reads or skips a fileblock. */
+    static void process(InputStream input, BlockReaderAdapter callback)
+            throws IOException {
+        FileBlockHead fileblock = FileBlockHead.readHead(input);
+        if (callback.skipBlock(fileblock)) {
+            // System.out.format("Attempt to skip %d bytes\n",header.getDatasize());
+            fileblock.skipContents(input);
+        } else {
+            callback.handleBlock(fileblock.readContents(input));
+        }
+    }
+
+    public ByteString getData() {
+        return data;
+    }
+}
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlockBase.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlockBase.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlockBase.java	(revision 26961)
@@ -0,0 +1,58 @@
+/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as 
+   published by the Free Software Foundation, either version 3 of the 
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+package crosby.binary.file;
+
+import com.google.protobuf.ByteString;
+
+/**
+ * Base class that contains the metadata about a fileblock.
+ * 
+ * Subclasses of this include additional fields, such as byte offsets that let a
+ * fileblock be read in a random-access fashion, or the data itself.
+ * 
+ * @author crosby
+ * 
+ */
+public class FileBlockBase {
+
+    /** If a block header is bigger than this, fail. We use excessively large header size as an indication of corrupt files */
+    static final int MAX_HEADER_SIZE = 64*1024;
+    /** If a block's size is bigger than this, fail. We use excessively large block sizes as an indication of corrupt files */
+    static final int MAX_BODY_SIZE = 32*1024*1024;
+
+    protected FileBlockBase(String type, ByteString indexdata) {
+        this.type = type;
+        this.indexdata = indexdata;
+    }
+
+    /** Identifies the type of the data within a block */
+    protected final String type;
+    /**
+     * Block metadata, stored in the index block and as a prefix for every
+     * block.
+     */
+    protected final ByteString indexdata;
+
+    public String getType() {
+        return type;
+    }
+
+    public ByteString getIndexData() {
+        return indexdata;
+    }
+}
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlockHead.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlockHead.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlockHead.java	(revision 26961)
@@ -0,0 +1,97 @@
+/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as 
+   published by the Free Software Foundation, either version 3 of the 
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+package crosby.binary.file;
+
+import java.io.DataInputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import com.google.protobuf.ByteString;
+
+import crosby.binary.Fileformat;
+
+/**
+ * Intermediate representation of the header of a fileblock when a set of
+ * fileblocks is read as in a stream. The data in the fileblock must be either
+ * skipped (where the returned value is a reference to the fileblock) or parsed.
+ * 
+ * @author crosby
+ * 
+ */
+public class FileBlockHead extends FileBlockReference {
+    protected FileBlockHead(String type, ByteString indexdata) {
+        super(type, indexdata);
+    }
+
+    /**
+     * Read the header. After reading the header, either the contents must be
+     * skipped or read
+     */
+    static FileBlockHead readHead(InputStream input) throws IOException {
+        DataInputStream datinput = new DataInputStream(input);
+        int headersize = datinput.readInt();
+        // System.out.format("Header size %d %x\n",headersize,headersize);
+        if (headersize > MAX_HEADER_SIZE) {
+          throw new FileFormatException("Unexpectedly long header "+MAX_HEADER_SIZE+ " bytes. Possibly corrupt file.");
+        }
+        
+        byte buf[] = new byte[headersize];
+        datinput.readFully(buf);
+        // System.out.format("Read buffer for header of %d bytes\n",buf.length);
+        Fileformat.BlobHeader header = Fileformat.BlobHeader
+                .parseFrom(buf);
+        FileBlockHead fileblock = new FileBlockHead(header.getType(), header
+                .getIndexdata());
+
+        fileblock.datasize = header.getDatasize();
+        if (header.getDatasize() > MAX_BODY_SIZE) {
+          throw new FileFormatException("Unexpectedly long body "+MAX_BODY_SIZE+ " bytes. Possibly corrupt file.");
+        }
+        
+        fileblock.input = input;
+        if (input instanceof FileInputStream)
+            fileblock.data_offset = ((FileInputStream) input).getChannel()
+                    .position();
+
+        return fileblock;
+    }
+
+    /**
+     * Assumes the stream is positioned over at the start of the data, skip over
+     * it.
+     * 
+     * @throws IOException
+     */
+    void skipContents(InputStream input) throws IOException {
+        if (input.skip(getDatasize()) != getDatasize())
+            assert false : "SHORT READ";
+    }
+
+    /**
+     * Assumes the stream is positioned over at the start of the data, read it
+     * and return the complete FileBlock
+     * 
+     * @throws IOException
+     */
+    FileBlock readContents(InputStream input) throws IOException {
+        DataInputStream datinput = new DataInputStream(input);
+        byte buf[] = new byte[getDatasize()];
+        datinput.readFully(buf);
+        return parseData(buf);
+    }
+}
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlockPosition.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlockPosition.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlockPosition.java	(revision 26961)
@@ -0,0 +1,112 @@
+/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as 
+   published by the Free Software Foundation, either version 3 of the 
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+package crosby.binary.file;
+
+import java.io.DataInputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.DataFormatException;
+import java.util.zip.Inflater;
+
+import com.google.protobuf.ByteString;
+import com.google.protobuf.InvalidProtocolBufferException;
+
+import crosby.binary.Fileformat;
+
+/**
+ * Stores the position in the stream of a fileblock so that it can be easily
+ * read in a random-access fashion.
+ * 
+ * We can turn this into a 'real' block by appropriately seeking into the file
+ * and doing a 'read'.
+ * 
+ * */
+public class FileBlockPosition extends FileBlockBase {
+    protected FileBlockPosition(String type, ByteString indexdata) {
+        super(type, indexdata);
+    }
+
+    /** Parse out and decompress the data part of a fileblock helper function. */
+    FileBlock parseData(byte buf[]) throws InvalidProtocolBufferException {
+        FileBlock out = FileBlock.newInstance(type, null, indexdata);
+        Fileformat.Blob blob = Fileformat.Blob.parseFrom(buf);
+        if (blob.hasRaw()) {
+            out.data = blob.getRaw();
+        } else if (blob.hasZlibData()) {
+            byte buf2[] = new byte[blob.getRawSize()];
+            Inflater decompresser = new Inflater();
+            decompresser.setInput(blob.getZlibData().toByteArray());
+            // decompresser.getRemaining();
+            try {
+                decompresser.inflate(buf2);
+            } catch (DataFormatException e) {
+                e.printStackTrace();
+                throw new Error(e);
+            }
+            assert (decompresser.finished());
+            decompresser.end();
+            out.data = ByteString.copyFrom(buf2);
+        }
+        return out;
+    }
+
+    public int getDatasize() {
+        return datasize;
+    }
+
+    /*
+     * Given any form of fileblock and an offset/length value, return a
+     * reference that can be used to dereference and read the contents.
+     */
+    static FileBlockPosition newInstance(FileBlockBase base, long offset,
+            int length) {
+        FileBlockPosition out = new FileBlockPosition(base.type, base.indexdata);
+        out.datasize = length;
+        out.data_offset = offset;
+        return out;
+    }
+
+    public FileBlock read(InputStream input) throws IOException {
+        if (input instanceof FileInputStream) {
+            ((FileInputStream) input).getChannel().position(data_offset);
+            byte buf[] = new byte[getDatasize()];
+            (new DataInputStream(input)).readFully(buf);
+            return parseData(buf);
+        } else {
+            throw new Error("Random access binary reads require seekability");
+        }
+    }
+
+    /**
+     * TODO: Convert this reference into a serialized representation that can be
+     * stored.
+     */
+    public ByteString serialize() {
+        throw new Error("TODO");
+    }
+
+    /** TODO: Parse a serialized representation of this block reference */
+    static FileBlockPosition parseFrom(ByteString b) {
+      throw new Error("TODO");
+    }
+
+    protected int datasize;
+    /** Offset into the file of the data part of the block */
+    long data_offset;
+}
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlockReference.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlockReference.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileBlockReference.java	(revision 26961)
@@ -0,0 +1,54 @@
+/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as 
+   published by the Free Software Foundation, either version 3 of the 
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+package crosby.binary.file;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import com.google.protobuf.ByteString;
+
+/**
+ * A FileBlockPosition that remembers what file this is so that it can simply be
+ * dereferenced
+ */
+public class FileBlockReference extends FileBlockPosition {
+
+    /**
+     * Convenience cache for storing the input this reference is contained
+     * within so that it can be cached
+     */
+    protected InputStream input;
+
+    protected FileBlockReference(String type, ByteString indexdata) {
+        super(type, indexdata);
+    }
+
+    public FileBlock read() throws IOException {
+        return read(input);
+    }
+
+    static FileBlockPosition newInstance(FileBlockBase base, InputStream input,
+            long offset, int length) {
+        FileBlockReference out = new FileBlockReference(base.type,
+                base.indexdata);
+        out.datasize = length;
+        out.data_offset = offset;
+        out.input = input;
+        return out;
+    }
+}
Index: /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileFormatException.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileFormatException.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/crosby/binary/file/FileFormatException.java	(revision 26961)
@@ -0,0 +1,33 @@
+/** Copyright (c) 2010 Scott A. Crosby. <scott@sacrosby.com>
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as 
+   published by the Free Software Foundation, either version 3 of the 
+   License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+package crosby.binary.file;
+
+import java.io.IOException;
+
+public class FileFormatException extends IOException {
+
+  public FileFormatException(String string) {
+    super(string);
+  }
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = -8128010128748910923L;
+
+}
Index: /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/PbfConstants.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/PbfConstants.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/PbfConstants.java	(revision 26961)
@@ -0,0 +1,38 @@
+//    JOSM PBF plugin.
+//    Copyright (C) 2011 Don-vip
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+package org.openstreetmap.josm.plugins.pbf;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import org.openstreetmap.josm.actions.ExtensionFileFilter;
+
+/**
+ * 
+ * @author Don-vip
+ *
+ */
+public interface PbfConstants {
+    
+    /**
+     * File extension.
+     */
+    public static final String EXTENSION = "osm.pbf";
+    
+    /**
+     * File filter used in import/export dialogs.
+     */
+    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(EXTENSION, EXTENSION, tr("OSM Server Files pbf compressed") + " (*."+EXTENSION+")");
+}
Index: /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/PbfPlugin.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/PbfPlugin.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/PbfPlugin.java	(revision 26961)
@@ -0,0 +1,41 @@
+//    JOSM PBF plugin.
+//    Copyright (C) 2011 Don-vip
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+package org.openstreetmap.josm.plugins.pbf;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.ExtensionFileFilter;
+import org.openstreetmap.josm.plugins.Plugin;
+import org.openstreetmap.josm.plugins.PluginInformation;
+import org.openstreetmap.josm.plugins.pbf.action.DownloadPbfTask;
+import org.openstreetmap.josm.plugins.pbf.io.PbfImporter;
+
+/**
+ * 
+ * @author Don-vip
+ *
+ */
+public class PbfPlugin extends Plugin {
+
+    public PbfPlugin(PluginInformation info) {
+        super(info);
+        // Allow JOSM to import *.osm.pbf files
+        ExtensionFileFilter.importers.add(new PbfImporter());
+        // Allow JOSM to export *.osm.pbf files
+        //ExtensionFileFilter.exporters.add(new PbfExporter());// TODO: PBF export
+        // Allow JOSM to download remote *.osm.pbf files
+        Main.main.menu.openLocation.addDownloadTaskClass(DownloadPbfTask.class);
+    }
+}
Index: /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/action/DownloadPbfTask.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/action/DownloadPbfTask.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/action/DownloadPbfTask.java	(revision 26961)
@@ -0,0 +1,49 @@
+//    JOSM PBF plugin.
+//    Copyright (C) 2011 Don-vip
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+package org.openstreetmap.josm.plugins.pbf.action;
+
+import java.util.concurrent.Future;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.plugins.pbf.PbfConstants;
+import org.openstreetmap.josm.plugins.pbf.io.PbfServerReader;
+
+public class DownloadPbfTask extends DownloadOsmTask implements PbfConstants {
+
+	@Override
+	public Future<?> download(boolean newLayer, Bounds downloadArea,
+			ProgressMonitor progressMonitor) {
+		return null;
+	}
+
+	@Override
+	public Future<?> loadUrl(boolean newLayer, String url,
+			ProgressMonitor progressMonitor) {
+        downloadTask = new DownloadTask(newLayer,
+                new PbfServerReader(url), progressMonitor);
+        // We need submit instead of execute so we can wait for it to finish and get the error
+        // message if necessary. If no one calls getErrorMessage() it just behaves like execute.
+        return Main.worker.submit(downloadTask);
+	}
+
+	@Override
+	public boolean acceptsUrl(String url) {
+		return url != null && url.endsWith(EXTENSION);
+	}
+}
Index: /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/io/PbfImporter.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/io/PbfImporter.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/io/PbfImporter.java	(revision 26961)
@@ -0,0 +1,54 @@
+//    JOSM PBF plugin.
+//    Copyright (C) 2011 Don-vip
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+package org.openstreetmap.josm.plugins.pbf.io;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
+import org.openstreetmap.josm.io.IllegalDataException;
+import org.openstreetmap.josm.io.MirroredInputStream;
+import org.openstreetmap.josm.io.OsmImporter;
+import org.openstreetmap.josm.plugins.pbf.PbfConstants;
+import org.xml.sax.SAXException;
+
+/**
+ * @author Don-vip
+ *
+ */
+public class PbfImporter extends OsmImporter implements PbfConstants {
+    
+    public PbfImporter() {
+        super(FILE_FILTER);
+    }
+
+    /* (non-Javadoc)
+     * @see org.openstreetmap.josm.io.OsmImporter#importData(java.io.InputStream, java.io.File)
+     */
+    @Override
+    protected void importData(InputStream in, File associatedFile) throws IllegalDataException {
+        final DataSet dataSet = PbfReader.parseDataSet(in, NullProgressMonitor.INSTANCE);
+        final OsmDataLayer layer = new OsmDataLayer(dataSet, associatedFile.getName(), associatedFile);
+        addDataLayer(dataSet, layer, associatedFile.getPath());
+    }
+    
+	protected DataSet parseDataSet(final String source) throws IOException, SAXException, IllegalDataException {
+        return PbfReader.parseDataSet(new MirroredInputStream(source), NullProgressMonitor.INSTANCE);
+	}
+}
Index: /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/io/PbfReader.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/io/PbfReader.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/io/PbfReader.java	(revision 26961)
@@ -0,0 +1,296 @@
+//    JOSM PBF plugin.
+//    Copyright (C) 2011 Don-vip
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+package org.openstreetmap.josm.plugins.pbf.io;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationMemberData;
+import org.openstreetmap.josm.data.osm.User;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.io.AbstractReader;
+import org.openstreetmap.josm.io.IllegalDataException;
+import org.openstreetmap.josm.tools.CheckParameterUtil;
+
+import crosby.binary.BinaryParser;
+import crosby.binary.Osmformat;
+import crosby.binary.Osmformat.DenseNodes;
+import crosby.binary.Osmformat.HeaderBlock;
+import crosby.binary.Osmformat.Info;
+import crosby.binary.file.BlockInputStream;
+import crosby.binary.file.FileBlockPosition;
+
+/**
+ * @author Don-vip
+ *
+ */
+public class PbfReader extends AbstractReader {
+    
+    protected class PbfParser extends BinaryParser {
+
+        public IllegalDataException exception = null;
+        
+        @Override
+        protected void parse(HeaderBlock header) {
+        }
+
+        /* (non-Javadoc)
+         * @see crosby.binary.BinaryParser#skipBlock(crosby.binary.file.FileBlockPosition)
+         */
+        @Override
+        public boolean skipBlock(FileBlockPosition block) {
+            return exception != null;
+        }
+        
+        protected void checkCoordinates(LatLon coor) throws IllegalDataException {
+            if (!coor.isValid()) {
+                throw new IllegalDataException(tr("Invalid coordinates: {0}", coor));
+            }
+        }
+
+        protected void checkChangesetId(long id) throws IllegalDataException {
+            if (id > Integer.MAX_VALUE) {
+                throw new IllegalDataException(tr("Invalid changeset id: {0}", id));
+            }
+        }
+        
+        protected void checkTimestamp(long timestamp) throws IllegalDataException {
+            if (timestamp < 0) {
+                throw new IllegalDataException(tr("Invalid timestamp: {0}", timestamp));
+            }
+        }
+
+        @Override
+        protected void parseDense(DenseNodes nodes) {
+            if (exception == null) {
+                try {
+                    int keyIndex = 0;
+                    // Almost all data is DELTA coded
+                    long nodeId = 0;
+                    long nodeLat = 0;
+                    long nodeLon = 0;
+                    long changesetId = 0;
+                    int uid = 0;
+                    int suid = 0;
+                    long timestamp = 0;
+                    for (int i = 0; i < nodes.getIdCount(); i++) {
+                        // Id (delta) and version (normal)
+                        Node node = new Node(nodeId+=nodes.getId(i), nodes.getDenseinfo().getVersion(i));
+                        // Lat/Lon (delta)
+                        node.setCoor(new LatLon(parseLat(nodeLat+=nodes.getLat(i)), parseLon(nodeLon+=nodes.getLon(i))).getRoundedToOsmPrecision());
+                        checkCoordinates(node.getCoor());
+                        // Changeset (delta)
+                        checkChangesetId(changesetId+=nodes.getDenseinfo().getChangeset(i));
+                        node.setChangesetId((int) changesetId);
+                        // User (delta)
+                        node.setUser(User.createOsmUser(uid+=nodes.getDenseinfo().getUid(i), getStringById(suid+=nodes.getDenseinfo().getUserSid(i))));
+                        // Timestamp (delta)
+                        checkTimestamp(timestamp+=nodes.getDenseinfo().getTimestamp(i));
+                        node.setTimestamp(new Date(date_granularity * timestamp));
+                        // A single table contains all keys/values of all nodes.
+                        // Each node's tags are encoded in alternating <key_id> <value_id>.
+                        // A single stringid of 0 delimit when the tags of a node ends and the tags of the next node begin.
+                        Map<String, String> keys = new HashMap<String, String>();
+                        while (keyIndex < nodes.getKeysValsCount()) {
+                            int key_id = nodes.getKeysVals(keyIndex++);
+                            if (key_id == 0) {
+                                break; // End of current node's tags
+                            } else if (keyIndex < nodes.getKeysValsCount()) {
+                                int value_id = nodes.getKeysVals(keyIndex++);
+                                keys.put(getStringById(key_id), getStringById(value_id));
+                            } else {
+                                throw new IllegalDataException(tr("Invalid DenseNodes key/values table"));
+                            }
+                        }
+                        node.setKeys(keys);
+                        externalIdMap.put(node.getPrimitiveId(), node);
+                    }
+                } catch (IllegalDataException e) {
+                    exception = e;
+                }
+            }
+        }
+
+        @Override
+        protected void parseNodes(List<Osmformat.Node> osmNodes) {
+            if (exception == null) {
+                try {
+                    for (Osmformat.Node n : osmNodes) {
+                    	final Info info = n.getInfo();
+                        final Node node = new Node(n.getId(), info.getVersion());
+                        node.setCoor(new LatLon(parseLat(n.getLat()), parseLon(n.getLon())).getRoundedToOsmPrecision());
+                        checkCoordinates(node.getCoor());
+                        checkChangesetId(info.getChangeset());
+                        node.setChangesetId((int) info.getChangeset());
+                        node.setUser(User.createOsmUser(info.getUid(), getStringById(info.getUserSid())));
+                        checkTimestamp(info.getTimestamp());
+                        node.setTimestamp(getDate(info));
+                        Map<String, String> keys = new HashMap<String, String>();
+                        for (int i=0; i<n.getKeysCount(); i++) {
+                            keys.put(getStringById(n.getKeys(i)), getStringById(n.getVals(i)));
+                        }
+                        node.setKeys(keys);
+                        externalIdMap.put(node.getPrimitiveId(), node);
+                    }
+                } catch (IllegalDataException e) {
+                    exception = e;
+                }
+            }
+        }
+        
+        @Override
+        protected void parseWays(List<Osmformat.Way> osmWays) {
+            if (exception == null) {
+                try {
+                    for (Osmformat.Way w : osmWays) {
+                    	final Info info = w.getInfo();
+                        final Way way = new Way(w.getId(), info.getVersion());
+                        checkChangesetId(info.getChangeset());
+                        way.setChangesetId((int) info.getChangeset());
+                        way.setUser(User.createOsmUser(info.getUid(), getStringById(info.getUserSid())));
+                        checkTimestamp(info.getTimestamp());
+                        way.setTimestamp(getDate(info));
+                        Map<String, String> keys = new HashMap<String, String>();
+                        for (int i=0; i<w.getKeysCount(); i++) {
+                            keys.put(getStringById(w.getKeys(i)), getStringById(w.getVals(i)));
+                        }
+                        way.setKeys(keys);
+                        long previousId = 0; // Node ids are delta coded
+                        Collection<Long> nodeIds = new ArrayList<Long>();
+                        for (Long id : w.getRefsList()) {
+                            nodeIds.add(previousId+=id);
+                        }
+                        ways.put(way.getUniqueId(), nodeIds);
+                        externalIdMap.put(way.getPrimitiveId(), way);
+                    }
+                } catch (IllegalDataException e) {
+                    exception = e;
+                }
+            }
+        }
+        
+        @Override
+        protected void parseRelations(List<Osmformat.Relation> osmRels) {
+            if (exception == null) {
+                try {
+                    for (Osmformat.Relation r : osmRels) {
+                    	final Info info = r.getInfo();
+                        final Relation rel = new Relation(r.getId(), info.getVersion());
+                        checkChangesetId(info.getChangeset());
+                        rel.setChangesetId((int) info.getChangeset());
+                        rel.setUser(User.createOsmUser(info.getUid(), getStringById(info.getUserSid())));
+                        checkTimestamp(info.getTimestamp());
+                        rel.setTimestamp(getDate(info));
+                        Map<String, String> keys = new HashMap<String, String>();
+                        for (int i=0; i<r.getKeysCount(); i++) {
+                            keys.put(getStringById(r.getKeys(i)), getStringById(r.getVals(i)));
+                        }
+                        rel.setKeys(keys);
+                        long previousId = 0; // Member ids are delta coded
+                        Collection<RelationMemberData> members = new ArrayList<RelationMemberData>();
+                        for (int i = 0; i<r.getMemidsCount(); i++) {
+                            long id = previousId+=r.getMemids(i);
+                            String role = getStringById(r.getRolesSid(i));
+                            OsmPrimitiveType type = null;
+                            switch (r.getTypes(i)) {
+                                case NODE:
+                                    type = OsmPrimitiveType.NODE;
+                                    break;
+                                case WAY:
+                                    type = OsmPrimitiveType.WAY;
+                                    break;
+                                case RELATION:
+                                    type = OsmPrimitiveType.RELATION;
+                                    break;
+                            }
+                            members.add(new RelationMemberData(role, type, id));
+                        }
+                        relations.put(rel.getUniqueId(), members);
+                        externalIdMap.put(rel.getPrimitiveId(), rel);
+                    }
+                } catch (IllegalDataException e) {
+                    exception = e;
+                }
+            }
+        }
+
+        @Override
+        public void complete() {
+        }
+    }
+
+    private PbfParser parser = new PbfParser();
+    
+    /**
+     * Parse the given input source and return the dataset.
+     *
+     * @param source the source input stream. Must not be null.
+     * @param progressMonitor  the progress monitor. If null, {@see NullProgressMonitor#INSTANCE} is assumed
+     *
+     * @return the dataset with the parsed data
+     * @throws IllegalDataException thrown if the an error was found while parsing the data from the source
+     * @throws IllegalArgumentException thrown if source is null
+     */
+    public static DataSet parseDataSet(InputStream source, ProgressMonitor progressMonitor) throws IllegalDataException {
+        if (progressMonitor == null) {
+            progressMonitor = NullProgressMonitor.INSTANCE;
+        }
+        CheckParameterUtil.ensureParameterNotNull(source, "source");
+
+        PbfReader reader = new PbfReader();
+        
+        try {
+            progressMonitor.beginTask(tr("Prepare OSM data...", 2));
+            progressMonitor.indeterminateSubTask(tr("Reading OSM data..."));
+
+            reader.parse(source);
+            progressMonitor.worked(1);
+
+            progressMonitor.indeterminateSubTask(tr("Preparing data set..."));
+            reader.prepareDataSet();
+            progressMonitor.worked(1);
+            return reader.getDataSet();
+        } catch (IllegalDataException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new IllegalDataException(e);
+        } finally {
+            progressMonitor.finishTask();
+        }
+    }
+
+    public void parse(InputStream source) throws IOException, IllegalDataException {
+        new BlockInputStream(source, parser).process();
+        if (parser.exception != null) {
+            throw parser.exception;
+        }
+    }
+}
Index: /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/io/PbfServerReader.java
===================================================================
--- /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/io/PbfServerReader.java	(revision 26961)
+++ /applications/editors/josm/plugins/pbf/src/org/openstreetmap/josm/plugins/pbf/io/PbfServerReader.java	(revision 26961)
@@ -0,0 +1,45 @@
+//    JOSM PBF plugin.
+//    Copyright (C) 2011 Don-vip
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+package org.openstreetmap.josm.plugins.pbf.io;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.io.OsmServerReader;
+import org.openstreetmap.josm.io.OsmTransferException;
+
+public class PbfServerReader extends OsmServerReader {
+
+	private String url;
+	
+	public PbfServerReader(String url) {
+		this.url = url;
+	}
+
+	@Override
+	public DataSet parseOsm(ProgressMonitor progressMonitor)
+			throws OsmTransferException {
+        try {
+            progressMonitor.beginTask(tr("Contacting Server...", 10));
+            return new PbfImporter().parseDataSet(url);
+        } catch (Exception e) {
+            throw new OsmTransferException(e);
+        } finally {
+            progressMonitor.finishTask();
+        }
+	}
+}
